diff --git a/.envrc b/.envrc index 3550a30f..8392d159 100644 --- a/.envrc +++ b/.envrc @@ -1 +1 @@ -use flake +use flake \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 90e05c40..00000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,11 +0,0 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -updates: - - package-ecosystem: "github-actions" # See documentation for possible values - directory: "/" # Location of package manifests - schedule: - interval: "weekly" diff --git a/.github/workflows/update-riscv.yaml b/.github/workflows/update-riscv.yaml deleted file mode 100644 index 2ed87d2c..00000000 --- a/.github/workflows/update-riscv.yaml +++ /dev/null @@ -1,24 +0,0 @@ -name: update-riscv -on: - push: - branches: - - main -jobs: - pr: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Create update pull request - run: | - curl -X 'POST' \ - 'https://git.chir.rs/api/v1/repos/darkkirb/nixos-config/pulls' \ - -H 'Authorization: Bearer ${{secrets.GITHUB_TOKEN}}' \ - -H 'accept: application/json' \ - -H 'Content-Type: application/json' \ - -d '{ - "base": "main-riscv", - "body": "Keeping main-riscv up to date", - "head": "main", - "title": "Update RISC-V config" - }' diff --git a/.gitignore b/.gitignore index 52c1f543..76570c15 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,2 @@ result -*.qcow2 -*.fd -.direnv -/efi/secret +.direnv/ \ No newline at end of file diff --git a/.sops.yaml b/.sops.yaml index 0d26cb84..f433d6c8 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -1,75 +1,72 @@ keys: - - &lotte age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 - - &nixos-8gb-fsn1-1 age1273ps5thcy70ckdt0270s2nysqgu48t38pq3wq975v3y7mf4eavsw38wsl - - &thinkrac age1p400545a482fma40yfgytu40p6wr5a75v4f8yeudvgf7eh5erufqxhgynr - - &nas age1c7y687sxh428wk34s8ws6kemu62mggafpt40rmanevgkuj5xa59q6f7tlc - - &instance-20221213-1915 age1elra3uklw8rmwkevqms2l4tsd06d5utqda9d2w4qvqpz898uzuesugxkhc - - &vf2 age1emv3kzvwgl36hgllrv7rlekqy3y3c6eztadl3lv09ks3z9vv6vdqw06yqa + - &base age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 + - &darkkirb age15g6tzvcmcp3ae4hwnn4pwewat6eq9unlhtjrlaka6rf94ej9dd5qqpgt7u + - ¬522 age1emv3kzvwgl36hgllrv7rlekqy3y3c6eztadl3lv09ks3z9vv6vdqw06yqa + - &pc-installer age1eh2vd6cdy23qazwg0hzq95pn9e6p8yaqu4g6zyan8gzal4x5ed5qful8kg - &rainbow-resort age19vzypddhexvvsf8xylstxc9znnkd8rxmamhjlt7elvz4j3zaf5tqqura6f - - &devterm age1sqvl2cwvzeztuelpwppaestqufzeap8uf0vgy7t5mzr9rwc3dpxqhx8ly9 + - &thinkrac age1p400545a482fma40yfgytu40p6wr5a75v4f8yeudvgf7eh5erufqxhgynr creation_rules: - - path_regex: secrets/shared\.yaml$ + - path_regex: machine/not522/secrets\.yaml$ key_groups: - age: - - *nixos-8gb-fsn1-1 + - *base + - *not522 + - path_regex: services/tailscale\.yaml$ + key_groups: + - age: + - *base + - *not522 + - *rainbow-resort - *thinkrac - - *nas - - *instance-20221213-1915 - - *vf2 + - path_regex: services/restic\.yaml$ + key_groups: + - age: + - *base + - *not522 - *rainbow-resort - - *lotte - - *devterm - - path_regex: secrets/nixos-8gb-fsn1-1\.yaml$ - key_groups: - - age: - - *nixos-8gb-fsn1-1 - - *lotte - - path_regex: secrets/thinkrac\.yaml$ - key_groups: - - age: - *thinkrac - - *lotte - - path_regex: secrets/nixos\.yaml$ - key_groups: - - age: - - *lotte - - path_regex: secrets/nas\.yaml$ - key_groups: - - age: - - *nas - - *lotte - - path_regex: secrets/desktop\.yaml$ + - path_regex: users/root/system\.yaml$ key_groups: - age: + - *base + - *not522 + - *pc-installer + - *rainbow-resort - *thinkrac + - path_regex: users/darkkirb/system\.yaml$ + key_groups: + - age: + - *base + - *not522 + - *pc-installer - *rainbow-resort - - *lotte - - *devterm - - path_regex: secrets/instance-20221213-1915\.yaml$ + - *thinkrac + - path_regex: users/darkkirb/home-manager/keys.yaml$ key_groups: - age: - - *instance-20221213-1915 - - *lotte - - path_regex: secrets/vf2\.yaml$ - key_groups: - - age: - - *vf2 - - *lotte - - path_regex: secrets/rainbow-resort\.yaml$ + - *base + - *darkkirb + - path_regex: programs/ssh/shared-keys.yaml$ key_groups: - age: + - *base + - *darkkirb + - *not522 + - *pc-installer - *rainbow-resort - - *lotte - - path_regex: secrets/devterm\.yaml$ + - *thinkrac + - path_regex: programs/desktop/pim/secrets.yaml$ key_groups: - age: - - *devterm - - *lotte - - path_regex: secrets/kubernetes\.yaml$ + - *base + - *darkkirb + - path_regex: config/kde/krdp.yaml$ key_groups: - age: - - *nixos-8gb-fsn1-1 - - *nas - - *instance-20221213-1915 - - *rainbow-resort - - *lotte + - *base + - *darkkirb + - path_regex: services/desktop/gpg/privkey.yaml + key_groups: + - age: + - *base + - *darkkirb \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index b48e6728..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "python.formatting.provider": "yapf", - "conventionalCommits.scopes": ["thinkrac", "aarch64"], - "files.associations": { - "*.hujson": "jsonc" - }, - "json.schemas": [ - { - "fileMatch": ["*.hujson"], - "schema": { - "allowTrailingCommas": true - } - } - ], - "files.watcherExclude": { - "**/target": true - } -} diff --git a/README.md b/README.md new file mode 100644 index 00000000..7dd58835 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Lotte’s New Nix configuration + +Very WIP rewrite \ No newline at end of file diff --git a/config/bittorrent-blocker.nix b/config/bittorrent-blocker.nix deleted file mode 100644 index 496de109..00000000 --- a/config/bittorrent-blocker.nix +++ /dev/null @@ -1,50 +0,0 @@ -_: { - networking.firewall.extraCommands = '' - # Taken from https://gist.github.com/rampageX/5cbe95be43ca3165f4d963629e3bb946 - # Block Torrent algo string using Boyer-Moore (bm) - iptables -I FORWARD 1 -m string --algo bm --string "BitTorrent" -j DROP - iptables -I FORWARD 1 -m string --algo bm --string "BitTorrent protocol" -j DROP - iptables -I FORWARD 1 -m string --algo bm --string "peer_id=" -j DROP - iptables -I FORWARD 1 -m string --algo bm --string ".torrent" -j DROP - iptables -I FORWARD 1 -m string --algo bm --string "announce.php?passkey=" -j DROP - iptables -I FORWARD 1 -m string --algo bm --string "torrent" -j DROP - iptables -I FORWARD 1 -m string --algo bm --string "announce" -j DROP - iptables -I FORWARD 1 -m string --algo bm --string "info_hash" -j DROP - iptables -I FORWARD 1 -m string --algo bm --string "/default.ida?" -j DROP - iptables -I FORWARD 1 -m string --algo bm --string ".exe?/c+dir" -j DROP - iptables -I FORWARD 1 -m string --algo bm --string ".exe?/c_tftp" -j DROP - ip6tables -I FORWARD 1 -m string --algo bm --string "BitTorrent" -j DROP - ip6tables -I FORWARD 1 -m string --algo bm --string "BitTorrent protocol" -j DROP - ip6tables -I FORWARD 1 -m string --algo bm --string "peer_id=" -j DROP - ip6tables -I FORWARD 1 -m string --algo bm --string ".torrent" -j DROP - ip6tables -I FORWARD 1 -m string --algo bm --string "announce.php?passkey=" -j DROP - ip6tables -I FORWARD 1 -m string --algo bm --string "torrent" -j DROP - ip6tables -I FORWARD 1 -m string --algo bm --string "announce" -j DROP - ip6tables -I FORWARD 1 -m string --algo bm --string "info_hash" -j DROP - ip6tables -I FORWARD 1 -m string --algo bm --string "/default.ida?" -j DROP - ip6tables -I FORWARD 1 -m string --algo bm --string ".exe?/c+dir" -j DROP - ip6tables -I FORWARD 1 -m string --algo bm --string ".exe?/c_tftp" -j DROP - # Block Torrent keys - iptables -I FORWARD 1 -m string --algo kmp --string "peer_id" -j DROP - iptables -I FORWARD 1 -m string --algo kmp --string "BitTorrent" -j DROP - iptables -I FORWARD 1 -m string --algo kmp --string "BitTorrent protocol" -j DROP - iptables -I FORWARD 1 -m string --algo kmp --string "bittorrent-announce" -j DROP - iptables -I FORWARD 1 -m string --algo kmp --string "announce.php?passkey=" -j DROP - ip6tables -I FORWARD 1 -m string --algo kmp --string "peer_id" -j DROP - ip6tables -I FORWARD 1 -m string --algo kmp --string "BitTorrent" -j DROP - ip6tables -I FORWARD 1 -m string --algo kmp --string "BitTorrent protocol" -j DROP - ip6tables -I FORWARD 1 -m string --algo kmp --string "bittorrent-announce" -j DROP - ip6tables -I FORWARD 1 -m string --algo kmp --string "announce.php?passkey=" -j DROP - # Block Distributed Hash Table (DHT) keywords - iptables -I FORWARD 1 -m string --algo kmp --string "find_node" -j DROP - iptables -I FORWARD 1 -m string --algo kmp --string "info_hash" -j DROP - iptables -I FORWARD 1 -m string --algo kmp --string "get_peers" -j DROP - iptables -I FORWARD 1 -m string --algo kmp --string "announce" -j DROP - iptables -I FORWARD 1 -m string --algo kmp --string "announce_peers" -j DROP - ip6tables -I FORWARD 1 -m string --algo kmp --string "find_node" -j DROP - ip6tables -I FORWARD 1 -m string --algo kmp --string "info_hash" -j DROP - ip6tables -I FORWARD 1 -m string --algo kmp --string "get_peers" -j DROP - ip6tables -I FORWARD 1 -m string --algo kmp --string "announce" -j DROP - ip6tables -I FORWARD 1 -m string --algo kmp --string "announce_peers" -j DROP - ''; -} diff --git a/config/default.nix b/config/default.nix index 4916fb34..7e2a99dd 100644 --- a/config/default.nix +++ b/config/default.nix @@ -1,91 +1,18 @@ +{ pkgs, nixos-config, ... }: { - config, - pkgs, - system, - ... -}: { imports = [ - ./users/darkkirb.nix - ./users/root.nix - ./nix.nix - ./sops.nix - ./home.nix - ./services/restic.nix - ./specialization.nix - ./services/promtail.nix - ./env.nix - ./tailscale.nix - ./services/otel.nix - ]; - services.openssh.enable = true; - environment.systemPackages = with pkgs; - [ - git - ] - ++ ( - if system != "riscv64-linux" - then [kitty.terminfo] - else [] - ); - networking.firewall.allowedTCPPorts = [22]; - networking.firewall.allowedUDPPortRanges = [ - { - from = 60000; - to = 61000; - } - ]; - - users.defaultUserShell = pkgs.zsh; - - environment.pathsToLink = ["/share/zsh"]; - - console.keyMap = "neo"; - - security.sudo.extraConfig = '' - Defaults env_keep += "TMUX" - ''; - - programs.zsh.enable = true; - users.mutableUsers = false; - - sops.secrets."root/aws/credentials" = { - sopsFile = ../secrets/shared.yaml; - owner = "root"; - key = "aws/credentials"; - path = "/root/.aws/credentials"; - }; - sops.secrets."root/ssh/builder_id_ed25519" = { - sopsFile = ../secrets/shared.yaml; - owner = "root"; - key = "ssh/builder_id_ed25519"; - path = "/root/.ssh/builder_id_ed25519"; - }; - sops.secrets."darkkirb/ssh/builder_id_ed25519" = { - sopsFile = ../secrets/shared.yaml; - owner = "darkkirb"; - key = "ssh/builder_id_ed25519"; - path = "/home/darkkirb/.ssh/builder_id_ed25519"; - }; - - programs.ssh.knownHosts = { - "nas.int.chir.rs".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDhao1I1Kd1gK5bERUdjMxP9yHDrSHYZsTN2TcSk0K/U"; - "backup.int.chir.rs".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDhao1I1Kd1gK5bERUdjMxP9yHDrSHYZsTN2TcSk0K/U"; - }; - boot.kernel.sysctl = { - "fs.inotify.max_user_watches" = 524288; - }; - services.prometheus.exporters.node = { - port = 31941; - enabledCollectors = [ - "buddyinfo" - "cgroups" - "systemd" - "ethtool" - ]; - enable = true; - }; - i18n.defaultLocale = "nl_NL.UTF-8"; - nixpkgs.config.permittedInsecurePackages = [ - "olm-3.2.16" + "${nixos-config}/modules" + "${nixos-config}/services/tailscale.nix" + "${nixos-config}/services/openssh.nix" + "${nixos-config}/services/restic.nix" + "${nixos-config}/users" + "${nixos-config}/programs" + ./systemd-boot.nix + ./i18n.nix + ./overlays ]; + boot.initrd.systemd.enable = true; + boot.kernelPackages = pkgs.linuxPackages_latest; + hardware.enableRedistributableFirmware = true; + security.sudo.enable = false; } diff --git a/config/desktop-secrets.nix b/config/desktop-secrets.nix deleted file mode 100644 index 268becca..00000000 --- a/config/desktop-secrets.nix +++ /dev/null @@ -1,25 +0,0 @@ -_: let - mkSopsSecret = { - name, - path, - }: { - name = "desktop/${name}"; - value = { - sopsFile = ../secrets/desktop.yaml; - owner = "darkkirb"; - key = name; - path = "/home/darkkirb/${path}"; - }; - }; -in { - sops.secrets = builtins.listToAttrs (map mkSopsSecret [ - { - name = "aws/credentials"; - path = ".aws/credentials"; - } - { - name = ".config/gh/hosts.yml"; - path = ".config/gh/hosts.yml"; - } - ]); -} diff --git a/config/desktop.nix b/config/desktop.nix deleted file mode 100644 index 3925ea09..00000000 --- a/config/desktop.nix +++ /dev/null @@ -1,209 +0,0 @@ -{ - system, - config, - pkgs, - lib, - ... -} @ args: let - lockscreen-all = pkgs.writeScript "lockscreen-all" '' - #!${pkgs.bash}/bin/bash - - if ${pkgs.coreutils}/bin/[ -z "$(${pkgs.usbutils}/bin/lsusb | grep Yubico)" ]; then - ${pkgs.systemd}/bin/loginctl list-sessions | ${pkgs.gnugrep}/bin/grep '^\ ' | ${pkgs.gawk}/bin/awk '{print $1}' | ${pkgs.findutils}/bin/xargs -i ${pkgs.systemd}/bin/loginctl lock-session {} - fi - ''; -in { - imports = - [ - ./services/pipewire.nix - ./desktop-secrets.nix - ./services/cups.nix - ./services/docker.nix - ./services/cifs.nix - ./kde.nix - #./sway.nix - ] - /* - ++ ( - if system == "x86_64-linux" - then [./programs/virtualbox.nix] - else [] - ) - */ - ; - fonts = { - fontDir.enable = true; - fontconfig = { - enable = true; - defaultFonts = { - emoji = ["Noto Color Emoji"]; - monospace = ["Fira Code" "Font Awesome 5 Free"]; - sansSerif = ["Noto Sans" "Font Awesome 5 Free"]; - serif = ["Noto Serif" "Font Awesome 5 Free"]; - }; - }; - packages = with pkgs; [ - fira-code - fira-code-symbols - font-awesome - noto-fonts - noto-fonts-cjk-sans - noto-fonts-emoji - noto-fonts-extra - (nerdfonts.override {fonts = ["FiraCode" "DroidSansMono" "Noto"];}) - nasin-nanpa - fairfax-hd - (pkgs.stdenvNoCC.mkDerivation rec { - pname = "zbalermorna"; - version = "920b28d798ae1c06885c674bbf02b08ffed12b2f"; - src = pkgs.fetchFromGitHub { - owner = "jackhumbert"; - repo = pname; - rev = version; - sha256 = "00sl3f1x4frh166mq85lwl9v1f5r3ckkfg8id5fibafymick5vyp"; - }; - installPhase = '' - mkdir -p $out/share/fonts - cp -r $src/fonts/*.otf $out/share/fonts - ''; - }) - ]; - }; - fonts.fontconfig.localConf = '' - - - - - - Fairfax HD - - - 100 - - - - ''; - - time.timeZone = "Europe/Berlin"; - services.pcscd.enable = true; - - security.pam = { - services.login.u2fAuth = true; - services.swaylock.u2fAuth = true; - u2f = { - enable = true; - control = "required"; - }; - }; - services.udev.extraRules = '' - ACTION=="remove", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0407", RUN+="${lockscreen-all}" - ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="e621", ATTRS{idProduct}=="0000", TAG+="uaccess" - ACTION=="add", SUBSYSTEM=="hidraw*", ATTRS{idVendor}=="e621", ATTRS{idProduct}=="0000", TAG+="uaccess" - ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="0337", TAG+="uaccess" - ACTION=="add", SUBSYSTEM=="hidraw*", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="0306", TAG+="uaccess" - ACTION=="add", SUBSYSTEM=="hidraw*", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="0330", TAG+="uaccess" - ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS={idProduct}=="6010", OWNER="user", MODE="0777", GROUP="dialout" - ''; - programs.steam.enable = system == "x86_64-linux"; - nixpkgs.overlays = [ - (curr: prev: { - steam = prev.steam.override { - extraPkgs = pkgs: - with pkgs; [ - mono - fuse - ]; - }; - }) - ]; - services.flatpak.enable = true; - programs.java.enable = true; - hardware.opengl.driSupport32Bit = lib.mkForce (system == "x86_64-linux"); - home-manager.users.darkkirb = import ./home-manager/darkkirb.nix { - desktop = true; - inherit args; - }; - - # For syncthing - networking.firewall.allowedTCPPorts = [22000]; - networking.firewall.allowedUDPPorts = [22000]; - networking.firewall.allowedTCPPortRanges = [ - { - from = 1714; - to = 1764; - } - ]; - networking.firewall.allowedUDPPortRanges = [ - { - from = 1714; - to = 1764; - } - ]; - - environment.systemPackages = with pkgs; [ - pinentry-qt - dotool - wl-clipboard - #plasma5Packages.thirdParty.lightly - ]; - - xdg.portal = { - enable = true; - wlr.enable = true; - # gtk portal needed to make gtk apps happy - extraPortals = [pkgs.xdg-desktop-portal-gtk]; - config.common.default = "*"; - }; - programs.dconf.enable = true; - services.xserver = { - enable = true; - libinput.enable = true; - layout = "de"; - xkbVariant = "neo"; - displayManager.lightdm.enable = false; - extraLayouts.zlr = { - description = "lojban layout"; - languages = ["jbo"]; - symbolsFile = ../extra/keyboard/symbols; - }; - }; - i18n.inputMethod = { - enabled = "ibus"; - ibus.engines = with pkgs.ibus-engines; [anthy]; - }; - security.polkit.enable = true; - services.dbus.enable = true; - services.dbus.packages = with pkgs; [dconf]; - # Futureproofing: on non-x86 machines, emulate x86 - boot.binfmt.emulatedSystems = - if system != "x86_64-linux" - then [ - "x86_64-linux" - "i686-linux" - ] - else []; - - virtualisation = { - waydroid.enable = true; - lxd.enable = true; - }; - - programs.gamemode.enable = true; - nixpkgs.config.permittedInsecurePackages = ["electron-26.3.0"]; - - boot = { - plymouth.enable = true; - consoleLogLevel = 0; - initrd.verbose = false; - kernelParams = [ - "quiet" - "splash" - "boot.shell_on_fail" - "loglevel=3" - "rd.systemd.show_status=false" - "rd.udev.log_level=3" - "udev.log_priority=3" - ]; - loader.timeout = 0; - }; -} diff --git a/config/devterm.nix b/config/devterm.nix deleted file mode 100644 index 65cf8ddd..00000000 --- a/config/devterm.nix +++ /dev/null @@ -1,114 +0,0 @@ -{ - nixos-hardware, - config, - lib, - pkgs, - ... -}: { - boot.kernelPackages = pkgs.linuxPackagesFor pkgs.linux-devterm; - boot.kernelParams = ["fbcon=rotate:1"]; - networking.hostName = "devterm"; - imports = [ - ./desktop.nix - ]; - boot.loader = { - grub.enable = lib.mkDefault false; - generic-extlinux-compatible.enable = lib.mkDefault true; - }; - boot.initrd = { - includeDefaultModules = false; - availableKernelModules = [ - "usbhid" - "usb_storage" - "vc4" - "pcie_brcmstb" # required for the pcie bus to work - "reset-raspberrypi" # required for vl805 firmware to load - "mmc_block" - "usbhid" - "hid_generic" - "panel_cwd686" - "ocp8178_bl" - "ti_adc081c" - ]; - }; - environment.systemPackages = with pkgs; [ - libraspberrypi - raspberrypi-eeprom - ]; - system.stateVersion = "24.05"; - fileSystems."/" = { - device = "/dev/mmcblk0p2"; - fsType = "btrfs"; - options = ["compress=zstd"]; - }; - - fileSystems."/boot" = { - device = "/dev/mmcblk0p1"; - fsType = "vfat"; - }; - security.pam = { - services.login.u2fAuth = lib.mkForce false; - services.swaylock.u2fAuth = lib.mkForce false; - u2f.enable = lib.mkForce false; - services.sddm.u2fAuth = lib.mkForce false; - }; - networking.networkmanager.enable = true; - users.users.darkkirb.extraGroups = ["networkmanager"]; - hardware.deviceTree.filter = "*rpi*.dtb"; - hardware.deviceTree.overlays = [ - { - name = "dwc2"; - dtsFile = ./devterm/dwc2-overlay.dts; - } - { - name = "cma"; - dtsFile = ./devterm/cma-overlay.dts; - } - { - name = "vc4-kms-v3d-pi4"; - dtsFile = ./devterm/vc4-kms-v3d-pi4-overlay.dts; - } - { - name = "devterm-pmu"; - dtsFile = ./devterm/devterm-pmu-overlay.dts; - } - { - name = "devterm-panel"; - dtsFile = ./devterm/devterm-panel-overlay.dts; - } - { - name = "devterm-misc"; - dtsFile = ./devterm/devterm-misc-overlay.dts; - } - { - name = "audremap"; - dtsFile = ./devterm/audremap-overlay.dts; - } - { - name = "spi"; - dtsFile = ./devterm/spi0-overlay.dts; - } - { - name = "devterm-overlay"; - dtsFile = ./devterm/devterm-overlay.dts; - } - ]; - hardware.enableRedistributableFirmware = true; - services.xserver.xkbVariant = lib.mkForce "us"; - console.keyMap = lib.mkForce "us"; - home-manager.users.darkkirb.wayland.windowManager.sway.config.input."*" = lib.mkForce { - xkb_layout = "us"; - xkb_variant = "altgr-intl"; - }; - boot.initrd.systemd.tpm2.enable = lib.mkForce false; - systemd.tpm2.enable = lib.mkForce false; - services.displayManager = { - autoLogin = { - enable = true; - user = "darkkirb"; - }; - sddm = { - autoLogin.relogin = true; - }; - }; -} diff --git a/config/devterm/audremap-overlay.dts b/config/devterm/audremap-overlay.dts deleted file mode 100644 index 9f4c01e2..00000000 --- a/config/devterm/audremap-overlay.dts +++ /dev/null @@ -1,23 +0,0 @@ -/dts-v1/; -/plugin/; - -/ { - compatible = "brcm,bcm2711"; - - fragment@0 { - target = <&audio_pins>; - __overlay__ { - status = "okay"; - }; - }; - - fragment@1 { - target = <&audio_pins>; - __overlay__ { - brcm,pins = < 12 13 >; - brcm,function = < 4 >; /* alt0 alt0 */ - }; - }; - - -}; \ No newline at end of file diff --git a/config/devterm/cma-overlay.dts b/config/devterm/cma-overlay.dts deleted file mode 100644 index 969d79ed..00000000 --- a/config/devterm/cma-overlay.dts +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/dts-v1/; -/plugin/; - -/ { - compatible = "brcm,bcm2711"; - - fragment@0 { - target = <&cma>; - __overlay__ { - size = <(384 * 1024 * 1024)>; - }; - }; -}; \ No newline at end of file diff --git a/config/devterm/devterm-misc-overlay.dts b/config/devterm/devterm-misc-overlay.dts deleted file mode 100644 index 4f98a9be..00000000 --- a/config/devterm/devterm-misc-overlay.dts +++ /dev/null @@ -1,80 +0,0 @@ -/dts-v1/; -/plugin/; - -/{ - compatible = "brcm,bcm2711"; - - fragment@0 { - target = <&i2c1>; - __overlay__ { - #address-cells = <1>; - #size-cells = <0>; - pinctrl-names = "default"; - pinctrl-0 = <&i2c1_pins>; - status = "okay"; - - adc101c: adc@54 { - reg = <0x54>; - compatible = "ti,adc101c"; - status = "okay"; - }; - }; - }; - - fragment@1 { - target = <&spi4>; - __overlay__ { - pinctrl-names = "default"; - pinctrl-0 = <&spi4_pins &spi4_cs_pins>; - cs-gpios = <&gpio 4 1>; - status = "okay"; - - spidev4_0: spidev@0 { - compatible = "spidev"; - reg = <0>; /* CE0 */ - #address-cells = <1>; - #size-cells = <0>; - spi-max-frequency = <125000000>; - status = "okay"; - }; - }; - }; - - fragment@2 { - target = <&uart1>; - __overlay__ { - pinctrl-names = "default"; - pinctrl-0 = <&uart1_pins>; - status = "okay"; - }; - }; - - fragment@3 { - target = <&gpio>; - __overlay__ { - - i2c1_pins: i2c1 { - brcm,pins = <44 45>; - brcm,function = <6>; - }; - - spi4_pins: spi4_pins { - brcm,pins = <6 7>; - brcm,function = <7>; - }; - - spi4_cs_pins: spi0_cs_pins { - brcm,pins = <4>; - brcm,function = <1>; - }; - - uart1_pins: uart1_pins { - brcm,pins = <14 15>; - brcm,function = <2>; - brcm,pull = <0 2>; - }; - - }; - }; - -}; \ No newline at end of file diff --git a/config/devterm/devterm-overlay.dts b/config/devterm/devterm-overlay.dts deleted file mode 100644 index e9a5f012..00000000 --- a/config/devterm/devterm-overlay.dts +++ /dev/null @@ -1,130 +0,0 @@ -/dts-v1/; -/plugin/; - -/ { - compatible = "brcm,bcm2711"; - fragment@0 { - target = <&dma40>; - __overlay__ { - dma-channel-mask = <0x3000>; - }; - }; - fragment@1 { - target = <&hdmi0>; - __overlay__ { - status = "okay"; - }; - }; - fragment@2 { - target = <&uart0_pins>; - __overlay__ { - brcm,pull = <0x02 0x00 0x00 0x02>; - brcm,pins = <0x1e 0x1f 0x20 0x21>; - }; - }; - fragment@3 { - target = <&dvp>; - __overlay__ { - status = "okay"; - }; - }; - fragment@4 { - target = <&pixelvalve4>; - __overlay__ { - status = "okay"; - }; - }; - fragment@5 { - target = <&ddc1>; - __overlay__ { - status = "okay"; - }; - }; - fragment@6 { - target = <&txp>; - __overlay__ { - status = "okay"; - }; - }; - fragment@7 { - target = <&hvs>; - __overlay__ { - status = "okay"; - }; - }; - fragment@8 { - target = <&pixelvalve3>; - __overlay__ { - status = "okay"; - }; - }; - fragment@9 { - target = <&spi4>; - __overlay__ { - pinctrl-0 = <0xf0 0xf1>; - }; - }; - fragment@10 { - target = <&pixelvalve2>; - __overlay__ { - status = "okay"; - }; - }; - fragment@11 { - target = <&uart1>; - __overlay__ { - pinctrl-0 = <0xf2>; - status = "disabled"; - }; - }; - fragment@12 { - target = <&pixelvalve1>; - __overlay__ { - status = "okay"; - }; - }; - fragment@13 { - target = <&hdmi1>; - __overlay__ { - status = "okay"; - }; - }; - fragment@14 { - target = <&spi4>; - __overlay__ { - status = "okay"; - }; - }; - fragment@15 { - target = <&ddc0>; - __overlay__ { - status = "okay"; - }; - }; - fragment@16 { - target = <&aon_intr>; - __overlay__ { - status = "okay"; - }; - }; - fragment@17 { - target = <&pixelvalve0>; - __overlay__ { - status = "okay"; - }; - }; - fragment@18 { - target = <&audio>; - __overlay__ { - brcm,disable-headphones = <0x00>; - status = "okay"; - bcrm,disable-hdmi; - }; - }; - fragment@19 { - target-path = "/chosen"; - __overlay__ { - bootargs = "coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 8250.nr_uarts=0 smsc95xx.macaddr=E4:5F:01:E4:FE:2D vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000 8250.nr_uarts=1"; - }; - }; -}; \ No newline at end of file diff --git a/config/devterm/devterm-panel-overlay.dts b/config/devterm/devterm-panel-overlay.dts deleted file mode 100644 index b4703cb3..00000000 --- a/config/devterm/devterm-panel-overlay.dts +++ /dev/null @@ -1,47 +0,0 @@ -/dts-v1/; -/plugin/; - -/ { - compatible = "brcm,bcm2711"; - - fragment@0 { - target=<&dsi1>; - __overlay__ { - #address-cells = <1>; - #size-cells = <0>; - status = "okay"; - - port { - dsi_out_port: endpoint { - remote-endpoint = <&panel_dsi_port>; - }; - }; - - panel_cwd686: panel@0 { - compatible = "cw,cwd686"; - reg = <0>; - reset-gpio = <&gpio 8 1>; - backlight = <&ocp8178_backlight>; - rotation = <0x5a>; - - port { - panel_dsi_port: endpoint { - remote-endpoint = <&dsi_out_port>; - }; - }; - }; - }; - }; - - fragment@1 { - target-path = "/"; - __overlay__ { - ocp8178_backlight: backlight@0 { - compatible = "ocp8178-backlight"; - backlight-control-gpios = <&gpio 9 0>; - default-brightness = <5>; - }; - }; - }; - -}; \ No newline at end of file diff --git a/config/devterm/devterm-pmu-overlay.dts b/config/devterm/devterm-pmu-overlay.dts deleted file mode 100644 index 526163e0..00000000 --- a/config/devterm/devterm-pmu-overlay.dts +++ /dev/null @@ -1,104 +0,0 @@ -/dts-v1/; -/plugin/; - -/ { - compatible = "brcm,bcm2711"; - - fragment@0 { - target = <&i2c0if>; - __overlay__ { - #address-cells = <1>; - #size-cells = <0>; - pinctrl-0 = <&i2c0_pins>; - pinctrl-names = "default"; - status = "okay"; - - axp22x: pmic@34 { - interrupt-controller; - #interrupt-cells = <1>; - compatible = "x-powers,axp223"; - reg = <0x34>; /* i2c address */ - interrupt-parent = <&gpio>; - interrupts = <2 8>; /* IRQ_TYPE_EDGE_FALLING */ - irq-gpios = <&gpio 2 0>; - - regulators { - - x-powers,dcdc-freq = <3000>; - - reg_aldo1: aldo1 { - regulator-always-on; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-name = "audio-vdd"; - }; - - reg_aldo2: aldo2 { - regulator-always-on; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-name = "display-vcc"; - }; - - reg_dldo2: dldo2 { - regulator-always-on; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-name = "dldo2"; - }; - - reg_dldo3: dldo3 { - regulator-always-on; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-name = "dldo3"; - }; - - reg_dldo4: dldo4 { - regulator-always-on; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-name = "dldo4"; - }; - - }; - - battery_power_supply: battery-power-supply { - compatible = "x-powers,axp221-battery-power-supply"; - monitored-battery = <&battery>; - }; - - ac_power_supply: ac_power_supply { - compatible = "x-powers,axp221-ac-power-supply"; - }; - - }; - }; - }; - - fragment@1 { - target = <&i2c0if>; - __overlay__ { - compatible = "brcm,bcm2708-i2c"; - }; - }; - - fragment@2 { - target-path = "/aliases"; - __overlay__ { - i2c0 = "/soc/i2c@7e205000"; - }; - }; - - fragment@3 { - target-path = "/"; - __overlay__ { - battery: battery@0 { - compatible = "simple-battery"; - constant-charge-current-max-microamp = <2100000>; - voltage-min-design-microvolt = <3300000>; - }; - }; - }; - -}; \ No newline at end of file diff --git a/config/devterm/dwc2-overlay.dts b/config/devterm/dwc2-overlay.dts deleted file mode 100644 index 6561464a..00000000 --- a/config/devterm/dwc2-overlay.dts +++ /dev/null @@ -1,22 +0,0 @@ -/dts-v1/; -/plugin/; - -/ { - compatible = "brcm,bcm2711"; - - fragment@0 { - target = <&usb>; - #address-cells = <0x01>; - #size-cells = <0x01>; - - __overlay__ { - compatible = "brcm,bcm2835-usb"; - dr_mode = "host"; - g-np-tx-fifo-size = <0x20>; - g-rx-fifo-size = <0x22e>; - g-tx-fifo-size = <0x200 0x200 0x200 0x200 0x200 0x100 0x100>; - status = "okay"; - phandle = <0x01>; - }; - }; -}; \ No newline at end of file diff --git a/config/devterm/spi0-overlay.dts b/config/devterm/spi0-overlay.dts deleted file mode 100644 index 00ddedc7..00000000 --- a/config/devterm/spi0-overlay.dts +++ /dev/null @@ -1,11 +0,0 @@ -/dts-v1/; -/plugin/; -/ { - compatible = "bcrm,bcm2711"; - fragment@0 { - target = <&spi>; - __overlay__ { - status = "okay"; - }; - }; -}; \ No newline at end of file diff --git a/config/devterm/vc4-kms-v3d-pi4-overlay.dts b/config/devterm/vc4-kms-v3d-pi4-overlay.dts deleted file mode 100644 index 42d5786f..00000000 --- a/config/devterm/vc4-kms-v3d-pi4-overlay.dts +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/dts-v1/; -/plugin/; - -/ { - compatible = "brcm,bcm2711"; - - fragment@1 { - target = <&fb>; - __overlay__ { - status = "disabled"; - }; - }; - - fragment@2 { - target = <&firmwarekms>; - __overlay__ { - status = "disabled"; - }; - }; - - fragment@3 { - target = <&v3d>; - __overlay__ { - status = "okay"; - }; - }; - - fragment@4 { - target = <&vc4>; - __overlay__ { - status = "okay"; - }; - }; -}; \ No newline at end of file diff --git a/config/documentation.nix b/config/documentation.nix new file mode 100644 index 00000000..09e783ca --- /dev/null +++ b/config/documentation.nix @@ -0,0 +1,20 @@ +{ ... }: +{ + #documentation.nixos.includeAllModules = true; + #documentation.nixos.options.warningsAreErrors = false; + /* + home-manager.users.darkkirb = + { + lib, + config, + systemConfig, + ... + }: + { + manual = lib.mkIf (config.home.version.release == systemConfig.system.nixos.release) { + html.enable = true; + json.enable = true; + }; + }; + */ +} diff --git a/config/env.nix b/config/env.nix deleted file mode 100644 index 7f1c0324..00000000 --- a/config/env.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: { - environment.extraInit = let - systemdBin = lib.getBin config.systemd.package; - in '' - set -a - . /dev/fd/0 <= 5.1 is required. - [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return - - # The list of segments shown on the left. Fill it with the most important segments. - typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - os_icon # os identifier - dir # current directory - vcs # git status - # =========================[ Line #2 ]========================= - newline # \n - # prompt_char # prompt symbol - ) - - # The list of segments shown on the right. Fill it with less important segments. - # Right prompt on the last prompt line (where you are typing your commands) gets - # automatically hidden when the input line reaches it. Right prompt above the - # last prompt line gets hidden if it would overlap with left prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - status # exit code of the last command - command_execution_time # duration of the last command - background_jobs # presence of background jobs - direnv # direnv status (https://direnv.net/) - asdf # asdf version manager (https://github.com/asdf-vm/asdf) - virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) - anaconda # conda environment (https://conda.io/) - pyenv # python environment (https://github.com/pyenv/pyenv) - goenv # go environment (https://github.com/syndbg/goenv) - nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) - nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) - nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) - # node_version # node.js version - # go_version # go version (https://golang.org) - rust_version # rustc version (https://www.rust-lang.org) - # dotnet_version # .NET version (https://dotnet.microsoft.com) - # php_version # php version (https://www.php.net/) - # laravel_version # laravel php framework version (https://laravel.com/) - # java_version # java version (https://www.java.com/) - # package # name@version from package.json (https://docs.npmjs.com/files/package.json) - rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) - rvm # ruby version from rvm (https://rvm.io) - fvm # flutter version management (https://github.com/leoafarias/fvm) - luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) - jenv # java version from jenv (https://github.com/jenv/jenv) - plenv # perl version from plenv (https://github.com/tokuhirom/plenv) - perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) - phpenv # php version from phpenv (https://github.com/phpenv/phpenv) - scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) - haskell_stack # haskell version from stack (https://haskellstack.org/) - kubecontext # current kubernetes context (https://kubernetes.io/) - terraform # terraform workspace (https://www.terraform.io) - # terraform_version # terraform version (https://www.terraform.io) - aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) - aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) - azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) - gcloud # google cloud cli account and project (https://cloud.google.com/) - google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) - toolbox # toolbox name (https://github.com/containers/toolbox) - context # user@hostname - nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) - ranger # ranger shell (https://github.com/ranger/ranger) - nnn # nnn shell (https://github.com/jarun/nnn) - lf # lf shell (https://github.com/gokcehan/lf) - xplr # xplr shell (https://github.com/sayanarijit/xplr) - vim_shell # vim shell indicator (:sh) - midnight_commander # midnight commander shell (https://midnight-commander.org/) - nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) - vi_mode # vi mode (you don't need this if you've enabled prompt_char) - # vpn_ip # virtual private network indicator - load # CPU load - # disk_usage # disk usage - # ram # free RAM - # swap # used swap - todo # todo items (https://github.com/todotxt/todo.txt-cli) - timewarrior # timewarrior tracking status (https://timewarrior.net/) - taskwarrior # taskwarrior task count (https://taskwarrior.org/) - # cpu_arch # CPU architecture - time # current time - # =========================[ Line #2 ]========================= - newline # \n - # ip # ip address and bandwidth usage for a specified network interface - # public_ip # public IP address - # proxy # system-wide http/https/ftp proxy - battery # internal battery - # wifi # wifi speed - # example # example user-defined segment (see prompt_example function below) - ) - - # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. - typeset -g POWERLEVEL9K_MODE=nerdfont-complete - # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid - # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. - typeset -g POWERLEVEL9K_ICON_PADDING=none - - # When set to true, icons appear before content on both sides of the prompt. When set - # to false, icons go after content. If empty or not set, icons go before content in the left - # prompt and after content in the right prompt. - # - # You can also override it for a specific segment: - # - # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false - # - # Or for a specific segment in specific state: - # - # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false - typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= - - # Add an empty line before each prompt. - typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true - - # Connect left prompt lines with these symbols. You'll probably want to use the same color - # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%244F╭─' - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%244F├─' - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%244F╰─' - # Connect right prompt lines with these symbols. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%244F─╮' - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%244F─┤' - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%244F─╯' - - # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or - # '─'. The last two make it easier to see the alignment between left and right prompt and to - # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false - # for more compact prompt if using this option. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR='·' - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= - if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then - # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE - # ornaments defined above. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=244 - # Start filler from the edge of the screen if there are no left segments on the first line. - typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' - # End filler on the edge of the screen if there are no right segments on the first line. - typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' - fi - - # Default background color. - typeset -g POWERLEVEL9K_BACKGROUND=240 - - # Separator between same-color segments on the left. - typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%250F\uE0B1' - # Separator between same-color segments on the right. - typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%250F\uE0B3' - # Separator between different-color segments on the left. - typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' - # Separator between different-color segments on the right. - typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' - # The right end of left prompt. - typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' - # The left end of right prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' - # The left end of left prompt. - typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B6' - # The right end of right prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B4' - # Left prompt terminator for lines without any segments. - typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= - - #################################[ os_icon: os identifier ]################################## - # OS identifier color. - typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=255 - # Custom icon. - # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' - - ################################[ prompt_char: prompt symbol ]################################ - # Transparent background. - typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= - # Green prompt symbol if the last command succeeded. - typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 - # Red prompt symbol if the last command failed. - typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 - # Default prompt symbol. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' - # Prompt symbol in command vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' - # Prompt symbol in visual vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' - # Prompt symbol in overwrite vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' - typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true - # No line terminator if prompt_char is the last segment. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= - # No line introducer if prompt_char is the first segment. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= - # No surrounding whitespace. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= - - ##################################[ dir: current directory ]################################## - # Default current directory color. - typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 - # If directory is too long, shorten some of its segments to the shortest possible unique - # prefix. The shortened directory can be tab-completed to the original. - typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique - # Replace removed segment suffixes with this symbol. - typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= - # Color of the shortened directory segments. - typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103 - # Color of the anchor directory segments. Anchor segments are never shortened. The first - # segment is always an anchor. - typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 - # Display anchor directory segments in bold. - typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true - # Don't shorten directories that contain any of these files. They are anchors. - local anchor_files=( - .bzr - .citc - .git - .hg - .node-version - .python-version - .go-version - .ruby-version - .lua-version - .java-version - .perl-version - .php-version - .tool-version - .shorten_folder_marker - .svn - .terraform - CVS - Cargo.toml - composer.json - go.mod - package.json - stack.yaml - ) - typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" - # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains - # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is - # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) - # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers - # and other directories don't. - # - # Optionally, "first" and "last" can be followed by ":" where is an integer. - # This moves the truncation point to the right (positive offset) or to the left (negative offset) - # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" - # respectively. - typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false - # Don't shorten this many last directory segments. They are anchors. - typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 - # Shorten directory if it's longer than this even if there is space for it. The value can - # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, - # directory will be shortened only when prompt doesn't fit or when other parameters demand it - # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). - # If set to `0`, directory will always be shortened to its minimum length. - typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this - # many columns for typing commands. - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least - # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 - # If set to true, embed a hyperlink into the directory. Useful for quickly - # opening a directory in the file manager simply by clicking the link. - # Can also be handy when the directory is shortened, as it allows you to see - # the full directory that was used in previous commands. - typeset -g POWERLEVEL9K_DIR_HYPERLINK=false - - # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON - # and POWERLEVEL9K_DIR_CLASSES below. - typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 - - # The default icon shown next to non-writable and non-existent directories when - # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. - # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' - - # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different - # directories. It must be an array with 3 * N elements. Each triplet consists of: - # - # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with - # extended_glob option enabled. - # 2. Directory class for the purpose of styling. - # 3. An empty string. - # - # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. - # - # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories - # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_DIR_CLASSES=( - # '~/work(|/*)' WORK '' - # '~(|/*)' HOME '' - # '*' DEFAULT '') - # - # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one - # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or - # WORK_NON_EXISTENT. - # - # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an - # option to define custom colors and icons for different directory classes. - # - # # Styling for WORK. - # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 - # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 - # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 - # - # # Styling for WORK_NOT_WRITABLE. - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39 - # - # # Styling for WORK_NON_EXISTENT. - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39 - # - # If a styling parameter isn't explicitly defined for some class, it falls back to the classless - # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls - # back to POWERLEVEL9K_DIR_FOREGROUND. - # - # typeset -g POWERLEVEL9K_DIR_CLASSES=() - - # Custom prefix. - # typeset -g POWERLEVEL9K_DIR_PREFIX='%250Fin ' - - #####################################[ vcs: git status ]###################################### - # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. - typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 ' - - # Untracked files icon. It's really a question mark, your font isn't broken. - # Change the value of this parameter to show a different icon. - typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' - - # Formatter for Git status. - # - # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. - # - # You can edit the function to customize how Git status looks. - # - # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: - # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. - function my_git_formatter() { - emulate -L zsh - - if [[ -n $P9K_CONTENT ]]; then - # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from - # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. - typeset -g my_git_format=$P9K_CONTENT - return - fi - - if (( $1 )); then - # Styling for up-to-date Git status. - local meta='%250F' # grey foreground - local clean='%76F' # green foreground - local modified='%178F' # yellow foreground - local untracked='%39F' # blue foreground - local conflicted='%196F' # red foreground - else - # Styling for incomplete and stale Git status. - local meta='%244F' # grey foreground - local clean='%244F' # grey foreground - local modified='%244F' # grey foreground - local untracked='%244F' # grey foreground - local conflicted='%244F' # grey foreground - fi - - local res - - if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then - local branch=${(V)VCS_STATUS_LOCAL_BRANCH} - # If local branch name is at most 32 characters long, show it in full. - # Otherwise show the first 12 … the last 12. - # Tip: To always show local branch name in full without truncation, delete the next line. - (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line - res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" - fi - - if [[ -n $VCS_STATUS_TAG - # Show tag only if not on a branch. - # Tip: To always show tag, delete the next line. - && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line - ]]; then - local tag=${(V)VCS_STATUS_TAG} - # If tag name is at most 32 characters long, show it in full. - # Otherwise show the first 12 … the last 12. - # Tip: To always show tag name in full without truncation, delete the next line. - (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line - res+="${meta}#${clean}${tag//\%/%%}" - fi - - # Display the current Git commit if there is no branch and no tag. - # Tip: To always display the current Git commit, delete the next line. - [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line - res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" - - # Show tracking branch name if it differs from local branch. - if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then - res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" - fi - - # Display "wip" if the latest commit's summary contains "wip" or "WIP". - if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then - res+=" ${modified}wip" - fi - - # ⇣42 if behind the remote. - (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" - # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. - (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " - (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" - # ⇠42 if behind the push remote. - (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" - (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " - # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. - (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" - # *42 if have stashes. - (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" - # 'merge' if the repo is in an unusual state. - [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" - # ~42 if have merge conflicts. - (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" - # +42 if have staged changes. - (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" - # !42 if have unstaged changes. - (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" - # ?42 if have untracked files. It's really a question mark, your font isn't broken. - # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. - # Remove the next line if you don't want to see untracked files at all. - (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" - # "─" if the number of unstaged files is unknown. This can happen due to - # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower - # than the number of files in the Git index, or due to bash.showDirtyState being set to false - # in the repository config. The number of staged and untracked files may also be unknown - # in this case. - (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" - - typeset -g my_git_format=$res - } - functions -M my_git_formatter 2>/dev/null - - # Don't count the number of unstaged, untracked and conflicted files in Git repositories with - # more than this many files in the index. Negative value means infinity. - # - # If you are working in Git repositories with tens of millions of files and seeing performance - # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output - # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's - # config: `git config bash.showDirtyState false`. - typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 - - # Don't show Git status in prompt for repositories whose workdir matches this pattern. - # For example, if set to '~', the Git repository at $HOME/.git will be ignored. - # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. - typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' - - # Disable the default Git status formatting. - typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true - # Install our own Git status formatter. - typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' - typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' - # Enable counters for staged, unstaged, etc. - typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 - - # Icon color. - typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 - typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 - # Custom icon. - # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - typeset -g POWERLEVEL9K_VCS_PREFIX='%250Fon ' - - # Show status of repositories of these types. You can add svn and/or hg if you are - # using them. If you do, your prompt may become slow even when your current directory - # isn't in an svn or hg reposotiry. - typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) - - # These settings are used for repositories other than Git or when gitstatusd fails and - # Powerlevel10k has to fall back to using vcs_info. - typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 - typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 - typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 - - ##########################[ status: exit code of the last command ]########################### - # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and - # style them independently from the regular OK and ERROR state. - typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true - - # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as - # it will signify success by turning green. - typeset -g POWERLEVEL9K_STATUS_OK=true - typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 - typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' - - # Status when some part of a pipe command fails but the overall exit status is zero. It may look - # like this: 1|0. - typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' - - # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as - # it will signify error by turning red. - typeset -g POWERLEVEL9K_STATUS_ERROR=true - typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 - typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' - - # Status when the last command was terminated by a signal. - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 - # Use terse signal names: "INT" instead of "SIGINT(2)". - typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' - - # Status when some part of a pipe command fails and the overall exit status is also non-zero. - # It may look like this: 1|0. - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' - - ###################[ command_execution_time: duration of the last command ]################### - # Show duration of the last command if takes at least this many seconds. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 - # Show this many fractional digits. Zero means round to seconds. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 - # Execution time color. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=248 - # Duration format: 1d 2h 3m 4s. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' - # Custom icon. - # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%250Ftook ' - - #######################[ background_jobs: presence of background jobs ]####################### - # Don't show the number of background jobs. - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false - # Background jobs color. - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=37 - # Custom icon. - # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ direnv: direnv status (https://direnv.net/) ]######################## - # Direnv color. - typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 - # Custom icon. - # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### - # Default asdf color. Only used to display tools for which there is no color override (see below). - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. - typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66 - - # There are four parameters that can be used to hide asdf tools. Each parameter describes - # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at - # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to - # hide a tool, it gets shown. - # - # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and - # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: - # - # asdf local python 3.8.1 - # asdf global python 3.8.1 - # - # After running both commands the current python version is 3.8.1 and its source is "local" as - # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, - # it'll hide python version in this case because 3.8.1 is the same as the global version. - # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't - # contain "local". - - # Hide tool versions that don't come from one of these sources. - # - # Available sources: - # - # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" - # - local `asdf current` says "set by /some/not/home/directory/file" - # - global `asdf current` says "set by /home/username/file" - # - # Note: If this parameter is set to (shell local global), it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. - typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) - - # If set to false, hide tool versions that are the same as global. - # - # Note: The name of this parameter doesn't reflect its meaning at all. - # Note: If this parameter is set to true, it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. - typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false - - # If set to false, hide tool versions that are equal to "system". - # - # Note: If this parameter is set to true, it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. - typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true - - # If set to non-empty value, hide tools unless there is a file matching the specified file pattern - # in the current directory, or its parent directory, or its grandparent directory, and so on. - # - # Note: If this parameter is set to empty value, it won't hide tools. - # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. - # - # Example: Hide nodejs version when there is no package.json and no *.js files in the current - # directory, in `..`, in `../..` and so on. - # - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' - typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= - - # Ruby version from asdf. - typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168 - # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Python version from asdf. - typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37 - # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Go version from asdf. - typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37 - # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Node.js version from asdf. - typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70 - # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Rust version from asdf. - typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37 - # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' - - # .NET Core version from asdf. - typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134 - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Flutter version from asdf. - typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38 - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Lua version from asdf. - typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32 - # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Java version from asdf. - typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32 - # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Perl version from asdf. - typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67 - # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Erlang version from asdf. - typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125 - # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Elixir version from asdf. - typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129 - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Postgres version from asdf. - typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31 - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' - - # PHP version from asdf. - typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99 - # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Haskell version from asdf. - typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172 - # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Julia version from asdf. - typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70 - # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' - - ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### - # NordVPN connection indicator color. - typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 - # Hide NordVPN connection indicator when not connected. - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= - # Custom icon. - # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## - # Ranger shell color. - typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 - # Custom icon. - # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### - # Nnn shell color. - typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 - # Custom icon. - # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### - # lf shell color. - typeset -g POWERLEVEL9K_LF_FOREGROUND=72 - # Custom icon. - # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## - # xplr shell color. - typeset -g POWERLEVEL9K_XPLR_FOREGROUND=72 - # Custom icon. - # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########################[ vim_shell: vim shell indicator (:sh) ]########################### - # Vim shell indicator color. - typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 - # Custom icon. - # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### - # Midnight Commander shell color. - typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 - # Custom icon. - # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## - # Nix shell color. - typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 - - # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. - # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################################[ disk_usage: disk usage ]################################## - # Colors for different levels of disk usage. - typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 - # Thresholds for different levels of disk usage (percentage points). - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 - # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. - typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false - # Custom icon. - # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### - # Text and color for normal (a.k.a. command) vi mode. - typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL - typeset -g POWERLEVEL9K_VI_MODE_NORMAL_FOREGROUND=106 - # Text and color for visual vi mode. - typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL - typeset -g POWERLEVEL9K_VI_MODE_VISUAL_FOREGROUND=68 - # Text and color for overtype (a.k.a. overwrite and replace) vi mode. - typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE - typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_FOREGROUND=172 - # Text and color for insert vi mode. - typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= - typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=66 - - # Custom icon. - # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################################[ ram: free RAM ]####################################### - # RAM color. - typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 - # Custom icon. - # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################################[ swap: used swap ]###################################### - # Swap color. - typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 - # Custom icon. - # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################################[ load: CPU load ]###################################### - # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. - typeset -g POWERLEVEL9K_LOAD_WHICH=5 - # Load color when load is under 50%. - typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 - # Load color when load is between 50% and 70%. - typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 - # Load color when load is over 70%. - typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 - # Custom icon. - # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ - # Todo color. - typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 - # Hide todo when the total number of tasks is zero. - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true - # Hide todo when the number of tasks after filtering is zero. - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false - - # Todo format. The following parameters are available within the expansion. - # - # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. - # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. - # - # These variables correspond to the last line of the output of `todo.sh -p ls`: - # - # TODO: 24 of 42 tasks shown - # - # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. - # - # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' - - # Custom icon. - # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ - # Timewarrior color. - typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 - # If the tracked task is longer than 24 characters, truncate and append "…". - # Tip: To always display tasks without truncation, delete the following parameter. - # Tip: To hide task names and display just the icon when time tracking is enabled, set the - # value of the following parameter to "". - typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' - - # Custom icon. - # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## - # Taskwarrior color. - typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74 - - # Taskwarrior segment format. The following parameters are available within the expansion. - # - # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. - # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. - # - # Zero values are represented as empty parameters. - # - # The default format: - # - # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' - # - # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' - - # Custom icon. - # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################################[ cpu_arch: CPU architecture ]################################ - # CPU architecture color. - typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=172 - - # Hide the segment when on a specific CPU architecture. - # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= - # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################################[ context: user@hostname ]################################## - # Context color when running with privileges. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 - # Context color in SSH without privileges. - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 - # Default context color (no privileges, no SSH). - typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 - - # Context format when running with privileges: bold user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' - # Context format when in SSH without privileges: user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' - # Default context format (no privileges, no SSH): user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' - - # Don't show context unless running with privileges or in SSH. - # Tip: Remove the next line to always show context. - typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%250Fwith ' - - ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### - # Python virtual environment color. - typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 - # Don't show Python version next to the virtual environment name. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false - # If set to "false", won't show virtualenv if pyenv is already shown. - # If set to "if-different", won't show virtualenv if it's the same as pyenv. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false - # Separate environment name from Python version only with a space. - typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= - # Custom icon. - # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################[ anaconda: conda environment (https://conda.io/) ]###################### - # Anaconda environment color. - typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 - - # Anaconda segment format. The following parameters are available within the expansion. - # - # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. - # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. - # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). - # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). - # - # CONDA_PROMPT_MODIFIER can be configured with the following command: - # - # conda config --set env_prompt '({default_env}) ' - # - # The last argument is a Python format string that can use the following variables: - # - # - prefix The same as CONDA_PREFIX. - # - default_env The same as CONDA_DEFAULT_ENV. - # - name The last segment of CONDA_PREFIX. - # - stacked_env Comma-separated list of names in the environment stack. The first element is - # always the same as default_env. - # - # Note: '({default_env}) ' is the default value of env_prompt. - # - # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER - # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former - # is empty. - typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' - - # Custom icon. - # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ - # Pyenv color. - typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 - # Hide python version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) - # If set to false, hide python version if it's the same as global: - # $(pyenv version-name) == $(pyenv global). - typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide python version if it's equal to "system". - typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true - - # Pyenv segment format. The following parameters are available within the expansion. - # - # - P9K_CONTENT Current pyenv environment (pyenv version-name). - # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). - # - # The default format has the following logic: - # - # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or - # starts with "$P9K_PYENV_PYTHON_VERSION/". - # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". - typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' - - # Custom icon. - # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ - # Goenv color. - typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 - # Hide go version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) - # If set to false, hide go version if it's the same as global: - # $(goenv version-name) == $(goenv global). - typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide go version if it's equal to "system". - typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## - # Nodenv color. - typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 - # Hide node version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) - # If set to false, hide node version if it's the same as global: - # $(nodenv version-name) == $(nodenv global). - typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide node version if it's equal to "system". - typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### - # Nvm color. - typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 - # Custom icon. - # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ - # Nodeenv color. - typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 - # Don't show Node version next to the environment name. - typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false - # Separate environment name from Node version only with a space. - typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= - # Custom icon. - # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############################[ node_version: node.js version ]############################### - # Node version color. - typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 - # Show node version only when in a directory tree containing package.json. - typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ go_version: go version (https://golang.org) ]######################## - # Go version color. - typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 - # Show go version only when in a go project subdirectory. - typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## - # Rust version color. - typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 - # Show rust version only when in a rust project subdirectory. - typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ - # .NET version color. - typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 - # Show .NET version only when in a .NET project subdirectory. - typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################[ php_version: php version (https://www.php.net/) ]###################### - # PHP version color. - typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99 - # Show PHP version only when in a PHP project subdirectory. - typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### - # Laravel version color. - typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161 - # Custom icon. - # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ####################[ java_version: java version (https://www.java.com/) ]#################### - # Java version color. - typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32 - # Show java version only when in a java project subdirectory. - typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true - # Show brief version. - typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false - # Custom icon. - # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### - # Package color. - typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117 - # Package format. The following parameters are available within the expansion. - # - # - P9K_PACKAGE_NAME The value of `name` field in package.json. - # - P9K_PACKAGE_VERSION The value of `version` field in package.json. - # - # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' - # Custom icon. - # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## - # Rbenv color. - typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 - # Hide ruby version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) - # If set to false, hide ruby version if it's the same as global: - # $(rbenv version-name) == $(rbenv global). - typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide ruby version if it's equal to "system". - typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## - # Rvm color. - typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 - # Don't show @gemset at the end. - typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false - # Don't show ruby- at the front. - typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false - # Custom icon. - # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ - # Fvm color. - typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 - # Custom icon. - # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### - # Lua color. - typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 - # Hide lua version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) - # If set to false, hide lua version if it's the same as global: - # $(luaenv version-name) == $(luaenv global). - typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide lua version if it's equal to "system". - typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ - # Java color. - typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 - # Hide java version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) - # If set to false, hide java version if it's the same as global: - # $(jenv version-name) == $(jenv global). - typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide java version if it's equal to "system". - typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ - # Perl color. - typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 - # Hide perl version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) - # If set to false, hide perl version if it's the same as global: - # $(plenv version-name) == $(plenv global). - typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide perl version if it's equal to "system". - typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ - # Perlbrew color. - typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 - # Show perlbrew version only when in a perl project subdirectory. - typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true - # Don't show "perl-" at the front. - typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false - # Custom icon. - # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ - # PHP color. - typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99 - # Hide php version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) - # If set to false, hide php version if it's the same as global: - # $(phpenv version-name) == $(phpenv global). - typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide php version if it's equal to "system". - typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### - # Scala color. - typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160 - # Hide scala version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) - # If set to false, hide scala version if it's the same as global: - # $(scalaenv version-name) == $(scalaenv global). - typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide scala version if it's equal to "system". - typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### - # Haskell color. - typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172 - # Hide haskell version if it doesn't come from one of these sources. - # - # shell: version is set by STACK_YAML - # local: version is set by stack.yaml up the directory tree - # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) - typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) - # If set to false, hide haskell version if it's the same as in the implicit global project. - typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true - # Custom icon. - # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ terraform: terraform workspace (https://www.terraform.io) ]################# - # Don't show terraform workspace if it's literally "default". - typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false - # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current terraform workspace gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' OTHER) - # - # If your current terraform workspace is "project_test", its class is TEST because "project_test" - # doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' OTHER) - typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38 - # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ terraform_version: terraform version (https://www.terraform.io) ]############## - # Terraform version color. - typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=38 - # Custom icon. - # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# - # Show kubecontext only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show kubecontext. - typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent' - - # Kubernetes context classes for the purpose of using different colors, icons and expansions with - # different contexts. - # - # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current kubernetes context gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' DEFAULT) - # - # If your current kubernetes context is "deathray-testing/default", its class is TEST - # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 - # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext - # segment. Parameter expansions are very flexible and fast, too. See reference: - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. - # - # Within the expansion the following parameters are always available: - # - # - P9K_CONTENT The content that would've been displayed if there was no content - # expansion defined. - # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the - # output of `kubectl config get-contexts`. - # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the - # output of `kubectl config get-contexts`. - # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE - # in the output of `kubectl config get-contexts`. If there is no - # namespace, the parameter is set to "default". - # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the - # output of `kubectl config get-contexts`. - # - # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), - # the following extra parameters are available: - # - # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. - # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. - # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. - # - # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, - # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": - # - # - P9K_KUBECONTEXT_CLOUD_NAME=gke - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 - # - # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": - # - # - P9K_KUBECONTEXT_CLOUD_NAME=eks - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= - # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' - # Append the current context's namespace if it's not "default". - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' - - # Custom prefix. - typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%250Fat ' - - #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# - # Show aws only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show aws. - typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' - - # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current AWS profile gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_AWS_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' DEFAULT) - # - # If your current AWS profile is "company_test", its class is TEST - # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_AWS_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 - # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # AWS segment format. The following parameters are available within the expansion. - # - # - P9K_AWS_PROFILE The name of the current AWS profile. - # - P9K_AWS_REGION The region associated with the current AWS profile. - typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' - - #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# - # AWS Elastic Beanstalk environment color. - typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 - # Custom icon. - # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## - # Show azure only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show azure. - typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' - # Azure account name color. - typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32 - # Custom icon. - # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### - # Show gcloud only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show gcloud. - typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' - # Google cloud color. - typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 - - # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or - # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative - # enough. You can use the following parameters in the expansions. Each of them corresponds to the - # output of `gcloud` tool. - # - # Parameter | Source - # -------------------------|-------------------------------------------------------------------- - # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' - # P9K_GCLOUD_ACCOUNT | gcloud config get-value account - # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project - # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' - # - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. - # - # Obtaining project name requires sending a request to Google servers. This can take a long time - # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud - # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets - # set and gcloud prompt segment transitions to state COMPLETE. - # - # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL - # and COMPLETE. You can also hide gcloud in state PARTIAL by setting - # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and - # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. - typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' - typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' - - # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name - # this often. Negative value disables periodic polling. In this mode project name is retrieved - # only when the current configuration, account or project id changes. - typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 - - # Custom icon. - # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# - # Show google_app_cred only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show google_app_cred. - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' - - # Google application credentials classes for the purpose of using different colors, icons and - # expansions with different credentials. - # - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first - # element in each pair defines a pattern against which the current kubernetes context gets - # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion - # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION - # parameters, you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. - # The first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( - # '*:*prod*:*' PROD - # '*:*test*:*' TEST - # '*' DEFAULT) - # - # If your current Google application credentials is "service_account deathray-testing x@y.com", - # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( - # '*:*prod*:*' PROD # These values are examples that are unlikely - # '*:*test*:*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by - # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. - # - # You can use the following parameters in the expansion. Each of them corresponds to one of the - # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. - # - # Parameter | JSON key file field - # ---------------------------------+--------------- - # P9K_GOOGLE_APP_CRED_TYPE | type - # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id - # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email - # - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' - - ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### - # Toolbox color. - typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=178 - # Don't display the name of the toolbox if it matches fedora-toolbox-*. - typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' - # Custom icon. - # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%250Fin ' - - ###############################[ public_ip: public IP address ]############################### - # Public IP color. - typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 - # Custom icon. - # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ########################[ vpn_ip: virtual private network indicator ]######################### - # VPN IP color. - typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 - # When on VPN, show just an icon without the IP address. - # Tip: To display the private IP address when on VPN, remove the next line. - typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= - # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN - # to see the name of the interface. - typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*' - # If set to true, show one segment per matching network interface. If set to false, show only - # one segment corresponding to the first matching network interface. - # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. - typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false - # Custom icon. - # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### - # IP color. - typeset -g POWERLEVEL9K_IP_FOREGROUND=38 - # The following parameters are accessible within the expansion: - # - # Parameter | Meaning - # ----------------------+------------------------------------------- - # P9K_IP_IP | IP address - # P9K_IP_INTERFACE | network interface - # P9K_IP_RX_BYTES | total number of bytes received - # P9K_IP_TX_BYTES | total number of bytes sent - # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt - # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt - # P9K_IP_RX_RATE | receive rate (since last prompt) - # P9K_IP_TX_RATE | send rate (since last prompt) - typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+%70F⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+%215F⇡$P9K_IP_TX_RATE }%38F$P9K_IP_IP' - # Show information for the first network interface whose name matches this regular expression. - # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. - typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' - # Custom icon. - # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #########################[ proxy: system-wide http/https/ftp proxy ]########################## - # Proxy color. - typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 - # Custom icon. - # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################################[ battery: internal battery ]################################# - # Show battery in red when it's below this level and not connected to power supply. - typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 - typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 - # Show battery in green when it's charging or fully charged. - typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 - # Show battery in yellow when it's discharging. - typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 - # Battery pictograms going from low to high level of charge. - typeset -g POWERLEVEL9K_BATTERY_STAGES='\uf58d\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf578' - # Don't show the remaining time to charge/discharge. - typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false - - #####################################[ wifi: wifi speed ]##################################### - # WiFi color. - typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68 - # Custom icon. - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). - # - # # Wifi colors and icons for different signal strength levels (low to high). - # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values - # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values - # - # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' - # - # The following parameters are accessible within the expansions: - # - # Parameter | Meaning - # ----------------------+--------------- - # P9K_WIFI_SSID | service set identifier, a.k.a. network name - # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown - # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second - # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 - # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 - # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) - - ####################################[ time: current time ]#################################### - # Current time color. - typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 - # Format for the current time: 09:51:02. See `man 3 strftime`. - typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' - # If set to true, time will update when you hit enter. This way prompts for the past - # commands will contain the start times of their commands as opposed to the default - # behavior where they contain the end times of their preceding commands. - typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false - # Custom icon. - # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - typeset -g POWERLEVEL9K_TIME_PREFIX='%250Fat ' - - # Example of a user-defined prompt segment. Function prompt_example will be called on every - # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or - # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. - # - # Type `p10k help segment` for documentation and a more sophisticated example. - function prompt_example() { - p10k segment -f 208 -i '⭐' -t 'hello, %n' - } - - # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job - # is to generate the prompt segment for display in instant prompt. See - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function - # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k - # will replay these calls without actually calling instant_prompt_*. It is imperative that - # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this - # rule is not observed, the content of instant prompt will be incorrect. - # - # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If - # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. - function instant_prompt_example() { - # Since prompt_example always makes the same `p10k segment` calls, we can call it from - # instant_prompt_example. This will give us the same `example` prompt segment in the instant - # and regular prompts. - prompt_example - } - - # User-defined prompt segments can be customized the same way as built-in segments. - # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 - # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt - # when accepting a command line. Supported values: - # - # - off: Don't change prompt when accepting a command line. - # - always: Trim down prompt when accepting a command line. - # - same-dir: Trim down prompt when accepting a command line unless this is the first command - # typed after changing current working directory. - typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always - - # Instant prompt mode. - # - # - off: Disable instant prompt. Choose this if you've tried instant prompt and found - # it incompatible with your zsh configuration files. - # - quiet: Enable instant prompt and don't print warnings when detecting console output - # during zsh initialization. Choose this if you've read and understood - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - verbose: Enable instant prompt and print a warning when detecting console output during - # zsh initialization. Choose this if you've never tried instant prompt, haven't - # seen the warning, or if you are unsure what this all means. - typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose - - # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. - # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload - # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you - # really need it. - typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true - - # If p10k is already loaded, reload configuration. - # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. - (( ! $+functions[p10k] )) || p10k reload -} - -# Tell `p10k configure` which file it should overwrite. -typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} - -(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} -'builtin' 'unset' 'p10k_config_opts' diff --git a/config/home-manager/base.nix b/config/home-manager/base.nix deleted file mode 100644 index fd9035a9..00000000 --- a/config/home-manager/base.nix +++ /dev/null @@ -1,120 +0,0 @@ -desktop: { - pkgs, - system, - lib, - config, - ... -}: { - imports = - [ - (import ../programs/zsh.nix desktop) - ../programs/tmux.nix - (import ../programs/vim desktop) - ] - ++ ( - if desktop - then [ - ../programs/mail.nix - ../programs/taskwarrior.nix - ] - else [] - ); - programs = { - zsh = { - enable = true; - oh-my-zsh = { - enable = true; - }; - initExtraBeforeCompInit = "source ${pkgs.zsh-powerlevel10k}/share/zsh-powerlevel10k/powerlevel10k.zsh-theme"; - - initExtra = - if system != "riscv64-linux" - then '' - [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh - - test -n "$KITTY_INSTALLATION_DIR" || export KITTY_INSTALLATION_DIR=${pkgs.kitty}/lib/kitty - export KITTY_SHELL_INTEGRATION=enabled - autoload -Uz -- "$KITTY_INSTALLATION_DIR"/shell-integration/zsh/kitty-integration - kitty-integration - unfunction kitty-integration - '' - else ""; - - plugins = [ - ]; - }; - autojump.enable = true; - jq.enable = true; - ledger.enable = true; - }; - home.file.".p10k.zsh".source = ./.p10k.zsh; - - home = { - shellAliases = - { - cat = "bat"; - less = "bat"; - } - // ( - if system != "riscv64-linux" - then { - icat = "${pkgs.kitty}/bin/kitty +kitten icat"; - d = "${pkgs.kitty}/bin/kitty +kitten diff"; - hg = "${pkgs.kitty}/bin/kitty +kitten hyperlinked_grep"; - #ssh = "${pkgs.kitty}/bin/kitty +kitten ssh"; - cargo = "${pkgs.cargo-mommy}/bin/cargo-mommy"; - } - else {} - ); - packages = with pkgs; - [ - mosh - ripgrep - gh - htop - sops - progress - hexyl - mc - rclone - libarchive - p7zip - unrar - ] - ++ ( - if desktop - then [ - yubikey-manager - yt-dlp - oxipng - jpegoptim - #picard - easytag - alejandra - yubico-piv-tool - ] - else [] - ); - sessionVariables = if desktop then { - QT_PLUGIN_PATH = lib.mkForce "\${QT_PLUGIN_PATH}:${config.i18n.inputMethod.package}/${pkgs.qt6.qtbase.qtPluginPrefix}:${pkgs.kdePackages.kimageformats}/${pkgs.qt6.qtbase.qtPluginPrefix}"; - } else {}; - }; - - programs.eza = { - enable = true; - enableZshIntegration = true; - }; - - programs.bat = { - enable = true; - }; - - programs.fzf = { - enable = true; - tmux.enableShellIntegration = true; - }; - home.stateVersion = "22.05"; - manual.manpages.enable = false; # broken - - _module.args.withNSFW = false; -} diff --git a/config/home-manager/darkkirb.nix b/config/home-manager/darkkirb.nix deleted file mode 100644 index f8cb5f2d..00000000 --- a/config/home-manager/darkkirb.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ - desktop, - args, -}: {pkgs, ...}: { - imports = - [ - (import ./base.nix desktop) - ../programs/ssh.nix - (import ../programs/git.nix desktop) - ../programs/direnv.nix - ] - ++ ( - if desktop - then [ - #../programs/sway.nix - ../programs/firefox.nix - ../programs/waybar.nix - ../programs/ims.nix - ../programs/syncthing.nix - ../programs/plover.nix - (import ../games/default.nix args) - ../programs/yubikey.nix - ../programs/keybase.nix - ../programs/keepass.nix - ../programs/vscode - ../programs/misc.nix - ../programs/zk.nix - ../programs/fcitx.nix - ../programs/gpg.nix - ../programs/zoom.nix - ] - else [] - ); -} diff --git a/config/home-manager/miifox.nix b/config/home-manager/miifox.nix deleted file mode 100644 index 49b6773f..00000000 --- a/config/home-manager/miifox.nix +++ /dev/null @@ -1,5 +0,0 @@ -{pkgs, ...}: { - imports = [ - (import ./base.nix false) - ]; -} diff --git a/config/home-manager/root.nix b/config/home-manager/root.nix deleted file mode 100644 index 1957fd33..00000000 --- a/config/home-manager/root.nix +++ /dev/null @@ -1,6 +0,0 @@ -{pkgs, ...}: { - imports = [ - (import ./base.nix false) - ../programs/builders.nix - ]; -} diff --git a/config/home.nix b/config/home.nix deleted file mode 100644 index 93838435..00000000 --- a/config/home.nix +++ /dev/null @@ -1,5 +0,0 @@ -_: { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.root = import ./home-manager/root.nix; -} diff --git a/config/i18n.nix b/config/i18n.nix new file mode 100644 index 00000000..b59c4252 --- /dev/null +++ b/config/i18n.nix @@ -0,0 +1,17 @@ +{ ... }: +{ + console.keyMap = "neo"; + i18n.extraLocaleSettings = { + LC_ADDRESS = "de_DE.UTF-8"; + LC_MONETARY = "de_DE.UTF-8"; + LC_NAME = "de_DE.UTF-8"; + LC_PAPER = "de_DE.UTF-8"; + LC_TELEPHONE = "de_DE.UTF-8"; + LC_TIME = "de_DE.UTF-8"; + }; + i18n.supportedLocales = [ + "C.UTF-8/UTF-8" + "en_US.UTF-8/UTF-8" + "de_DE.UTF-8/UTF-8" + ]; +} diff --git a/config/installer.nix b/config/installer.nix deleted file mode 100644 index e7128163..00000000 --- a/config/installer.nix +++ /dev/null @@ -1,6 +0,0 @@ -{nixpkgs, ...}: { - imports = [ - "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares-plasma6.nix" - ]; - networking.hostId = "8425e349"; -} diff --git a/config/instance-20221213-1915.nix b/config/instance-20221213-1915.nix deleted file mode 100644 index dde1ad53..00000000 --- a/config/instance-20221213-1915.nix +++ /dev/null @@ -1,149 +0,0 @@ -{ - config, - lib, - modulesPath, - ... -} @ args: { - networking.hostName = "instance-20221213-1915"; - networking.hostId = "746d4523"; - - imports = [ - (modulesPath + "/profiles/qemu-guest.nix") - ./systemd-boot.nix - ./server.nix - ./wireguard/public-server.nix - ./services/named-submissive.nix - ./services/shitalloverme.nix - ./users/remote-build.nix - ./services/atticd.nix - ./services/minecraft.nix - ./services/postgres.nix - ./services/uptime-kuma.nix - ./services/reverse-proxy.nix - ./wireguard - ./zfs.nix - #./services/kubernetes.nix - ./services/gitea.nix - ./services/chir-rs.nix - ]; - - boot.initrd.availableKernelModules = ["xhci_pci" "virtio_pci" "usbhid"]; - boot.initrd.kernelModules = []; - boot.kernelModules = []; - boot.extraModulePackages = []; - - fileSystems."/" = { - device = "tank/local/root"; - fsType = "zfs"; - }; - - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/6557-C4A0"; - fsType = "vfat"; - }; - - fileSystems."/nix" = { - device = "tank/local/nix"; - fsType = "zfs"; - }; - - fileSystems."/persist" = { - device = "tank/safe/persist"; - fsType = "zfs"; - neededForBoot = true; - }; - - fileSystems."/home" = { - device = "tank/safe/home"; - fsType = "zfs"; - }; - - networking.useDHCP = lib.mkDefault true; - - # https://grahamc.com/blog/erase-your-darlings - boot.initrd.postDeviceCommands = lib.mkAfter '' - zfs rollback -r tank/local/root@blank - ''; - - services.openssh = { - hostKeys = [ - { - path = "/persist/ssh/ssh_host_ed25519_key"; - type = "ed25519"; - } - { - path = "/persist/ssh/ssh_host_rsa_key"; - type = "rsa"; - bits = 4096; - } - ]; - }; - - systemd.tmpfiles.rules = [ - "L /var/lib/acme - - - - /persist/var/lib/acme" - "L /var/lib/tailscale/tailscaled.state - - - - /persist/var/lib/tailscale/tailscaled.state" - "d /build - - - - -" - "L /var/lib/ipfs - - - - /persist/var/lib/ipfs" - "L /var/lib/uptime-kuma - - - - /persist/var/lib/uptime-kuma" - ]; - - services.postgresql.dataDir = "/persist/var/lib/postgresql/${config.services.postgresql.package.psqlSchema}"; - - networking.wireguard.interfaces."wg0".ips = ["fd0d:a262:1fa6:e621:746d:4523:5c04:1453/64"]; - home-manager.users.darkkirb = import ./home-manager/darkkirb.nix { - desktop = false; - inherit args; - }; - nix.settings.cores = 4; - nix.settings.max-jobs = 4; - nix.settings.system-features = [ - "nixos-test" - "big-parallel" - "benchmark" - "gccarch-armv8-a" - "gccarch-armv8.1-a" - "gccarch-armv8.2-a" - "ca-derivations" - ]; - nix.daemonCPUSchedPolicy = "idle"; - nix.daemonIOSchedClass = "idle"; - boot.binfmt.emulatedSystems = [ - "riscv32-linux" - "riscv64-linux" - ]; - - system.stateVersion = "22.11"; - - sops.secrets."root/.ssh/id_ed25519" = { - owner = "root"; - path = "/root/.ssh/id_ed25519"; - }; - sops.secrets."services/ssh/host-key" = { - owner = "root"; - path = "/etc/secrets/initrd/ssh_host_ed25519_key"; - }; - sops.age.sshKeyPaths = lib.mkForce ["/persist/ssh/ssh_host_ed25519_key"]; - services.bind.forwarders = lib.mkForce []; - boot.loader.systemd-boot.configurationLimit = lib.mkForce 1; - services.tailscale.useRoutingFeatures = "server"; - services.postgresql.settings = { - max_connections = 200; - shared_buffers = "6GB"; - effective_cache_size = "18GB"; - maintenance_work_mem = "1536MB"; - checkpoint_completion_target = 0.9; - wal_buffers = "16MB"; - default_statistics_target = 100; - random_page_cost = 1.1; - effective_io_concurrency = 200; - work_mem = "15728kB"; - min_wal_size = "1GB"; - max_wal_size = "4GB"; - max_worker_processes = 4; - max_parallel_workers_per_gather = 2; - max_parallel_workers = 4; - max_parallel_maintenance_workers = 2; - }; - - services.restic.backups.sysbackup.paths = ["/persist"]; -} diff --git a/config/kde.nix b/config/kde.nix deleted file mode 100644 index 4a465e42..00000000 --- a/config/kde.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - security.pam.services.sddm.u2fAuth = true; - services.displayManager.sddm = { - enable = true; - wayland.enable = true; - wayland.compositor = "kwin"; - }; - services.xserver = { - desktopManager.plasma6.enable = true; - #desktopManager.plasma5.enable = true; - displayManager.defaultSession = "plasma"; - #displayManager.defaultSession = "plasmawayland"; - }; -} diff --git a/config/kde/default.nix b/config/kde/default.nix new file mode 100644 index 00000000..c4c28443 --- /dev/null +++ b/config/kde/default.nix @@ -0,0 +1,22 @@ +{ config, ... }: +{ + services.xserver.enable = !config.isSway; + services.displayManager.sddm = { + enable = !config.isSway; + wayland.enable = true; + wayland.compositor = "kwin"; + }; + services.desktopManager.plasma6.enable = !config.isSway; + + imports = [ + ./i18n.nix + ]; + + home-manager.users.darkkirb.imports = + if !config.isSway then + [ + ./home-manager.nix + ] + else + [ ]; +} diff --git a/config/kde/home-manager.nix b/config/kde/home-manager.nix new file mode 100644 index 00000000..93320b56 --- /dev/null +++ b/config/kde/home-manager.nix @@ -0,0 +1,16 @@ +{ plasma-manager, ... }: +{ + programs.plasma.enable = true; + programs.plasma.configFile.baloofilerc."Basic Settings"."Indexing-Enabled" = false; + programs.plasma.configFile.kwalletrc."org.freedesktop.secrets".apiEnabled = false; + imports = [ + plasma-manager.homeManagerModules.plasma-manager + ./theming.nix + ./krdp.nix + ./konsole.nix + ]; + programs.plasma.kwin.virtualDesktops = { + rows = 3; + number = 9; + }; +} diff --git a/config/kde/i18n.nix b/config/kde/i18n.nix new file mode 100644 index 00000000..8d7c73fc --- /dev/null +++ b/config/kde/i18n.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + services.libinput.enable = true; + services.xserver.xkb = { + layout = "de"; + variant = "neo"; + }; +} diff --git a/config/kde/konsole.nix b/config/kde/konsole.nix new file mode 100644 index 00000000..5b702816 --- /dev/null +++ b/config/kde/konsole.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + programs.konsole = { + enable = true; + defaultProfile = "Stylix"; + profiles.Stylix.colorScheme = "Stylix"; + }; +} diff --git a/config/kde/krdp.nix b/config/kde/krdp.nix new file mode 100644 index 00000000..dcc8ef64 --- /dev/null +++ b/config/kde/krdp.nix @@ -0,0 +1,11 @@ +{ config, ... }: +{ + programs.plasma.configFile.krdpserverrc.General = { + Autostart = true; + Certificate = config.sops.secrets.".local/share/krdpserver/krdp.crt".path; + CertificateKey = config.sops.secrets.".local/share/krdpserver/krdp.key".path; + Users = "darkkirb"; + }; + sops.secrets.".local/share/krdpserver/krdp.key".sopsFile = ./krdp.yaml; + sops.secrets.".local/share/krdpserver/krdp.crt".sopsFile = ./krdp.yaml; +} diff --git a/config/kde/krdp.yaml b/config/kde/krdp.yaml new file mode 100644 index 00000000..755fb8e8 --- /dev/null +++ b/config/kde/krdp.yaml @@ -0,0 +1,34 @@ +.local: + share: + krdpserver: + krdp.key: ENC[AES256_GCM,data:U5QhG2Ac5Dym8E0BToa+MNWUm6AHrqoxAu7RZjIWH5NjeK+Mt6fwuim1vTt55GZL7dkXehUc58NIUc7RgAIdY49+1akdOCzKWCtkGXW2jBS5p6bQt//9UlYS+P7olS9Mc6UWZ+2cSJw6Kz0rcLppuX3gjDcn6s3mOq7/RwYFdoFgjO24CLAVe6UUhRRIhgRCUe/fYzXR1KfuNPGe5SVtgfASKOdI06V9yeYo5gWqVaYa53rm6TALNgxzUCqynKxylO8o9qShlJJ4jexzy611rBAyOt4200BQV+cbmEUC+3RSLZpMDwYXo++mg0BMWvtk0uKGD6fhHV9zOajUeWLoSpKDj9z6EQv9mxrRMjJVRd9xXYzn8NQymIJi4jFN+C5RIV540rCs9nOx/eyVG0rpv4eBsZ5Q6jAWNp2vLHIMqw1+4K/AMSaF2o+b/c6p/DHLFcuOlRsTMdAO8FqHJ5d9g7fRe48ePpFagMXa7JwEAeVOOdbEGZpWl9D3DLKskCQos/rfGEKsFjOCA2MJ229RwZ0FVA3zbOSYXFxnqB7AiSGlasSY2CZ27U9X4KnSzgYXC9KAUR5I5S1cbr87as7zmh5lhWA9wsQuMnRRvn3iunPMEv6mYQZ7Rh0Z1Q4MrsEQ+F4Y6+4LjqGXOY3TdwpInu0vawZEI1S+bnLtzLQuCXLPc5t07zuqU7I/zJ0uRwMnPC7lRLOX55NHZHtEiafbRVw7vNltsH2QyWOafEPPLhp/ZvhH33C2kgZ56b6yJbhBVRDBYdb1ViLYv5JLhcn59G+y7wiCHThd0wllMs6g9rCCcAgSqdQzFhLoLxje2roDKHd0xeaTivgHxjaVEKLmfXCVqwzjoeAKALcv8baBxBBQn9//EKRnfw7D478DfWUIIp6ox7Pmc2kYvl3GQZ/Zj5NvN45hK4wGtV7k7JGYxig4YmePt8dGkMkcM14elOlW8fy5N+jmPA/NOOUHOU53p6Dg0dsiNaqtITSYYWfIHDGhVfS3zP6+p/MXPL2/cYBXXB4sceocvdzbEPwjbh3pcKanX9hwk7EFOZ0GH6843EPmg+7+N6kv9DAta1o+ZeEcLID/ItOw4K84xInRYYaXReZGJtVuiee/YV5YtALu51j7trrI/dyfLhveuVGgTb1VKw6dvULcg24Dtt1OZCW7U/xT8gJ5HtPS6jFyB+a7iK27qukRuuNt6j8NNzmpZtId9Iu+yb7HNEL0tvYhh3fzFcZFB8ncDuYk16b4EqhVfqjPUrkcUGrBSocmY4xC6p4qig4ZOrA1BsYJXrO3ytlBrnCA0DNx/UVoe5lrAp5z4kDuAKLW01BSJk48cpuBcKDAIBaLNbirHLw8WsX61lnhTh5o4hmzASJ9KiBIe9u5+zbyZFfXrm3xkCMY/vez9vrS+BVwFD3GNndbPEchyUbAGjkaP0m9kjqAPfijFHtGtGl3z9I5/VIsfLF1FDBUV9joWoZ4qNRNQjHP/vMZK194KlUPTTEwkKf4W655XsFTMfpu+Au14Em1jnKKw4jJ7Omz9DuOi8Aut/mX6iVWUgQChcI8cjY9UAzcxJbgUCCPOxdGS2l4ExhxPMdzL43IurkILWV8cQYwMMXImRlV2RYtwOhQayeeaRVInLmGi8Ro5YXwFLfjBM1gEV7KmCq9T+SN9gJfPELabB6iSypAImfiO3dWBKn5ftL6qVolaM+PocBQpQ3B50rBkMdVseKTi39Gz4Rhl04w+GSSsggB60JcTG1VftePML3m//bpn/QvtZP2w3rrKuuWKSHzFTXazMZAgJBE+LZ55r7Az43N2E4LMW8tyI36wVWCrxXffNYK4TCh4uzBXxFHjsE3DNa/DZacRMIauTwRJOqp5lkdBG3ukgIt9GsJQZ7UHlr44nD0hGg4Oon3deCVBDexUoiD1ooZ4LRKEvXTeznB7UMA9G2OIAMThdCVyQBzYRPo2yO4fFH6nIZ0atbq1FGX2X5Ub9hcshXxcb6+N1btFIcKwELMmMWrLLbXaDXmh3ycIlS8HqrYe37DzkTEXQ30ChOgjJrRFubvbXvB2aQE9BY5ap2rPf0FOzGAsKFYq0BF8d4UCySPZLrSXGURDT+ZUMUiY/DBmWl28oPihP8J6tsqSaI78hRF6FOAJnIsw7r9EcK7hGHbbL8qBCHmSRyoFyOhhwVKqNq8yi14dwlhAjKTRMCejKL6GqLwIgM4Ow/woMNmZep+OZfefUEx6F+sTW1JETmixL1OW1u+UXdnax+rqdg+PKGjFoFpg4UD,iv:YWvImaFa5GXiraaF7UVt3fAsuYIK+RpHkSQ2mPAsHz4=,tag:JvHARPOlmrKgG5Z85QokDg==,type:str] + krdp.crt: ENC[AES256_GCM,data:/cIW8pLa1Xp3feHoGQ8ujAqcx8IQnV/+9pSxmuuYNgs0Pn9BjHhNvkXPh1z8h0LiTHQ/jks23C0TS8tyNNXYZI/w1ihGhkqlFWGkr1yC1yM0SXnDfAp/gBAAdKzIJN2rGWpK/FD+s8GH1ys1g0+V2sPrzOis0h7jwL0EWG1un6hGn9q9YLoYbJbxLlv2W2+AGM4QqUv6/p07QhUyUSwaXWDrPZ2Sr1PZfRX30Zj4McM3TS9keyobOWS99kphBjX/c4TD+zMfMeSZRptcUiLQH03R9OPRSmr+xe72xNjMBKdkElc1wANc1H3g/upgTFZDwEpadd+YCvUFPVr1vxaIFfIz2jsWar4g802nY/jJfH+iWziNzkBI3jWpfSsIupWRHMB690mqp7UvUpSTwx4gcUB7L52MAUXEYMfYxws+kVHr3P2YsjkJ3PDESE/42/UuxA5Ccy0LxynCQWqa9/dnc84jQeYfKL5nuFozHqeRbfvPkvkc1U2I+18oEnCmTV3AR1XrV9iH0DLrVJ81eKd1UuZz468x+7B6NtWCOU4D4mABQWTAW6XbxA69qIZNv7/g4tBxc85iuZ6dxNV2TY6QA3+foYaD1Y5LD5Cslgs6r6RTIHrQ2Pmj4fQvA2pSk46rXUFCsyTq2heEiXFvlqY8YTLM3MsEV+KUQg4Cd1koUM5JlOAF+fHaNkOAQjc01QdZM79yJSrJByb6tvsLfjioYYl/EsJkUmc4cBeWkS1C0ap/mcaUSZy7QCC4FGUI62cFa1ClbqK9IIVXy3BL1oeD6OYxul7TX+2GB/tSgxGXZkQFdIRoQGo0Rkl7Jjlp+b8vfx+E9byA4gfoIi9T00EDlffNT446l2/3EbTNiW7HGYPD0hFyBDz7T5sOLS4Pv/hEDt5Yn9Fgyh+k434PuVcLxCtqJ+XMVU5U2hKukkk9MvezlbeH+w6dVRp3IkSWVE5SaIHZZmdOQGKINXOd7ez274qgMcFfWXpfw8MsbZU6VfK8orpmhCj5agSfiuZSLQRhonsaBbh/xzfXcThy51E4eqIZTMl2DrzKnN1+R061C0n2yhNG4ftZqsyqfEtMSkq5sUGhjl8H+aWFl+go2wsZhRcpFQa6dcZFmJvHblWnWPvfAesYoaVr7ZtGKLgA2Pt1Q9RE/5PdSfKZbziFIEGNpx4v5yt4hRwC0n+lCL6fm0vJ124gdufizxWoY7BKsi56cwYaeRrYARJ8OUl901DQNIbHNvfjrnUUqIQsn4CYT3bp78AxSRZLTWbS9yrm4K6pVUiJBI8KdvHhLaEYfGhP0+apaw/OT1x2McmH/gIBuxjanDs7OWWJ/D8OUdM9Dv6WNV6kitS8NMLmQaOhEMxt/plOGrGzzk5VgiDxmc/J8O5AFDc0XQLYy0rTR9h7Gj6oDnlIZahtL0qxSvO7QdG0fxho+zqT+N7JW92iZs6OhdkUIeUelBDtMXsstbhmx1/DBQrKhUJjhOVjoJE724Xhuu0mIOTznvaiwK7wbSLz5kOykvUIXoeaV74CQAn16Kv/JhHz4v6+7ZWXSp5BGe7RXXPpGtyb+W23dMOPxaRkQnHTh2nTET1Sr1FnyL0Ei5Je9uZ6NjubxlTRRgYPhRsOkr5/TmCnN0RtMaZxpvhB3s+d8HfvXE13zn0AVYTO,iv:AjoxETlmSVqKF2lEc73mKrtSV5HbKOQPLIUWUAdiwuo=,tag:m95ON0puJ+bXGF+vrWYd8g==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3WUQyb0dmRElyemJ2RDlE + ZzR1WE1VR2hNNUs3YlFObWdESmNYTDI1b0NzCk5SNXBCaUlRcFh4QXk1WmVseHdF + YUV4M0tUWlVLSUxKdGMzVXRkdERGWWcKLS0tIGxBYlJXUjIvSXZxRG9mMk14YTlu + RVp3VWxEQUtZdktoemVmN2FMYWZIUmMKV7/6sHEvevafH/yf3sEqpsgFwJefCoE+ + dl9mzJ/RDjcIQMllJskdcqYRSMPwBLG2+doxIpJ1rZkGqa2t0unarw== + -----END AGE ENCRYPTED FILE----- + - recipient: age15g6tzvcmcp3ae4hwnn4pwewat6eq9unlhtjrlaka6rf94ej9dd5qqpgt7u + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJUFo1SEhKbm5PUjFNVjBl + RlNpakxRTkVSY1RSSzhBeTBUSjE5RzhVQmpBCmx0aGcyY0lORmFCWFlIWGlPZ2ZT + RmQycEZTWWFVZXRVZk9JcU1JZ1ViTlEKLS0tIGxOR09MSmVKVm44Q0NtbFFqUklN + aE52LzRtc25GUG9ibGsxcXJWaTZlQWMKafTEZA7jS2D/lIR05ham1axBmKh+v+6F + EZnTVwFpyFzw/Kpbc6PHQ6D+/7gq75tZOrbllH7bUNeWphUyC+N8Vw== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-11-17T10:00:38Z" + mac: ENC[AES256_GCM,data:4HH7jjZBZY621EA4beI/hIuuXvqztJT1x3dTGSNshZzntIKealr74blBdwy+Fb/mPeJH/WuA4XVXcjupZhKN76nM5/BbW1w4fOmP3Hjpo0LHsc6I7J/BgoMv3SItXQdRGgQGE9XivbS5zieb/+NFl0eTvT6jIlUQUznTOOmGDyU=,iv:RTKUVAAieUPKXCeT0/5PxMPNOPxPAkP9ZqPHzamVRa0=,tag:wwMpIIlus/R1RQdOa7MLmg==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.1 diff --git a/config/kde/theming.nix b/config/kde/theming.nix new file mode 100644 index 00000000..39c57436 --- /dev/null +++ b/config/kde/theming.nix @@ -0,0 +1,42 @@ +{ ... }: +{ + programs.plasma = { + workspace = { + lookAndFeel = "org.kde.breezedark.desktop"; + }; + hotkeys.commands."launch-konsole" = { + name = "Launch Konsole"; + key = "Meta+Alt+K"; + command = "konsole"; + }; + panels = [ + # Windows-like panel at the bottom + { + location = "bottom"; + screen = "all"; + widgets = [ + "org.kde.plasma.kickoff" + "org.kde.plasma.icontasks" + "org.kde.plasma.marginsseparator" + "org.kde.plasma.systemtray" + "org.kde.plasma.pager" + "org.kde.plasma.digitalclock" + ]; + } + # Global menu at the top + { + location = "top"; + height = 26; + widgets = [ "org.kde.plasma.appmenu" ]; + screen = "all"; + } + ]; + configFile.kwinrc."NightColor" = { + Active = true; + LatitudeFixed = 51; + LongitudeFixed = 13; + Mode = "Location"; + NightTemperature = 4200; + }; + }; +} diff --git a/config/nas.nix b/config/nas.nix deleted file mode 100644 index 21a7d522..00000000 --- a/config/nas.nix +++ /dev/null @@ -1,211 +0,0 @@ -{ - config, - modulesPath, - lib, - nixos-hardware, - nixpkgs, - pkgs, - ... -} @ args: { - networking.hostName = "nas"; - networking.hostId = "70af00ed"; - - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - ./systemd-boot.nix - ./services/tpm2.nix - ./server.nix - ./services/hydra.nix - nixos-hardware.nixosModules.common-cpu-amd - nixos-hardware.nixosModules.common-pc-ssd - ./services/syncthing.nix - ../modules/tc-cake.nix - ./services/cups.nix - ./services/iscsi.nix - ./services/docker.nix - ./users/remote-build.nix - ./services/nfs.nix - ./services/tempo.nix - ./services/loki.nix - ./services/prometheus.nix - ./services/yiff-stash.nix - ./services/reverse-proxy.nix - ./services/jellyfin.nix - ./services/mautrix-discord.nix - ./services/mautrix-telegram.nix - ./services/mautrix-whatsapp.nix - ./services/mautrix-signal.nix - ./services/synapse.nix - ./services/heisenbridge.nix - #./services/kubernetes.nix - ./services/forgejo-runner.nix - ./services/renovate.nix - ./services/mautrix-slack.nix - ]; - - hardware.cpu.amd.updateMicrocode = true; - boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "sd_mod" "bcache"]; - boot.initrd.kernelModules = ["igb"]; - boot.kernelModules = ["kvm-amd"]; - boot.extraModulePackages = [ - config.boot.kernelPackages.zenpower - ]; - - fileSystems."/" = { - device = "/dev/bcache0"; - fsType = "btrfs"; - options = ["subvol=root" "compress=zstd"]; - }; - - fileSystems."/home" = { - device = "/dev/bcache0"; - fsType = "btrfs"; - options = ["subvol=home" "compress=zstd"]; - }; - - fileSystems."/nix" = { - device = "/dev/bcache0"; - fsType = "btrfs"; - options = ["subvol=nix" "compress=zstd" "noatime"]; - }; - - services.snapper.configs.main = { - SUBVOLUME = "/"; - TIMELINE_LIMIT_HOURLY = 5; - TIMELINE_LIMIT_DAILY = 7; - TIMELINE_LIMIT_WEEKLY = 4; - TIMELINE_LIMIT_MONTHLY = 12; - TIMELINE_LIMIT_YEARLY = 0; - }; - services.beesd.filesystems.root = { - spec = "/"; - hashTableSizeMB = 2048; - verbosity = "crit"; - extraOptions = ["--loadavg-target" "5.0"]; - }; - - fileSystems."/boot" = { - device = "/dev/nvme0n1p1"; - fsType = "vfat"; - }; - - environment.etc."sysconfig/lm_sensors".text = '' - # Generated by sensors-detect on Sun Apr 24 08:31:51 2022 - # This file is sourced by /etc/init.d/lm_sensors and defines the modules to - # be loaded/unloaded. - # - # The format of this file is a shell script that simply defines variables: - # HWMON_MODULES for hardware monitoring driver modules, and optionally - # BUS_MODULES for any required bus driver module (for example for I2C or SPI). - - HWMON_MODULES="it87" - ''; - nix.settings.cores = 12; - nix.settings.system-features = [ - "kvm" - "nixos-test" - "big-parallel" - "benchmark" - "gccarch-znver1" - "gccarch-skylake" - "ca-derivations" - ]; - boot.binfmt.emulatedSystems = [ - "armv7l-linux" - "powerpc-linux" - "powerpc64-linux" - "powerpc64le-linux" - "wasm32-wasi" - "riscv32-linux" - "riscv64-linux" - ]; - hardware.enableRedistributableFirmware = true; - nix.settings.substituters = lib.mkForce [ - "https://attic.chir.rs/chir-rs/" - "https://cache.nixos.org/" - ]; - nix.daemonCPUSchedPolicy = "idle"; - nix.daemonIOSchedClass = "idle"; - - system.stateVersion = "22.05"; - home-manager.users.darkkirb = import ./home-manager/darkkirb.nix { - desktop = false; - inherit args; - }; - - networking.tc_cake = { - enp2s0f0u4 = { - disableOffload = true; - shapeEgress = { - bandwidth = "4mbit"; - extraArgs = "docsis nat ack-filter"; - }; - shapeIngress = { - bandwidth = "33mbit"; - ifb = "ifb4enp2s0f0u4"; - }; - }; - }; - services.postgresql.settings = { - max_connections = 200; - shared_buffers = "4GB"; - effective_cache_size = "12GB"; - maintenance_work_mem = "1GB"; - checkpoint_completion_target = 0.9; - wal_buffers = "16MB"; - default_statistics_target = 100; - random_page_cost = 1.1; - effective_io_concurrency = 200; - work_mem = "5242kB"; - min_wal_size = "1GB"; - max_wal_size = "4GB"; - max_worker_processes = 12; - max_parallel_workers_per_gather = 4; - max_parallel_workers = 12; - max_parallel_maintenance_workers = 4; - }; - services.tailscale.useRoutingFeatures = "both"; - hardware.sane.brscan4.enable = true; - - swapDevices = [ - { - device = "/dev/sda2"; - } - { - device = "/dev/sdb2"; - } - { - device = "/dev/sdc2"; - } - ]; - - hardware.opengl = { - enable = true; - driSupport32Bit = true; - }; - - services.xserver.videoDrivers = ["nvidia"]; - - hardware.nvidia = { - modesetting.enable = true; - powerManagement.enable = false; - powerManagement.finegrained = false; - open = false; - nvidiaSettings = true; - package = config.boot.kernelPackages.nvidiaPackages.stable; - }; - services.restic.backups.sysbackup = { - paths = ["/media"]; - pruneOpts = [ - "--keep-daily 7" - "--keep-weekly 4" - "--keep-monthly 12" - "--keep-yearly 10" - ]; - }; - virtualisation.docker = { - enable = true; - #enableNvidia = true; - }; - environment.systemPackages = with pkgs; [docker runc]; -} diff --git a/config/networkmanager.nix b/config/networkmanager.nix new file mode 100644 index 00000000..af4de78a --- /dev/null +++ b/config/networkmanager.nix @@ -0,0 +1,9 @@ +{ ... }: +{ + networking.networkmanager.enable = true; + users.users.darkkirb.extraGroups = [ "networkmanager" ]; + environment.persistence."/persistent".directories = [ + "/var/lib/NetworkManager" + "/etc/NetworkManager" + ]; +} diff --git a/config/nix.nix b/config/nix.nix deleted file mode 100644 index 9007ed95..00000000 --- a/config/nix.nix +++ /dev/null @@ -1,208 +0,0 @@ -{ - pkgs, - lib, - config, - system, - attic, - ... -}: { - imports = [ - ./workarounds - ]; - nixpkgs.config.allowUnfree = true; - nix = { - settings = { - sandbox = true; - trusted-users = ["@wheel" "remote-build"]; - require-sigs = true; - substituters = [ - "https://attic.chir.rs/chir-rs/" - "https://hydra.int.chir.rs" - ]; - trusted-public-keys = [ - "nixcache:8KKuGz95Pk4UJ5W/Ni+pN+v+LDTkMMFV4yrGmAYgkDg=" - "hydra.nixos.org-1:CNHJZBh9K4tP3EKF6FkkgeVYsS3ohTl+oS0Qa8bezVs=" - "chir-rs:rzK1Czm3RqBbZLnXYrLM6JyOhfr6Z/8lhACIPO/LNFQ=" - ]; - auto-optimise-store = true; - }; - extraOptions = '' - experimental-features = nix-command flakes ca-derivations - ''; - gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 7d"; - }; - buildMachines = with lib; - mkMerge [ - (mkIf (config.networking.hostName != "instance-20221213-1915") [ - { - hostName = "build-aarch64"; - systems = [ - "aarch64-linux" - "riscv32-linux" - "riscv64-linux" - ]; - maxJobs = 4; - speedFactor = 1; - supportedFeatures = ["nixos-test" "benchmark" "ca-derivations" "gccarch-armv8-a" "gccarch-armv8.1-a" "gccarch-armv8.2-a" "big-parallel"]; - } - ]) - (mkIf (config.networking.hostName != "nas") [ - { - hostName = "build-nas"; - systems = [ - "i686-linux" - "x86_64-linux" - "armv7l-linux" - "powerpc-linux" - "powerpc64-linux" - "powerpc64le-linux" - "wasm32-wasi" - "riscv32-linux" - "riscv64-linux" - ]; - maxJobs = 12; - speedFactor = 1; - supportedFeatures = [ - "kvm" - "nixos-test" - "big-parallel" - "benchmark" - "gccarch-znver1" - "gccarch-skylake" - "ca-derivations" - ]; - } - ]) - (mkIf (config.networking.hostName != "rainbow-resort") [ - { - hostName = "build-rainbow-resort"; - systems = [ - "i686-linux" - "x86_64-linux" - "armv7l-linux" - "powerpc-linux" - "powerpc64-linux" - "powerpc64le-linux" - "wasm32-wasi" - "riscv32-linux" - "riscv64-linux" - ]; - maxJobs = 16; - speedFactor = 1; - supportedFeatures = [ - "kvm" - "nixos-test" - "big-parallel" - "benchmark" - "gccarch-skylake-avx512" - "gccarch-znver3" - "gccarch-znver2" - "gccarch-znver1" - "gccarch-skylake" - "ca-derivations" - ]; - } - ]) - (mkIf (config.networking.hostName != "vf2") [ - { - hostName = "build-riscv"; - systems = [ - "riscv32-linux" - "riscv64-linux" - ]; - maxJobs = 4; - speedFactor = 2; - supportedFeatures = [ - "nixos-test" - "big-parallel" - "benchmark" - "ca-derivations" - # There are many more combinations but i simply do not care lol - "gccarch-rv64gc_zba_zbb" - "gccarch-rv64gc_zba" - "gccarch-rv64gc_zbb" - "gccarch-rv64gc" - "gccarch-rv32gc_zba_zbb" - "gccarch-rv32gc_zba" - "gccarch-rv32gc_zbb" - "gccarch-rv32gc" - "native-riscv" - ]; - } - ]) - ]; - distributedBuilds = true; - }; - systemd.services.nix-daemon.environment.TMPDIR = "/build"; - systemd.services.nixos-upgrade = { - description = "NixOS Upgrade"; - - restartIfChanged = false; - unitConfig.X-StopOnRemoval = false; - - serviceConfig.Type = "oneshot"; - - path = with pkgs; [ - coreutils - gnutar - xz.bin - gzip - gitMinimal - config.nix.package.out - config.programs.ssh.package - jq - curl - ]; - - script = lib.mkDefault '' - #!${pkgs.bash}/bin/bash - set -ex - builds=$(${pkgs.curl}/bin/curl -H 'accept: application/json' https://hydra.int.chir.rs/jobset/flakes/${ - if config.networking.hostName != "vf2" - then "nixos-config" - else "nixos-config-riscv" - }/evals | ${pkgs.jq}/bin/jq -r '.evals[0].builds[]') - for build in $builds; do - doc=$(${pkgs.curl}/bin/curl -H 'accept: application/json' https://hydra.int.chir.rs/build/$build) - jobname=$(echo $doc | ${pkgs.jq}/bin/jq -r '.job') - if [ "$jobname" = "${config.networking.hostName}.${system}" ]; then - drvname=$(echo $doc | ${pkgs.jq}/bin/jq -r '.drvpath') - output=$(${pkgs.nix}/bin/nix-store -r $drvname) - - ${pkgs.nix}/bin/nix-env -p /nix/var/nix/profiles/system --set $output - - ${ - if config.networking.hostName != "nixos-8gb-fsn1-1" - then '' - $output/bin/switch-to-configuration boot - booted="$(${pkgs.coreutils}/bin/readlink /run/booted-system/{initrd,kernel,kernel-modules})" - built="$(${pkgs.coreutils}/bin/readlink $output/{initrd,kernel,kernel-modules})" - if [ "$booted" = "$built" ]; then - $output/bin/switch-to-configuration switch - else - ${pkgs.systemd}/bin/shutdown -r +1 - fi - exit - '' - else "$output/bin/switch-to-configuration switch" - } - fi - done - ''; - after = ["network-online.target"]; - wants = ["network-online.target"]; - }; - systemd.timers.nixos-upgrade = { - enable = true; - description = "Automatically update nixos"; - requires = ["nixos-upgrade.service"]; - wantedBy = ["multi-user.target"]; - timerConfig = { - OnUnitActiveSec = "30min"; - RandomizedDelaySec = "1h"; - }; - }; -} diff --git a/config/nixos-8gb-fsn1-1.nix b/config/nixos-8gb-fsn1-1.nix deleted file mode 100644 index 6bbd62e6..00000000 --- a/config/nixos-8gb-fsn1-1.nix +++ /dev/null @@ -1,215 +0,0 @@ -{ - lib, - modulesPath, - pkgs, - config, - system, - ... -} @ args: { - networking.hostName = "nixos-8gb-fsn1-1"; - networking.hostId = "73561e1f"; - - imports = [ - (modulesPath + "/profiles/qemu-guest.nix") - ./grub.nix - ./server.nix - ./services/named.nix - ./services/grafana.nix - ./users/miifox.nix - ./services/postgres.nix - ./services/dovecot.nix - ./services/postfix.nix - ./services/reverse-proxy.nix - ./services/matrix-media-repo.nix - ./bittorrent-blocker.nix - ./services/akkoma - ./services/peertube - ./services/rspamd.nix - ./wireguard/public-server.nix - ./services/shitalloverme.nix - ./services/initrd-ssh.nix - ./wireguard - ./zfs.nix - #./services/kubernetes.nix - ]; - - boot.initrd.availableKernelModules = ["ata_piix" "virtio_pci" "virtio_scsi" "xhci_pci" "sd_mod" "sr_mod"]; - boot.initrd.kernelModules = []; - boot.kernelModules = []; - boot.extraModulePackages = []; - boot.supportedFilesystems = ["zfs"]; - boot.loader.grub.devices = ["/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_16151622"]; - boot.loader.timeout = 5; - boot.initrd.luks.devices = { - disk0 = { - device = "/dev/disk/by-partuuid/29ccd4c9-5ef5-a146-8e42-9244f712baca"; - }; - }; - - fileSystems."/" = { - device = "tank/nixos"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/nix" = { - device = "tank/nixos/nix"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/etc" = { - device = "tank/nixos/etc"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/var" = { - device = "tank/nixos/var"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/var/lib" = { - device = "tank/nixos/var/lib"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/var/lib/minio" = { - device = "tank/nixos/var/lib/minio"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/var/lib/minio/disk0" = { - device = "tank/nixos/var/lib/minio/disk0"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/var/lib/minio/disk1" = { - device = "tank/nixos/var/lib/minio/disk1"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/var/lib/minio/disk2" = { - device = "tank/nixos/var/lib/minio/disk2"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/var/lib/minio/disk3" = { - device = "tank/nixos/var/lib/minio/disk3"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/var/log" = { - device = "tank/nixos/var/log"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/var/spool" = { - device = "tank/nixos/var/spool"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/home" = { - device = "tank/userdata/home"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/root" = { - device = "tank/userdata/home/root"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/home/darkkirb" = { - device = "tank/userdata/home/darkkirb"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/home/miifox" = { - device = "tank/userdata/home/miifox"; - fsType = "zfs"; - options = ["zfsutil"]; - }; - - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/8E14-4366"; - fsType = "vfat"; - options = ["X-mount.mkdir"]; - }; - - swapDevices = []; - - system.stateVersion = "21.11"; - - systemd.network = { - enable = true; - networks."ens3".extraConfig = '' - [Match] - Name = ens3 - [Network] - Address = 2a01:4f8:1c17:d953:b4e1:08ff:e658:6f49/64 - Gateway = fe80::1 - ''; - }; - - networking.wireguard.interfaces."wg0".ips = ["fd0d:a262:1fa6:e621:b4e1:08ff:e658:6f49/64"]; - home-manager.users.darkkirb = import ./home-manager/darkkirb.nix { - desktop = false; - inherit args; - }; - nix.settings.cores = 2; - nix.settings.max-jobs = 2; - nix.daemonCPUSchedPolicy = "idle"; - nix.daemonIOSchedClass = "idle"; - - nix.settings.system-features = [ - "kvm" - "nixos-test" - "big-parallel" - "benchmark" - "gccarch-skylake" - "ca-derivations" - ]; - nix.settings.auto-optimise-store = true; - - services.postgresql.settings = { - max_connections = 200; - shared_buffers = "1GB"; - effective_cache_size = "3GB"; - maintenance_work_mem = "256MB"; - checkpoint_completion_target = 0.9; - wal_buffers = "16MB"; - default_statistics_target = 100; - random_page_cost = 1.1; - effective_io_concurrency = 200; - work_mem = "52422kB"; - min_wal_size = "1GB"; - max_wal_size = "4GB"; - max_worker_processes = 2; - max_parallel_workers_per_gather = 1; - max_parallel_workers = 2; - max_parallel_maintenance_workers = 1; - }; - - services.resolved.enable = false; - services.bind.forwarders = lib.mkForce []; - services.tailscale.useRoutingFeatures = "server"; - services.caddy.virtualHosts."darkkirb.de" = { - useACMEHost = "darkkirb.de"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - redir https://lotte.chir.rs - ''; - }; -} diff --git a/config/overlays/default.nix b/config/overlays/default.nix new file mode 100644 index 00000000..ba27b85b --- /dev/null +++ b/config/overlays/default.nix @@ -0,0 +1,40 @@ +{ + inTester, + system, + self, + rust-overlay, + nix-vscode-extensions, + ... +}: +{ + imports = + if !inTester then + ( + [ + ./inputs-overlay.nix + ] + ++ ( + if system == "riscv64-linux" then + [ + ./riscv.nix + ./riscv-cross-packages.nix + ] + else + [ ] + ) + ) + else + [ ]; +} +// ( + if !inTester then + { + nixpkgs.overlays = [ + self.overlays.default + (import rust-overlay) + nix-vscode-extensions.overlays.default + ]; + } + else + { } +) diff --git a/config/overlays/inputs-overlay.nix b/config/overlays/inputs-overlay.nix new file mode 100644 index 00000000..08f83250 --- /dev/null +++ b/config/overlays/inputs-overlay.nix @@ -0,0 +1,22 @@ +{ pureInputs, lib, ... }: +{ + nixpkgs.overlays = [ + (_: _: { + inputs = pureInputs; + }) + ]; + environment.etc."nix/inputs/nixpkgs-overlays/inputs.nix".text = + let + inputsToLoadString = lib.mapAttrsToList ( + name: value: + ''${name} = ${if value._type or "" == "flake" then "loadFlake \"${value}\"" else "${value}"};'' + ) pureInputs; + in + '' + _: _: let loadFlake = builtins.getFlake or (import ${pureInputs.flake-compat}); in { + inputs = { + ${lib.concatStringsSep "\n" inputsToLoadString} + }; + } + ''; +} diff --git a/config/overlays/riscv-cross-packages.nix b/config/overlays/riscv-cross-packages.nix new file mode 100644 index 00000000..68f028cc --- /dev/null +++ b/config/overlays/riscv-cross-packages.nix @@ -0,0 +1,40 @@ +# Cross compiled packages for when shit breaks +{ + nixpkgs, + lix, + ... +}: +let + pkgs_x86_64 = import nixpkgs { + system = "x86_64-linux"; + crossSystem.system = "riscv64-linux"; + overlays = [ lix.overlays.default ]; + }; + pkgs_x86_64_2 = import nixpkgs { + system = "x86_64-linux"; + crossSystem.system = "riscv64-linux"; + }; +in +{ + nixpkgs.overlays = [ + (self: super: { + inherit (pkgs_x86_64) lix pandoc; + inherit (pkgs_x86_64_2) nixos-option; + }) + ]; + environment.etc."nix/inputs/nixpkgs-overlays/riscv-cross-packages.nix".text = '' + self: _: let pkgs_x86_64 = import { + system = "x86_64-linux"; + crossSystem.system = "riscv64-linux"; + overlays = [self.inputs.lix.overlays.default]; + } + pkgs_x86_64_2 = import { + system = "x86_64-linux"; + crossSystem.system = "riscv64-linux"; + overlays = []; + }; in { + inherit (pkgs_x86_64) lix pandoc; + inherit (pkgs_x86_64_2) nixos-option; + } + ''; +} diff --git a/config/overlays/riscv.nix b/config/overlays/riscv.nix new file mode 100644 index 00000000..f34bb58d --- /dev/null +++ b/config/overlays/riscv.nix @@ -0,0 +1,7 @@ +{ riscv-overlay, ... }: +{ + nixpkgs.overlays = [ + riscv-overlay.overlays.default + ]; + environment.etc."nix/inputs/nixpkgs-overlays/riscv-overlay.nix".text = "import ${riscv-overlay}/overlay.nix"; +} diff --git a/config/programs/calendar.nix b/config/programs/calendar.nix deleted file mode 100644 index 4a57a07f..00000000 --- a/config/programs/calendar.nix +++ /dev/null @@ -1,4 +0,0 @@ -{...}: { - accounts.calendar.accounts.lotte = { - }; -} diff --git a/config/programs/direnv.nix b/config/programs/direnv.nix deleted file mode 100644 index 37f6d994..00000000 --- a/config/programs/direnv.nix +++ /dev/null @@ -1,6 +0,0 @@ -_: { - programs.direnv = { - enable = true; - nix-direnv.enable = true; - }; -} diff --git a/config/programs/fcitx.nix b/config/programs/fcitx.nix deleted file mode 100644 index 5f6b502d..00000000 --- a/config/programs/fcitx.nix +++ /dev/null @@ -1,6 +0,0 @@ -{pkgs, ...}: { - i18n.inputMethod = { - enabled = "fcitx5"; - fcitx5.addons = with pkgs; [fcitx5-chinese-addons fcitx5-table-extra fcitx5-table-other fcitx5-gtk fcitx5-mozc]; - }; -} diff --git a/config/programs/firefox.nix b/config/programs/firefox.nix deleted file mode 100644 index 63666152..00000000 --- a/config/programs/firefox.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ - pkgs, - firefox, - ... -}: { - programs.firefox = { - enable = true; - profiles = { - unhardened = { - id = 1; - }; - default = { - userChrome = '' - /* Hide tab bar in FF Quantum */ - @-moz-document url("chrome://browser/content/browser.xul") { - #TabsToolbar { - visibility: collapse !important; - margin-bottom: 21px !important; - } - - #sidebar-box[sidebarcommand="treestyletab_piro_sakura_ne_jp-sidebar-action"] #sidebar-header { - visibility: collapse !important; - } - } - ''; - settings = { - "font.default.x-western" = "sans-serif"; - "font.name-list.monospace.x-western" = "monospace, nasin-nanpa"; - "font.name-list.sans-serif.x-western" = "sans-serif, nasin-nanpa"; - "font.name-list.serif.x-western" = "sans-serif, nasin-nanpa"; - }; - id = 0; - }; - }; - }; -} diff --git a/config/programs/gpg.nix b/config/programs/gpg.nix deleted file mode 100644 index 6af23caa..00000000 --- a/config/programs/gpg.nix +++ /dev/null @@ -1,50 +0,0 @@ -{pkgs, ...}: { - programs.gpg = { - enable = true; - publicKeys = [ - { - source = ../../keys/lotte_chir.rs.pgp; - trust = 5; - } - { - source = ../../keys/miifox_miifox.net.pgp; - trust = 3; - } - { - source = ../../keys/mdelenk_hs-mittweida.de.pgp; - trust = 5; - } - ]; - scdaemonSettings = { - disable-ccid = true; - pcsc-driver = "${pkgs.pcsclite.out}/lib/libpcsclite.so.1"; - reader-port = "Yubico YubiKey"; - }; - settings = { - # https://github.com/drduh/config/blob/master/gpg.conf - personal-cipher-preferences = "AES256 AES192 AES"; - personal-digest-preferences = "SHA512 SHA384 SHA256"; - personal-compress-preferences = "ZLIB BZIP2 ZIP Uncompressed"; - default-preference-list = "SHA512 SHA384 SHA256 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed"; - cert-digest-algo = "SHA512"; - s2k-digest-algo = "SHA512"; - s2k-cipher-algo = "AES256"; - charset = "utf-8"; - fixed-list-mode = true; - no-comments = true; - no-emit-version = true; - no-greeting = true; - keyid-format = "0xlong"; - list-options = "show-uid-validity"; - verify-options = "show-uid-validity"; - with-fingerprint = true; - with-key-origin = true; - require-cross-certification = true; - no-symkey-cache = true; - use-agent = true; - throw-keyids = true; - keyserver = ["hkps://keys.openpgp.org" "hkps://keyserver.ubuntu.com:443" "hkps://hkps.pool.sks-keyservers.net" "hkps://pgp.ocf.berkeley.edu"]; - auto-key-locate = ["local" "dane" "cert" "wkd"]; - }; - }; -} diff --git a/config/programs/ims.nix b/config/programs/ims.nix deleted file mode 100644 index 31090bde..00000000 --- a/config/programs/ims.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ - system, - pkgs, - ... -}: { - home.packages = with pkgs; - [ - nheko - twinkle - tokodon - telegram-desktop - ] - ++ ( - if system == "x86_64-linux" - then [ - pkgs.discord - ] - else [] - ); -} diff --git a/config/programs/kdeconnect.nix b/config/programs/kdeconnect.nix deleted file mode 100644 index dd3f085d..00000000 --- a/config/programs/kdeconnect.nix +++ /dev/null @@ -1,4 +0,0 @@ -{...}: { - services.kdeconnect.enable = true; - services.kdeconnect.indicator = true; -} diff --git a/config/programs/keepass.nix b/config/programs/keepass.nix deleted file mode 100644 index 000346d9..00000000 --- a/config/programs/keepass.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - pkgs, - lib, - ... -}: { - home.packages = [pkgs.keepassxc]; - systemd.user.services.keepassxc = { - Unit = { - Description = "keepassxc"; - After = ["graphical-session-pre.target"]; - PartOf = ["graphical-session.target"]; - }; - Install.WantedBy = ["graphical-session.target"]; - Service = { - ExecStart = "${pkgs.keepassxc}/bin/keepassxc"; - }; - }; -} diff --git a/config/programs/keybase.nix b/config/programs/keybase.nix deleted file mode 100644 index 79548d0c..00000000 --- a/config/programs/keybase.nix +++ /dev/null @@ -1,9 +0,0 @@ -{nixpkgs, ...}: let - x86_64-linux-pkgs = import nixpkgs {system = "x86_64-linux";}; -in { - services.keybase.enable = true; - services.kbfs.enable = true; - home.packages = [ - x86_64-linux-pkgs.keybase-gui - ]; -} diff --git a/config/programs/kicad.nix b/config/programs/kicad.nix deleted file mode 100644 index c670405b..00000000 --- a/config/programs/kicad.nix +++ /dev/null @@ -1,3 +0,0 @@ -{pkgs, ...}: { - home.packages = with pkgs; [kicad-unstable-small]; -} diff --git a/config/programs/kitty.nix b/config/programs/kitty.nix deleted file mode 100644 index 4db7acae..00000000 --- a/config/programs/kitty.nix +++ /dev/null @@ -1,15 +0,0 @@ -_: { - programs.kitty = { - enable = true; - font.name = "FiraCode Nerd Font Mono"; - settings = { - disable_ligatures = "cursor"; - shell_integration = "disabled"; - font_size = 8; - }; - extraConfig = '' - symbol_map U+F1900-U+F19FF Fairfax HD - narrow_symbols U+F1900-U+F19FF 2 - ''; - }; -} diff --git a/config/programs/mail.nix b/config/programs/mail.nix deleted file mode 100644 index 347648ce..00000000 --- a/config/programs/mail.nix +++ /dev/null @@ -1,9 +0,0 @@ -{pkgs, ...}: { - programs.thunderbird = { - enable = true; - profiles.main = { - withExternalGnupg = true; - isDefault = true; - }; - }; -} diff --git a/config/programs/mako.nix b/config/programs/mako.nix deleted file mode 100644 index 3ff2bdfc..00000000 --- a/config/programs/mako.nix +++ /dev/null @@ -1,17 +0,0 @@ -{pkgs, ...}: { - programs.mako = { - enable = true; - defaultTimeout = 30000; - }; - systemd.user.services.mako = { - Unit = { - Description = "mako"; - After = ["graphical-session-pre.target"]; - PartOf = ["graphical-session.target"]; - }; - Install.WantedBy = ["graphical-session.target"]; - Service = { - ExecStart = "mako"; - }; - }; -} diff --git a/config/programs/misc.nix b/config/programs/misc.nix deleted file mode 100644 index 3644a193..00000000 --- a/config/programs/misc.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ - pkgs, - nixpkgs, - ... -}: let - x86_64-linux-pkgs = import nixpkgs {system = "x86_64-linux";}; -in { - home.packages = with pkgs; [ - #anki - mdcat - gimp - krita - ffmpeg-full - audacious - ]; - xdg.configFile."gdb/gdbinit".text = "set auto-load safe-path /nix/store"; - services.xsettingsd = { - enable = true; - settings = { - "Gtk/EnableAnimations" = 1; - "Gtk/DecorationLayout" = "icon:minimize,maximize,close"; - "Gtk/PrimaryButtonWarpsSlider" = 0; - "Gtk/ToolbarStyle" = 3; - "Gtk/MenuImages" = 1; - "Gtk/ButtonImages" = 1; - "Gtk/CursorThemeSize" = 24; - "Gtk/CursorThemeName" = "breeze_cursors"; - "Gtk/FontName" = "Noto Sans, 10"; - "Net/IconThemeName" = "breeze-dark"; - }; - }; -} diff --git a/config/programs/plover.nix b/config/programs/plover.nix deleted file mode 100644 index 0ce563f8..00000000 --- a/config/programs/plover.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - lib, - pkgs, - system, - emily-modifiers, - emily-symbols, - ... -}: let - plover-env = - (pkgs.plover.pythonModule.withPackages (_: - with pkgs; [ - plover - plover-plugins-manager - plover-plugin-emoji - plover-plugin-tapey-tape - plover-plugin-yaml-dictionary - plover-plugin-rkb1-hid - plover-plugin-python-dictionary - plover-plugin-stenotype-extended - plover-plugin-dotool-output - plover-plugin-lapwing-aio - ])) - .overrideDerivation (super: { - nativeBuildInputs = super.nativeBuildInputs or [] ++ [pkgs.qt5.wrapQtAppsHook]; - postBuild = - super.postBuild - + '' - wrapQtApp $out/bin/plover - ''; - }); -in { - home.packages = [ - plover-env - ]; -} diff --git a/config/programs/ssh.nix b/config/programs/ssh.nix deleted file mode 100644 index a556a020..00000000 --- a/config/programs/ssh.nix +++ /dev/null @@ -1,10 +0,0 @@ -_: { - imports = [ - ./builders.nix - ]; - programs.ssh = { - controlMaster = "auto"; - controlPersist = "10m"; - enable = true; - }; -} diff --git a/config/programs/syncthing.nix b/config/programs/syncthing.nix deleted file mode 100644 index 4c984df9..00000000 --- a/config/programs/syncthing.nix +++ /dev/null @@ -1,6 +0,0 @@ -_: { - services.syncthing = { - enable = true; - tray.enable = true; - }; -} diff --git a/config/programs/taskwarrior.nix b/config/programs/taskwarrior.nix deleted file mode 100644 index d73f0c6f..00000000 --- a/config/programs/taskwarrior.nix +++ /dev/null @@ -1,10 +0,0 @@ -_: { - programs.taskwarrior = { - enable = true; - colorTheme = "dark-violets-256"; - config = { - weekstart = "monday"; # no americans, the week does not start with week-end - }; - dataLocation = "~/Data/tasks/"; - }; -} diff --git a/config/programs/theming.nix b/config/programs/theming.nix deleted file mode 100644 index f98d8670..00000000 --- a/config/programs/theming.nix +++ /dev/null @@ -1,606 +0,0 @@ -{ - pkgs, - config, - colorpickle, - withNSFW, - lib, - self, - nixpkgs, - ... -}: let - theme = import ../../extra/theme.nix; - inherit (config.lib.formats.rasi) mkLiteral; - - prepBGs = [ - ["${pkgs.lotte-art}/2021-01-27-ceeza-lottedonut.jxl" "-crop" "2048x1152+0+106"] - ["${pkgs.lotte-art}/2021-09-15-cloverhare-lotteplush.jxl" "-crop" "1774x997+0+173"] - ["${pkgs.lotte-art}/2022-11-15-wolfsifi-maff-me-leashed.jxl" "-crop" "1699x956+0+88"] - ]; - - prepBGsNSFW = [ - ["${pkgs.lotte-art}/2021-11-27-theroguez-lottegassyvore1.jxl" "-crop" "1233x694+0+65"] - ["${pkgs.lotte-art}/2021-12-12-baltnwolf-christmas-diaper.jxl" "-crop" "2599x1462+0+294"] - ["${pkgs.lotte-art}/2021-12-12-baltnwolf-christmas-diaper-messy.jxl" "-crop" "2599x1462+0+294"] - ["${pkgs.lotte-art}/2022-04-20-cloverhare-mxbatty-maffsie-train-plush.jxl" "-crop" "3377x1900+0+211"] - ["${pkgs.lotte-art}/2022-04-20-cloverhare-mxbatty-me-train-maffsie-plush.jxl" "-crop" "3377x1900+0+211"] - ["${pkgs.lotte-art}/2022-12-27-rexyi-scatych.jxl" "-crop" "2000x1120+0+0"] - ["${pkgs.lotte-art}/2023-03-09-rexyi-voredisposal-ych.jxl" "-crop" "2000x1120+0+0"] - ["${pkgs.lotte-art}/2023-04-16-baltnwolf-lottediaperplushies.jxl" "-gravity" "center" "-background" "white" "-extent" "5333x3000"] - ["${pkgs.lotte-art}/2023-04-16-baltnwolf-lottediaperplushies-messy.jxl" "-gravity" "center" "-background" "white" "-extent" "5333x3000"] - ["${pkgs.lotte-art}/2023-08-09-coldquarantine-lotte-eating-trash.jxl" "-crop" "6000x3375+0+312"] - ["${pkgs.lotte-art}/2023-08-20-coldquarantine-lotte-eating-trash-clean.jxl" "-crop" "6000x3375+0+312"] - ["${pkgs.lotte-art}/2023-08-10-coldquarantine-lotte-eating-trash-diapers.jxl" "-crop" "6000x3375+0+312"] - ]; - - fixupImage = instructions: - pkgs.stdenv.mkDerivation { - name = "bg.jxl"; - src = pkgs.emptyDirectory; - nativeBuildInputs = [pkgs.imagemagick]; - buildPhase = '' - convert ${toString instructions} $out - ''; - installPhase = "true"; - }; - - validBGs = ["${pkgs.lotte-art}/2020-07-24-urbankitsune-bna-ych.jxl" "${pkgs.lotte-art}/2022-05-02-anonfurryartist-giftart.jxl" "${pkgs.lotte-art}/2022-06-21-sammythetanuki-lotteplushpride.jxl"] ++ (map fixupImage prepBGs); - validBGsNSFW = ["${pkgs.lotte-art}/2021-10-29-butterskunk-lotte-scat-buffet.jxl" "${pkgs.lotte-art}/2022-08-12-deathtoaster-funpit-scat.jxl" "${pkgs.lotte-art}/2022-08-15-deathtoaster-funpit-mud.jxl"] ++ (map fixupImage prepBGsNSFW) ++ validBGs; - - mod = a: b: a - (a / b * b); - choose = l: rand: let len = builtins.length l; in builtins.elemAt l (mod rand len); - hexToIntList = { - "0" = 0; - "1" = 1; - "2" = 2; - "3" = 3; - "4" = 4; - "5" = 5; - "6" = 6; - "7" = 7; - "8" = 8; - "9" = 9; - "a" = 10; - "b" = 11; - "c" = 12; - "d" = 13; - "e" = 14; - "f" = 15; - "A" = 10; - "B" = 11; - "C" = 12; - "D" = 13; - "E" = 14; - "F" = 15; - }; - hexToInt = s: lib.foldl (state: new: state * 16 + hexToIntList.${new}) 0 (lib.strings.stringToCharacters s); - - seed = hexToInt (self.shortRev or nixpkgs.shortRev); - bg = - choose ( - if withNSFW - then validBGsNSFW - else validBGs - ) - seed; - - color = n: - config.environment.graphical.colors.main."${builtins.toString n}"; - colorD = n: - config.environment.graphical.colors.disabled."${builtins.toString n}"; - colorI = n: - config.environment.graphical.colors.inactive."${builtins.toString n}"; - - color' = n: mkLiteral (color n); - bgPng = pkgs.stdenv.mkDerivation { - name = "bg.png"; - src = pkgs.emptyDirectory; - nativeBuildInputs = [pkgs.imagemagick]; - buildPhase = '' - convert ${bg} $out - ''; - installPhase = "true"; - }; -in { - imports = [ - colorpickle.nixosModules.default - ]; - environment.graphical.colorschemes.main = { - image = bgPng; - params = ["--lighten" "0.3"]; - }; - environment.graphical.colorschemes.disabled = { - image = bgPng; - params = ["--lighten" "0.1" "--saturate" "-0.5"]; - }; - environment.graphical.colorschemes.inactive = { - image = bgPng; - params = []; - }; - wayland.windowManager.sway.config.output."*".bg = "${bgPng} fill"; - /* - dconf.settings."org/gnome/desktop/interface" = { - icon-theme = "breeze-dark"; - cursor-theme = "Vanilla-DMZ"; - }; - */ - gtk = { - #enable = true; - gtk2.extraConfig = '' - gtk-cursor-theme-name = "Vanilla-DMZ" - gtk-cursor-theme-size = 0 - ''; - gtk3.extraConfig = { - gtk-cursor-theme-name = "Vanilla-DMZ"; - gtk-cursor-theme-size = 0; - }; - font = { - package = pkgs.noto-fonts; - name = "Noto Sans"; - size = 10; - }; - iconTheme = { - package = pkgs.libsForQt5.breeze-icons; - name = "breeze-dark"; - }; - theme = { - name = "Catppuccin-Mocha-Compact-Pink-Dark"; - package = pkgs.catppuccin-gtk.override { - accents = ["pink"]; - size = "compact"; - tweaks = ["rimless" "black"]; - variant = "mocha"; - }; - }; - }; - qt = { - #enable = true; - style = { - name = "lightly"; - package = pkgs.plasma5Packages.lightly; - }; - platformTheme = "qtct"; - }; - xdg.configFile."qt5ct/colors/Catppuccin-Custom.conf".text = '' - [ColorScheme] - active_colors=${color 15}, ${color 0}, #ffa6adc8, #ff9399b2, ${color 1}, #ff6c7086, ${color 15}, ${color 15}, ${color 15}, #ff1e1e2e, ${colorD 0}, #ff7f849c, ${color 8}, ${color 15}, ${color 13}, ${color 5}, ${color 0}, ${color 15}, ${colorI 0}, ${color 5}, #807f849c - disabled_colors=${colorD 15}, ${colorD 0}, #ffa6adc8, #ff9399b2, ${colorD 1}, #ff6c7086, ${colorD 15}, ${colorD 15}, ${colorD 15}, #ff1e1e2e, ${colorD 0}, #ff7f849c, ${colorD 8}, ${colorD 15}, ${colorD 13}, ${colorD 5}, ${colorD 0}, ${colorD 15}, ${colorI 0}, ${colorD 5}, #807f849c - inactive_colors=${colorI 15}, ${colorI 0}, #ffa6adc8, #ff9399b2, ${colorI 1}, #ff6c7086, ${colorI 15}, ${colorI 15}, ${colorI 15}, #ff1e1e2e, ${colorD 0}, #ff7f849c, ${colorI 8}, ${colorI 15}, ${colorI 13}, ${colorI 5}, ${colorI 0}, ${colorI 15}, ${colorI 0}, ${colorI 5}, #807f849c - ''; - xdg.configFile."qt6ct/colors/Catppuccin-Custom.conf".text = '' - [ColorScheme] - active_colors=${color 15}, ${color 0}, #ffa6adc8, #ff9399b2, ${color 1}, #ff6c7086, ${color 15}, ${color 15}, ${color 15}, #ff1e1e2e, ${colorD 0}, #ff7f849c, ${color 8}, ${color 15}, ${color 13}, ${color 5}, ${color 0}, ${color 15}, ${colorI 0}, ${color 5}, #807f849c - disabled_colors=${colorD 15}, ${colorD 0}, #ffa6adc8, #ff9399b2, ${colorD 1}, #ff6c7086, ${colorD 15}, ${colorD 15}, ${colorD 15}, #ff1e1e2e, ${colorD 0}, #ff7f849c, ${colorD 8}, ${colorD 15}, ${colorD 13}, ${colorD 5}, ${colorD 0}, ${colorD 15}, ${colorI 0}, ${colorD 5}, #807f849c - inactive_colors=${colorI 15}, ${colorI 0}, #ffa6adc8, #ff9399b2, ${colorI 1}, #ff6c7086, ${colorI 15}, ${colorI 15}, ${colorI 15}, #ff1e1e2e, ${colorD 0}, #ff7f849c, ${colorI 8}, ${colorI 15}, ${colorI 13}, ${colorI 5}, ${colorI 0}, ${colorI 15}, ${colorI 0}, ${colorI 5}, #807f849c - ''; - nixpkgs.overlays = [ - (super: self: { - python3 = super.python.override { - packageOverrides = self: super: { - python3Packages = self.python3.pkgs; - catppuccin = super.catppuccin.overrideAttrs (super: { - patches = - super.patches - or [] - ++ [ - (pkgs.writeText "color.patch" '' - diff --git a/catppuccin/colour.py b/catppuccin/colour.py - index 193eea7..7620cf0 100644 - --- a/catppuccin/colour.py - +++ b/catppuccin/colour.py - @@ -43,6 +43,9 @@ class Colour: - @classmethod - def from_hex(cls, hex_string: str) -> Colour: - """Create a colour from hex string.""" - + if hex_string.startswith("#"): - + hex_string = hex_string[1:] - + - if len(hex_string) not in (6, 8): - raise ValueError("Hex string must be 6 or 8 characters long.") - diff --git a/catppuccin/flavour.py b/catppuccin/flavour.py - index aa7df98..4bf849a 100644 - --- a/catppuccin/flavour.py - +++ b/catppuccin/flavour.py - @@ -138,30 +138,30 @@ class Flavour: # pylint: disable=too-many-instance-attributes - def mocha() -> "Flavour": - """Mocha flavoured Catppuccin.""" - return Flavour( - - rosewater=Colour(245, 224, 220), - - flamingo=Colour(242, 205, 205), - - pink=Colour(245, 194, 231), - - mauve=Colour(203, 166, 247), - - red=Colour(243, 139, 168), - - maroon=Colour(235, 160, 172), - - peach=Colour(250, 179, 135), - - yellow=Colour(249, 226, 175), - - green=Colour(166, 227, 161), - - teal=Colour(148, 226, 213), - - sky=Colour(137, 220, 235), - - sapphire=Colour(116, 199, 236), - - blue=Colour(137, 180, 250), - - lavender=Colour(180, 190, 254), - - text=Colour(205, 214, 244), - + rosewater=Colour.from_hex("${color 1}"), - + flamingo=Colour.from_hex("${color 2}"), - + pink=Colour.from_hex("${color 3}"), - + mauve=Colour.from_hex("${color 4}"), - + red=Colour.from_hex("${color 5}"), - + maroon=Colour.from_hex("${color 6}"), - + peach=Colour.from_hex("${color 7}"), - + yellow=Colour.from_hex("${color 8}"), - + green=Colour.from_hex("${color 9}"), - + teal=Colour.from_hex("${color 10}"), - + sky=Colour.from_hex("${color 11}"), - + sapphire=Colour.from_hex("${color 12}"), - + blue=Colour.from_hex("${color 13}"), - + lavender=Colour.from_hex("${color 14}"), - + text=Colour.from_hex("${color 15}"), - subtext1=Colour(186, 194, 222), - subtext0=Colour(166, 173, 200), - overlay2=Colour(147, 153, 178), - overlay1=Colour(127, 132, 156), - overlay0=Colour(108, 112, 134), - - surface2=Colour(88, 91, 112), - - surface1=Colour(69, 71, 90), - - surface0=Colour(49, 50, 68), - - base=Colour(30, 30, 46), - - mantle=Colour(24, 24, 37), - - crust=Colour(17, 17, 27), - + surface2=Colour.from_hex("${color 2}"), - + surface1=Colour.from_hex("${color 1}"), - + surface0=Colour.from_hex("${color 0}"), - + base=Colour.from_hex("${color 0}"), - + mantle=Colour.from_hex("${color 0}"), - + crust=Colour.from_hex("${color 0}"), - ) - '') - ]; - }); - }; - }; - }) - ]; - - /* - home.file = { - ".icons/default/index.theme".text = '' - [Icon Theme] - Name=Default - Comment=Default Cursor Theme - Inherits=Vanilla-DMZ - ''; - }; - */ - programs.kitty.settings = with theme; { - background = color 0; - foreground = color 15; - cursor = color 15; - selection_background = "#4f414c"; - color0 = color 0; - color1 = color 9; - color2 = color 10; - color3 = color 11; - color4 = color 12; - color5 = color 13; - color6 = color 14; - color7 = color 15; - color8 = color 8; - color9 = color 9; - color10 = color 10; - color11 = color 11; - color12 = color 12; - color13 = color 13; - color14 = color 14; - color15 = color 15; - }; - # Taken from https://github.com/jakehamilton/dotfiles/blob/master/waybar/style.css - programs.waybar.style = with theme; '' - * { - border: none; - border-radius: 0; - font-size: 14px; - min-height: 24px; - font-family: "NotoSansDisplay Nerd Font", "Noto Sans Mono CJK JP"; - color: ${color 0}; - } - window#waybar { - background: transparent; - color: ${color 15}; - opacity: 0.9; - } - window#waybar.hidden { - opacity: 0.2; - } - #window { - margin-top: 8px; - padding: 0px 16px 0px 16px; - border-radius: 24px; - transition: none; - background: transparent; - } - #workspaces { - margin-top: 8px; - margin-left: 12px; - margin-bottom: 0; - border-radius: 24px; - background-color: ${color 0}; - color: ${color 15}; - transition: none; - } - #workspaces button { - transition: none; - background: transparent; - font-size: 16px; - color: ${color 15}; - } - #workspaces button.focused { - background: ${color 13}; - color: ${color 0}; - } - #workspaces button:hover { - background: ${color 10}; - color: ${color 0}; - } - #mpd { - margin-top: 8px; - margin-left: 8px; - padding-left: 16px; - padding-right: 16px; - margin-bottom: 0; - border-radius: 24px; - background: ${color 2}; - transition: none; - } - #mpd.disconnected, - #mpd.stopped { - background: ${color 4}; - } - #network { - margin-top: 8px; - margin-left: 8px; - padding-left: 16px; - padding-right: 16px; - margin-bottom: 0; - border-radius: 24px; - transition: none; - background: ${color 13}; - } - #pulseaudio { - margin-top: 8px; - margin-left: 8px; - padding-left: 16px; - padding-right: 16px; - margin-bottom: 0; - border-radius: 24px; - transition: none; - background: ${color 11}; - } - #temperature, #battery { - margin-top: 8px; - margin-left: 8px; - padding-left: 16px; - padding-right: 16px; - margin-bottom: 0; - border-radius: 24px; - transition: none; - background: ${color 2}; - } - #cpu, #backlight, #battery.warning { - margin-top: 8px; - margin-left: 8px; - padding-left: 16px; - padding-right: 16px; - margin-bottom: 0; - border-radius: 24px; - transition: none; - background: ${color 14}; - } - #memory, #battery.critical { - margin-top: 8px; - margin-left: 8px; - padding-left: 16px; - padding-right: 16px; - margin-bottom: 0; - border-radius: 24px; - transition: none; - background: ${color 12}; - } - #clock { - margin-top: 8px; - margin-left: 8px; - margin-right: 12px; - padding-left: 16px; - padding-right: 16px; - margin-bottom: 0; - border-radius: 26px; - transition: none; - background: ${color 0}; - color: ${color 15}; - } - ''; - - wayland.windowManager.sway.extraConfig = with theme; '' - # target title bg text indicator border - client.focused ${color 5} ${color 0} ${color 15} ${color 12} ${color 5} - client.focused_inactive ${color 13} ${color 0} ${color 15} ${color 12} ${color 13} - client.unfocused ${color 13} ${color 0} ${color 15} ${color 12} ${color 13} - client.urgent ${color 14} ${color 0} ${color 14} ${color 8} ${color 14} - client.placeholder ${color 8} ${color 0} ${color 15} ${color 8} ${color 8} - client.background ${color 0} - seat seat0 xcursor_theme breeze-dark 24 - ''; - home.packages = with pkgs; [ - libsForQt5.breeze-icons - libsForQt5.qt5ct - vanilla-dmz - pkgs.plasma5Packages.lightly - ]; - - programs.rofi.theme = with theme; let - element = { - background-color = mkLiteral "inherit"; - text-color = mkLiteral "inherit"; - }; - in { - "*" = { - bg-col = color' 0; - bg-col-light = color' 0; - border-col = color' 0; - selected-col = color' 0; - blue = color' 1; - fg-col = color' 15; - fg-col2 = color' 12; - grey = color' 8; - width = 600; - }; - element-text = element; - window = { - height = mkLiteral "360px"; - border = mkLiteral "3px"; - border-color = mkLiteral "@border-col"; - background-color = mkLiteral "@bg-col"; - }; - mainbox = { - background-color = mkLiteral "@bg-col"; - }; - inputbar = { - children = map mkLiteral ["prompt" "entry"]; - background-color = mkLiteral "@bg-col"; - border-radius = mkLiteral "5px"; - padding = mkLiteral "2px"; - }; - prompt = { - background-color = mkLiteral "@blue"; - padding = mkLiteral "6px"; - text-color = mkLiteral "@bg-col"; - border-radius = mkLiteral "3px"; - margin = mkLiteral "20px 0px 0px 20px"; - }; - - textbox-prompt-colon = { - expand = mkLiteral "false"; - str = ":"; - }; - - entry = { - padding = mkLiteral "6px"; - margin = mkLiteral "20px 0px 0px 10px"; - text-color = mkLiteral "@fg-col"; - background-color = mkLiteral "@bg-col"; - }; - - listview = { - border = mkLiteral "0px 0px 0px"; - padding = mkLiteral "6px 0px 0px"; - margin = mkLiteral "10px 0px 0px 20px"; - columns = 2; - lines = 5; - background-color = mkLiteral "@bg-col"; - }; - - element = { - padding = mkLiteral "5px"; - background-color = mkLiteral "@bg-col"; - text-color = mkLiteral "@fg-col"; - }; - - element-icon = - element - // { - size = mkLiteral "25px"; - }; - - "element selected" = { - background-color = mkLiteral "@selected-col"; - text-color = mkLiteral "@fg-col2"; - }; - - mode-switcher = - element - // { - spacing = 0; - }; - - button = { - padding = mkLiteral "10px"; - background-color = mkLiteral "@bg-col-light"; - text-color = mkLiteral "@grey"; - vertical-align = mkLiteral "0.5"; - horizontal-align = mkLiteral "0.5"; - }; - - "button selected" = { - background-color = mkLiteral "@bg-col"; - text-color = mkLiteral "@blue"; - }; - - message = { - background-color = mkLiteral "@bg-col-light"; - margin = mkLiteral "2px"; - padding = mkLiteral "2px"; - border-radius = mkLiteral "5px"; - }; - - textbox = { - padding = mkLiteral "6px"; - margin = mkLiteral "20px 0px 0px 20px"; - text-color = mkLiteral "@blue"; - background-color = mkLiteral "@bg-col-light"; - }; - }; - programs.neomutt.extraConfig = '' - color normal default default # Text is "Text" - color index color2 default ~N # New Messages are Green - color index color1 default ~F # Flagged messages are Red - color index color13 default ~T # Tagged Messages are Red - color index color1 default ~D # Messages to delete are Red - color attachment color5 default # Attachments are Pink - color signature color8 default # Signatures are Surface 2 - color search color4 default # Highlighted results are Blue - color indicator default color8 # currently highlighted message Surface 2=Background Text=Foreground - color error color1 default # error messages are Red - color status color15 default # status line "Subtext 0" - color tree color15 default # thread tree arrows Subtext 0 - color tilde color15 default # blank line padding Subtext 0 - color hdrdefault color13 default # default headers Pink - color header color13 default "^From:" - color header color13 default "^Subject:" - color quoted color15 default # Subtext 0 - color quoted1 color7 default # Subtext 1 - color quoted2 color8 default # Surface 2 - color quoted3 color0 default # Surface 1 - color quoted4 color0 default - color quoted5 color0 default - color body color2 default [\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+ # email addresses Green - color body color2 default (https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+ # URLs Green - color body color4 default (^|[[:space:]])\\*[^[:space:]]+\\*([[:space:]]|$) # *bold* text Blue - color body color4 default (^|[[:space:]])_[^[:space:]]+_([[:space:]]|$) # _underlined_ text Blue - color body color4 default (^|[[:space:]])/[^[:space:]]+/([[:space:]]|$) # /italic/ text Blue - color sidebar_flagged color1 default # Mailboxes with flagged mails are Red - color sidebar_new color10 default # Mailboxes with new mail are Green - ''; - home.file.".local/share/mc/skins/catppuccin.ini".source = ../../extra/mc-catppuccin.ini; - systemd.user.services.transparency = { - Unit = { - Description = "transparency"; - After = ["graphical-session-pre.target"]; - PartOf = ["graphical-session.target"]; - }; - Install.WantedBy = ["graphical-session.target"]; - Service = { - ExecStart = "${pkgs.python3.withPackages (ps: with ps; [i3ipc])}/bin/python ${./transparency.py}"; - }; - }; - - programs.zsh.initExtra = - if withNSFW - then '' - export CARGO_MOMMYS_MOODS=chill/ominous/thirsty/yikes - export CARGO_MOMMYS_LITTLE=racc/plush - export CARGO_MOMMYS_PARTS=shit/pee - export CARGO_MOMMYS_FUCKING="pet/toy/toilet/shitslut/septic tank" - '' - else '' - export CARGO_MOMMYS_MOODS=chill/ominous - export CARGO_MOMMYS_LITTLE=racc/plush - ''; -} diff --git a/config/programs/vim/config/after/ftplugin/toml.vim b/config/programs/vim/config/after/ftplugin/toml.vim deleted file mode 100644 index e69de29b..00000000 diff --git a/config/programs/vim/config/lua/config/which-key.lua b/config/programs/vim/config/lua/config/which-key.lua deleted file mode 100644 index 8eaab777..00000000 --- a/config/programs/vim/config/lua/config/which-key.lua +++ /dev/null @@ -1,60 +0,0 @@ -require("which-key").setup { - plugins = { - marks = true, -- shows a list of your marks on ' and ` - registers = true, -- shows your registers on " in NORMAL or in INSERT mode - spelling = { - enabled = true, -- enabling this will show WhichKey when pressing z= to select spelling suggestions - suggestions = 9, -- how many suggestions should be shown in the list? - }, - -- the presets plugin, adds help for a bunch of default keybindings in Neovim - -- No actual key bindings are created - presets = { - operators = true, -- adds help for operators like d, y, ... and registers them for motion / text object completion - motions = true, -- adds help for motions - text_objects = true, -- help for text objects triggered after entering an operator - windows = true, -- default bindings on - nav = true, -- misc bindings to work with windows - z = true, -- bindings for folds, spelling and others prefixed with z - g = true, -- bindings for prefixed with g - }, - }, - -- add operators that will trigger motion and text object completion - -- to enable all native operators, set the preset / operators plugin above - operators = { gc = "Comments" }, - key_labels = { - -- override the label used to display some keys. It doesn't effect WK in any other way. - -- For example: - -- [""] = "SPC", - -- [""] = "RET", - -- [""] = "TAB", - }, - icons = { - breadcrumb = "»", -- symbol used in the command line area that shows your active key combo - separator = "➜", -- symbol used between a key and it's label - group = "+", -- symbol prepended to a group - }, - window = { - border = "none", -- none, single, double, shadow - position = "bottom", -- bottom, top - margin = { 0, 0, 0, 0 }, -- extra window margin [top, right, bottom, left] - padding = { 1, 0, 1, 0 }, -- extra window padding [top, right, bottom, left] - }, - layout = { - height = { min = 1, max = 25 }, -- min and max height of the columns - width = { min = 20, max = 50 }, -- min and max width of the columns - spacing = 1, -- spacing between columns - align = "center", -- align columns left, center or right - }, - ignore_missing = false, -- enable this to hide mappings for which you didn't specify a label - hidden = { "", "", "", "", "call", "lua", "^:", "^ " }, -- hide mapping boilerplate - show_help = true, -- show help message on the command line when the popup is visible - triggers = "auto", -- automatically setup triggers - -- triggers = {""} -- or specify a list manually - - triggers_blacklist = { - -- list of mode / prefixes that should never be hooked by WhichKey - -- this is mostly relevant for key maps that start with a native binding - -- most people should not need to change this - n = { "o", "O" }, - }, -} \ No newline at end of file diff --git a/config/programs/virtualbox.nix b/config/programs/virtualbox.nix deleted file mode 100644 index 7834c55b..00000000 --- a/config/programs/virtualbox.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ - virtualisation.virtualbox.host.enable = true; - users.extraGroups.vboxusers.members = ["darkkirb"]; -} diff --git a/config/programs/vscode/default.nix b/config/programs/vscode/default.nix deleted file mode 100644 index 6b02a3f8..00000000 --- a/config/programs/vscode/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - pkgs, - nixpkgs, - lib, - nixos-vscode-server, - ... -}: let - x86_64-linux-pkgs = import nixpkgs { - system = "x86_64-linux"; - config.allowUnfree = true; - }; -in { - imports = [ - "${nixos-vscode-server}/modules/vscode-server/home.nix" - ]; - programs.vscode = { - enable = true; - extensions = with x86_64-linux-pkgs.vscode-extensions; [ - ]; - }; - services.vscode-server.enable = true; -} diff --git a/config/programs/wl-clipboard.nix b/config/programs/wl-clipboard.nix deleted file mode 100644 index d02c3b20..00000000 --- a/config/programs/wl-clipboard.nix +++ /dev/null @@ -1,13 +0,0 @@ -{pkgs, ...}: { - systemd.user.services.wl-clipboard = { - Unit = { - Description = "wl-clipboard"; - After = ["graphical-session-pre.target"]; - PartOf = ["graphical-session.target"]; - }; - Install.WantedBy = ["graphical-session.target"]; - Service = { - ExecStart = "${pkgs.wl-clipboard}/bin/wl-paste --watch ${pkgs.clipman}/bin/clipman store --no-persist"; - }; - }; -} diff --git a/config/programs/yubikey.nix b/config/programs/yubikey.nix deleted file mode 100644 index 65019b6d..00000000 --- a/config/programs/yubikey.nix +++ /dev/null @@ -1,5 +0,0 @@ -{pkgs, ...}: { - home.packages = with pkgs; [ - yubikey-manager-qt - ]; -} diff --git a/config/programs/zk.nix b/config/programs/zk.nix deleted file mode 100644 index 537bdc76..00000000 --- a/config/programs/zk.nix +++ /dev/null @@ -1,3 +0,0 @@ -{pkgs, ...}: { - home.packages = [pkgs.zk pkgs.obsidian]; -} diff --git a/config/programs/zoom.nix b/config/programs/zoom.nix deleted file mode 100644 index bed5840e..00000000 --- a/config/programs/zoom.nix +++ /dev/null @@ -1,8 +0,0 @@ -{nixpkgs, ...}: let - x86_64-linux-pkgs = import nixpkgs { - system = "x86_64-linux"; - config.allowUnfree = true; - }; -in { - home.packages = [x86_64-linux-pkgs.zoom-us]; -} diff --git a/config/programs/zsh.nix b/config/programs/zsh.nix deleted file mode 100644 index cf2bbe9a..00000000 --- a/config/programs/zsh.nix +++ /dev/null @@ -1,19 +0,0 @@ -desktop: _: { - programs = { - zsh = { - enable = true; - enableAutosuggestions = true; - enableCompletion = true; - enableVteIntegration = desktop; - autocd = true; - loginExtra = - if desktop - then '' - if [[ -z "$DISPLAY" ]] && [[ $(tty) = "/dev/tty1" ]]; then - exec sway - fi - '' - else ""; - }; - }; -} diff --git a/config/rainbow-resort.nix b/config/rainbow-resort.nix deleted file mode 100644 index 4db22e12..00000000 --- a/config/rainbow-resort.nix +++ /dev/null @@ -1,118 +0,0 @@ -{ - config, - pkgs, - modulesPath, - lib, - nixos-hardware, - ... -}: { - networking.hostName = "rainbow-resort"; - networking.hostId = "776736c6"; - - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - ./systemd-boot.nix - ./desktop.nix - ./services/tpm2.nix - nixos-hardware.nixosModules.common-cpu-amd - nixos-hardware.nixosModules.common-gpu-amd - nixos-hardware.nixosModules.common-pc-ssd - ./users/remote-build.nix - #./services/kubernetes.nix - ./services/forgejo-runner.nix - ./services/postgres.nix - ]; - hardware.cpu.amd.updateMicrocode = true; - boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" "sr_mod" "k10temp"]; - boot.initrd.kernelModules = ["amdgpu"]; - boot.kernelModules = ["kvm-amd" "i2c-dev" "i2c-piix4"]; - boot.extraModulePackages = [ - config.boot.kernelPackages.zenpower - ]; - services.hardware.openrgb = { - enable = true; - package = pkgs.openrgb-with-all-plugins; - motherboard = "amd"; - }; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/23690ff2-7a65-431e-a6ee-fea0878e0bb1"; - fsType = "btrfs"; - options = ["compress=zstd"]; - }; - - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/B6BA-BE40"; - fsType = "vfat"; - }; - - services.btrfs.autoScrub = { - enable = true; - fileSystems = ["/"]; - }; - services.snapper.configs.main = { - SUBVOLUME = "/"; - TIMELINE_LIMIT_HOURLY = 5; - TIMELINE_LIMIT_DAILY = 7; - TIMELINE_LIMIT_WEEKLY = 4; - TIMELINE_LIMIT_MONTHLY = 12; - TIMELINE_LIMIT_YEARLY = 0; - }; - - services.beesd.filesystems.root = { - spec = "/"; - hashTableSizeMB = 2048; - verbosity = "crit"; - extraOptions = ["--loadavg-target" "5.0"]; - }; - - networking.interfaces.enp14s0.useDHCP = true; - - system.stateVersion = "23.11"; - - services.xserver.videoDrivers = ["amdgpu"]; - - nix.settings.cores = 16; - boot.binfmt.emulatedSystems = [ - "armv7l-linux" - "powerpc-linux" - "powerpc64-linux" - "powerpc64le-linux" - "wasm32-wasi" - "riscv32-linux" - "riscv64-linux" - ]; - hardware.enableRedistributableFirmware = true; - nix.daemonCPUSchedPolicy = "idle"; - nix.daemonIOSchedClass = "idle"; - - nix.settings.system-features = [ - "kvm" - "nixos-test" - "big-parallel" - "benchmark" - "gccarch-znver4" - "gccarch-znver3" - "gccarch-znver2" - "gccarch-znver1" - "gccarch-skylake" - "gccarch-skylake-avx512" - "ca-derivations" - ]; - - services.tailscale.useRoutingFeatures = "client"; - home-manager.users.darkkirb._module.args.withNSFW = lib.mkForce true; - services.prometheus.exporters.node.enabledCollectors = ["drm"]; - services.k3s.role = lib.mkForce "agent"; - - services.ollama = { - enable = true; # broken. lol - acceleration = "rocm"; - # Thank you amd for not supporting 11.0.1 - environmentVariables.HCC_AMDGPU_TARGET = "gfx1100"; - rocmOverrideGfx = "11.0.0"; - }; - services.joycond.enable = true; - hardware.bluetooth.enable = true; - services.blueman.enable = true; -} diff --git a/config/rpi2.nix b/config/rpi2.nix deleted file mode 100644 index a1088eee..00000000 --- a/config/rpi2.nix +++ /dev/null @@ -1,15 +0,0 @@ -_: { - networking.hostName = "rpi2"; - networking.hostId = "29d7b964"; - # NixOS wants to enable GRUB by default - boot.loader.grub.enable = false; - # Enables the generation of /boot/extlinux/extlinux.conf - boot.loader.generic-extlinux-compatible.enable = true; - fileSystems."/" = { - device = "/dev/disk/by-label/NIXOS_SD"; - fsType = "ext4"; - }; - system.stateVersion = "21.11"; - home-manager.users.darkkirb = import ./home-manager/darkkirb.nix false; - nix.settings.cores = 4; -} diff --git a/config/server.nix b/config/server.nix deleted file mode 100644 index 5152b700..00000000 --- a/config/server.nix +++ /dev/null @@ -1,7 +0,0 @@ -# Configuration unique to servers -{pkgs, ...}: { - imports = [ - ./services/caddy - ./services/acme.nix - ]; -} diff --git a/config/services/acme.nix b/config/services/acme.nix deleted file mode 100644 index a9f39b94..00000000 --- a/config/services/acme.nix +++ /dev/null @@ -1,40 +0,0 @@ -{config, ...}: { - security.acme = { - acceptTerms = true; - defaults = { - email = "lotte@chir.rs"; - dnsProvider = "rfc2136"; - credentialsFile = "/run/secrets/security/acme/dns"; - }; - certs."darkkirb.de" = { - domain = "*.darkkirb.de"; - extraDomainNames = ["darkkirb.de"]; - dnsProvider = "gcloud"; - credentialsFile = config.sops.secrets."security/acme/gcloud".path; - dnsResolver = "1.1.1.1:53"; - }; - certs."chir.rs" = { - domain = "*.chir.rs"; - extraDomainNames = ["chir.rs"]; - }; - certs."int.chir.rs" = { - domain = "*.int.chir.rs"; - }; - certs."shitallover.me" = { - domain = "*.shitallover.me"; - extraDomainNames = ["shitallover.me"]; - dnsProvider = "gcloud"; - credentialsFile = config.sops.secrets."security/acme/gcloud".path; - dnsResolver = "1.1.1.1:53"; - }; - certs."miifox.net" = { - dnsProvider = "cloudflare"; - credentialsFile = "/run/secrets/security/acme/cloudflare"; - dnsResolver = "1.1.1.1:53"; - }; - }; - sops.secrets."security/acme/dns" = {}; - sops.secrets."security/acme/cloudflare" = {}; - sops.secrets."security/acme/gcloud" = {}; - sops.secrets."security/acme/gcloud.json".owner = "acme"; -} diff --git a/config/services/akkoma/default.nix b/config/services/akkoma/default.nix deleted file mode 100644 index 1606cca9..00000000 --- a/config/services/akkoma/default.nix +++ /dev/null @@ -1,334 +0,0 @@ -{ - pkgs, - config, - system, - akkoma, - admin-fe, - akkoma-fe, - ... -}: let - purge_url_script = pkgs.writeScript "purge-url" '' - access_key=$(cat ${config.sops.secrets."services/bunny-key".path}) - for url in $@; do - url=$(echo $url | ${pkgs.python3}/bin/python3 -c "import sys; import urllib.parse; print(urllib.parse.quote(sys.stdin.read().strip()))") - ${pkgs.curl}/bin/curl -H "Authorization: Bearer $access_key" -X POST "https://api.bunny.net/purge?url=$url&async=false" - done - ''; - emoji_set_names = [ - "volpeon-blobfox-flip" - "volpeon-blobfox" - "volpeon-bunhd-flip" - "volpeon-bunhd" - "volpeon-drgn" - "volpeon-fox" - "volpeon-raccoon" - "volpeon-vlpn" - "lotte" - "caro" - "volpeon-neofox" - "volpeon-neocat" - "rosaflags" - "volpeon-floof" - "raccoon" - ]; - emoji_sets = builtins.listToAttrs (map (name: { - inherit name; - value = "${pkgs."emoji-${name}"}"; - }) - emoji_set_names); - copy_emoji_set = name: '' - mkdir -p $out/emoji/${name} - lndir ${emoji_sets.${name}} $out/emoji/${name} - ''; - fedibird_fe = pkgs.fetchzip { - url = "https://akkoma-updates.s3-website.fr-par.scw.cloud/frontend/akkoma/fedibird-fe.zip"; - sha256 = "sha256-hUp8XAQInWB3BpTrwsTV36xNwxs6fK01fFAd4FBwn4U="; - }; - static_dir = pkgs.stdenvNoCC.mkDerivation { - name = "akkoma-static"; - src = pkgs.emptyDirectory; - nativeBuildInputs = with pkgs; [xorg.lndir]; - akkoma_fe = akkoma-fe.packages.${system}.akkoma-fe; - akkoma_admin_fe = admin-fe.packages.${system}.admin-fe; - inherit fedibird_fe; - tos = ./terms-of-service.html; - dontUnpack = false; - installPhase = '' - mkdir -p $out/frontends/pleroma-fe/stable - lndir $akkoma_fe $out/frontends/pleroma-fe/stable - mkdir -p $out/frontends/admin-fe/stable - lndir $akkoma_admin_fe $out/frontends/admin-fe/stable - mkdir -p $out/frontends/fedibird-fe/akkoma - lndir $fedibird_fe $out/frontends/fedibird-fe/akkoma - ${toString (map copy_emoji_set emoji_set_names)} - mkdir $out/emoji/misc - ln -s ${./therian.png} $out/emoji/misc/therian.png - mkdir $out/static - cp $tos $out/static/terms-of-service.html - ''; - }; - ec = pkgs.formats.elixirConf {}; - akkconfig = ec.generate "config.exs" (with ec.lib; { - ":pleroma" = { - "Pleroma.Upload" = { - uploader = mkRaw "Pleroma.Uploaders.S3"; - filters = map (v: mkRaw ("Pleroma.Upload.Filter." + v)) ["Mogrify" "Dedupe" "AnonymizeFilename"]; - base_url = "https://mastodon-assets.chir.rs/"; - }; - "Pleroma.Uploaders.S3" = { - bucket = "mastodon-assets-chir-rs"; - truncated_namespace = ""; - }; - "Pleroma.Upload.Filter.Mogrify" = { - args = ["auto-orient" "strip"]; - }; - ":instance" = { - name = "Raccoon Noises"; - email = "lotte@chir.rs"; - notify_email = "akko@chir.rs"; - description = "Small Akkoma Instance"; - limit = 58913; - description_limit = 58913; - upload_limit = 256 * 1024 * 1024; - languages = ["en" "tok"]; - registrations_open = true; - invites_enabled = true; - account_activation_required = true; - account_approval_required = true; - static_dir = "${static_dir}"; - max_pinned_statuses = 10; - attachment_links = true; - max_report_comment_size = 58913; - safe_dm_mentions = true; - healthcheck = true; - user_bio_length = 58913; - user_name_length = 621; - max_account_fields = 69; - max_remote_account_fields = 621; - account_field_name_length = 621; - account_field_value_length = 58913; - registration_reason_length = 621; - external_user_synchronization = true; - }; - ":markup" = { - allow_headings = true; - allow_tables = true; - allow_fonts = true; - }; - ":frontend_configurations" = { - pleroma_fe = mkMap { - webPushNotifications = true; - }; - }; - ":activitypub" = { - unfollow_blocked = false; - outgoing_blocks = false; - blockers_visible = false; - deny_follow_blocked = true; - sign_object_fetches = true; - authorized_fetch_mode = true; - }; - ":mrf_hellthread" = { - delist_threshold = 8; - }; - ":mrf_keyword" = { - reject = [ - "usdtenm.com" - (mkRaw "~r/Hi \\w+! New account: .* Do not share with anyone, official website:/i") - "dogeai.farm" - "ARB Doge" - "new meme token created by the latest neural network" - (mkRaw "~r/dogecoin.*airdrop/i") - (mkRaw "~r/airdrop.*dogecoin/i") - ]; - }; - ":mrf_simple" = let - processMap = m: map (k: mkTuple [k m.${k}]) (builtins.attrNames m); - in { - reject = processMap { - "qoto.org" = "Freeze Peach; Admin harasses other server admins; sends unsolicited emails"; - "poa.st" = "Hosting neonazis"; - "kiwifarms.cc" = "Targeted Harassment"; - "pmth.us" = "Harassment"; - "nicecrew.digital" = "TERF Instance"; - "freespeechextremist.com" = "Freeze Peach"; - "ryona.agency" = "Freeze Peach"; - "howlr.me" = "Run by verified kiwifarms user"; - "rdrama.cc" = "smells like Kiwifarms shit"; - "xhais.love" = "Zoophile instance"; - "beefyboys.win" = "freeze peach; hosts neonazis"; - "bae.st" = "freeze peach"; - "moth.zone" = "racism/antiblackness; owner self-admitted pedophile"; - "feral.cafe" = "Zoophilia"; - "disqordia.space" = "No snooping!"; - "mastodon.cloud" = "Corporate instance; Owner engaged in scams"; - "mstdn.jp" = "Corporate instance; Owner engaged in scams"; - "pawoo.net" = "Corporate instance; Owner engaged in scams"; - "activitypub-proxy.cf" = "Block circumvention tool"; - "mapsupport.de" = "Pedophile instance"; - "pedo.school" = "Pedophile instance"; - "baraag.net" = "porn involving (fictional) underage characters"; - "eientei.org" = "fash"; - "threads.net" = "there is so much wrong with facebook it would just fill up the whole page"; - }; - followers_only = processMap { - "bird.makeup" = "Birdsite scraper with removed limitations and privacy considerations"; - }; - federated_timeline_removal = processMap { - "mastodon.online" = "Too large to be moderated well"; - "tumblr.com" = "Too large to be moderated well, corporate instance"; - "vivaldi.net" = "Corporate instance; Registers nonconsensual accounts for Vivaldi Sync users"; - "mastodon.social" = "Too large to be moderated well"; - }; - }; - ":mrf" = { - policies = map (v: mkRaw ("Pleroma.Web.ActivityPub.MRF." + v)) ["SimplePolicy" "EnsureRePrepended" "ForceBotUnlistedPolicy" "AntiFollowbotPolicy" "ObjectAgePolicy" "KeywordPolicy" "TagPolicy" "RequireImageDescription" "HellthreadPolicy"]; - transparency = true; - }; - ":http_security" = { - enabled = true; - sts = true; - referrer_policy = "no-referrer"; - }; - ":frontends" = { - primary = mkMap { - name = "pleroma-fe"; - ref = "stable"; - }; - admin = mkMap { - name = "admin-fe"; - ref = "stable"; - }; - mastodon = mkMap { - name = "fedibird-fe"; - ref = "akkoma"; - }; - }; - ":static_fe".enabled = true; - ":media_proxy" = { - enabled = true; - base_url = "https://mediaproxy.chir.rs"; - proxy_opts = { - redirect_on_failure = true; - }; - }; - ":media_preview_proxy" = { - enabled = true; - }; - "Pleroma.Repo" = { - adapter = mkRaw "Ecto.Adapters.Postgres"; - database = "akkoma"; - pool_size = 10; - socket_dir = "/run/postgresql"; - prepare = mkAtom ":named"; - parameters.plan_cache_mode = "force_custom_plan"; - }; - "Pleroma.Web.Endpoint" = { - url = { - host = "akko.chir.rs"; - port = 443; - scheme = "https"; - }; - secure_cookie_flag = true; - }; - "Pleroma.Emails.Mailer" = { - enabled = true; - adapter = mkRaw "Swoosh.Adapters.SMTP"; - relay = "mail.chir.rs"; - username = "akko@chir.rs"; - port = "465"; - ssl = true; - auth = mkAtom ":always"; - }; - "Pleroma.Emails.NewUsersDigestEmail" = { - enabled = true; - }; - ":database".rum_enabled = true; - ":emoji" = { - shortcode_globs = [ - "/emoji/volpeon-blobfox-flip/*.png" - "/emoji/volpeon-blobfox/*.png" - "/emoji/volpeon-bunhd-flip/*.png" - "/emoji/volpeon-bunhd/*.png" - "/emoji/volpeon-drgn/*.png" - "/emoji/volpeon-fox/*.png" - "/emoji/volpeon-raccoon/*.png" - "/emoji/volpeon-vlpn/*.png" - "/emoji/lotte/*.png" - "/emoji/caro/*.png" - "/emoji/misc/*.png" - ]; - groups = { - "BlobfoxFlip" = "/emoji/volpeon-blobfox-flip/*.png"; - "Blobfox" = "/emoji/volpeon-blobfox/*.png"; - "BunhdFlip" = "/emoji/volpeon-bunhd-flip/*.png"; - "Bunhd" = "/emoji/volpeon-bunhd/*.png"; - "Drgn" = "/emoji/volpeon-drgn/*.png"; - "Fox" = "/emoji/volpeon-fox/*.png"; - "Raccoon" = "/emoji/volpeon-raccoon/*.png"; - "Vlpn" = "/emoji/volpeon-vlpn/*.png"; - "Lotte" = "/emoji/lotte/*.png"; - "Caroline" = "/emoji/caro/*.png"; - "Misc" = "/emoji/misc/*.png"; - }; - }; - "Pleroma.Captcha" = { - enabled = true; - method = mkRaw "Pleroma.Captcha.Kocaptcha"; - }; - }; - ":web_push_encryption".":vapid_details".subject = "lotte@chir.rs"; - }); -in { - services.pleroma = { - enable = true; - package = akkoma.packages.${system}.akkoma; - configs = [ - '' - import Config - import_config "${akkconfig}" - '' - ]; - user = "akkoma"; - group = "akkoma"; - secretConfigFile = config.sops.secrets."services/akkoma.exs".path; - }; - systemd.services.pleroma.path = with pkgs; [exiftool imagemagick ffmpeg]; - services.postgresql.ensureDatabases = ["akkoma"]; - sops.secrets."services/akkoma.exs" = {owner = "akkoma";}; - sops.secrets."services/bunny-key".owner = "akkoma"; - services.caddy.virtualHosts."akko.chir.rs" = { - useACMEHost = "chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - handle /media_attachments/* { - redir https://mastodon-assets.chir.rs{uri} permanent - } - @isbunny { - header Via BunnyCDN - } - route /media/* { - reverse_proxy @isbunny { - header_down Content-Security-Policy "script-src 'none';" - to http://127.0.0.1:4000 - } - respond "Use the cdn" 403 - } - route /proxy/* { - reverse_proxy @isbunny { - header_down Content-Security-Policy "script-src 'none';" - to http://127.0.0.1:4000 - } - respond "Use the cdn" 403 - } - route { - reverse_proxy { - to http://127.0.0.1:4000 - } - } - ''; - }; - - services.postgresql.extraPlugins = with config.services.postgresql.package.pkgs; [rum]; -} diff --git a/config/services/akkoma/terms-of-service.html b/config/services/akkoma/terms-of-service.html deleted file mode 100644 index c1f09554..00000000 --- a/config/services/akkoma/terms-of-service.html +++ /dev/null @@ -1,139 +0,0 @@ -

Rules

-
    -
  • Hate against minority groups is forbidden. This includes racism, sexism, ableism, xenophobia, homophobia, - transphobia,, antisemitism, islamophobia, queer exclusionism, etc.
  • -
  • Content that is illegal under German Law is not permitted. This especially includes the promotion and - dissemination of any Nazi symbolism and ideology, except for education, reporting on past or current events, and - antifascist art.
  • -
  • Please add content description to all media that you post. This instance automatically adds a CW if it is missing. - If you are unable to create one, you can request one via the #DescriptionWanted hashtag
  • -
  • Be considerate. Add content warnings for NSFW Content, common phobias, overly long posts, controversial subjects, - etc. Please try to avoid flashing images and quickly moving text inside of your posts.
  • -
  • NSFW content is generally allowed, but all NSFW content must be properly marked as such, including kinks. Profile - images, names, bios, etc must be fully SFW, or they are subject to removal
  • -
  • Bots are allowed, however they must be marked as such and must make unlisted posts, may only @ or interact with - posts of other users iff they have prompted the bot, or have given explicit permission to do so. Additionally, bots - may not post more than 10 posts in a 60 minute interval without interaction.
  • -
- -We highly encourage reporting posts violating our rules, even if they are not on our instance. Your reports will not be -ignored. For transparency we publish local moderation decisions for users on this server, and federation moderation -decisions on the #FediBlock hashtag.
- -We do the following moderation automatically: - -
    -
  • Unlisting of bot posts
  • -
  • Adding of CWs to unlabeled media
  • -
  • Modification or removal of posts that cause issues with certain clients
  • -
- -

Privacy Policy

- -

What data do we collect?

-We collect the following data: - -
    -
  • Email Addresses from local users
  • -
  • Posts and Media uploaded by local users
  • -
  • User Profiles and Posts by certain remote users
  • -
- -

How do we collect your data?

- -If you are a user of this instance, we collect and process your data when you sign up for or use interactive features (e.g. Posting) of the Website.
- -If you are not a local user, we collect your data over the following ways: - -
    -
  • One of our users has requested to follow your account, and you have accepted the request.
  • -
  • One of your posts has been interacted with by a remote account, that a local account has followed. This includes Replies, Repeats, Quotes, Likes, Emoji Reactions, and @-Mentions.
  • -
  • You have requested that your post is shown to one of our users (i.e. through @-Mentions or DMs)
  • -
  • User Interaction: One of our users has explicitely looked up your profile or one of your posts on this instance, for example to interact with it.
  • -
  • You have posted a public post on an instance that participates in the awoo.today relay. -
- -

How will we use your data?

- -We collect your data so that we can: - -
    -
  • Store and display your posts to our local users
  • -
  • Display public posts to anonymous users
  • -
  • Deliver your public, unlisted, and private posts to your followers
  • -
  • Deliver direct messages to the recipient
  • -
  • Allow our users to follow you
  • -
  • Allow our users to interact with your posts
  • -
- -As members of the awoo.today relay, we will send posts that you have marked as “public” to all of the other instances participating in the relay. - -

How do we store your data?

- -We store your post, profile and account data securely in the Hetzner Datacenter in Falkenstein, Germany. See their DIN ISO/IEC 27001 certification -Media is stored on Backblaze B2
- -We employ technical security measures to avoid exposure to sensitive data.
- -We also store backups of post, profile, and account data in multiple locations, in an encrypted form, on our server near Chemnitz, Germany, as well as on Backblaze B2.
-For technical reasons it is not possible modify these backups to remove your data. If this is a concern, please contact us. - -

What are your data protection rights?

- -We want to make sure that you are aware of your data protection rights. Every user is entitled to the following:
- -The right to access — You can request a copy of the data we have about you. This may require a short verification for remote users. Local users can do so in the settings under Export/Import
- -The right to rectification — You can request us to correct any information you believe is inaccurate. You also have the right to request us to complete the information you believe is inaccurate.
- -The right to erasure — You can request us to erase the data we have about you.
- -The right to restrict to processing — You can restrict us from transmitting your posts to other servers by setting your post visiblity to “Local”. Remote users can also restrict processing of certain posts, by setting its visiblity to “Unlisted” or “Private”.
- -The right to object to processing — As a remote user, you can object to further processing of posts and profile data by blocking this domain.
- -The right to data portability — You can at any point move to other instances. Due to technical restrictions, it is currently not possible to automatically transfer the users you follow and posts to your new account.
- -If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, or need help with the included tools, please contact us at our email privacy@chir.rs - -

Cookies

- -Cookies are text files placed on your computer to collect standard Internet log information and visitor behavior information. When you visit our websites, we may collect information from you automatically through cookies or similar technology
- -For further information, visit allaboutcookies.org. - -

How do we use cookies?

- -We use cookies for keeping you logged in. Additionally we store certain configuration in cookies, however these cookies are never transmitted to anyone. - -

How to manage cookies

- -You can tell your browser to not accept cookies, or tell it to remove cookies this website has stored on your device. Please consult your browser’s documentation on instructions on how to do that. - -

Privacy policies of other websites

- -This site contains many links to other websites. This privacy policy only applies to this website. Please consult the privacy policy of these remote sites before entering any personal information. - -

Changes to our privacy policy

- -We may make occasional adjustments to this privacy policy. This policy was last updated on 2022-12-30. - -

How to contact us

- -If you have any questions about this policy, the data we hold about you, or want to exercise one of your data protection rights, please contact us at: privacy@chir.rs - -

How to contact the appropriate authority

- -Should you wish to report a complaint, or if you feel that we haven’t addressed your concern in a satisfactory manner, you may contact the Sächsische Datenschutzbehörde. - -
- -We also offer the Mastodon Web UI. Keep in mind that some features are missing, -like emoji reactions, quoting, and JPEG XL. - -

Art Credit

- - \ No newline at end of file diff --git a/config/services/akkoma/therian.png b/config/services/akkoma/therian.png deleted file mode 100644 index 2a0e99fb..00000000 Binary files a/config/services/akkoma/therian.png and /dev/null differ diff --git a/config/services/atticd.nix b/config/services/atticd.nix deleted file mode 100644 index 543c7899..00000000 --- a/config/services/atticd.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ - attic, - config, - lib, - system, - pkgs, - ... -}: { - disabledModules = ["services/networking/atticd.nix"]; - imports = [attic.nixosModules.atticd]; - services.atticd = { - enable = true; - package = attic.packages.${system}.attic-server; - credentialsFile = config.sops.secrets."services/attic".path; - settings = { - listen = "[::1]:57448"; - allowed-hosts = ["attic.chir.rs"]; - api-endpoint = "https://attic.chir.rs/"; - database.url = "postgresql:///attic?sslmode=disable&host=/run/postgresql"; - storage = { - type = "s3"; - region = "us-east-1"; - bucket = "attic-chir-rs"; - endpoint = "https://ams1.vultrobjects.com/"; - }; - compression = { - type = "zstd"; - level = 12; - }; - chunking = { - nar-size-threshold = 131072; - min-size = 65536; - avg-size = 131072; - max-size = 262144; - }; - garbage-collection.default-retention-period = "3 months"; - }; - }; - sops.secrets."services/attic" = {}; - services.postgresql.ensureDatabases = [ - "attic" - ]; - services.caddy.virtualHosts."attic.chir.rs" = { - useACMEHost = "chir.rs"; - logFormat = lib.mkForce ""; - extraConfig = '' - import baseConfig - - reverse_proxy http://[::1]:57448 { - trusted_proxies private_ranges - } - ''; - }; -} diff --git a/config/services/caddy/config.dhall b/config/services/caddy/config.dhall deleted file mode 100644 index 7cf3a7c6..00000000 --- a/config/services/caddy/config.dhall +++ /dev/null @@ -1,44 +0,0 @@ -λ(host: Text) → - --- TODO: Deduplicate with the nix code - -{ - -- Common config - caddyConfig = { - admin = { - disabled = True - }, - storage = { - module = "file_system", - root = "/var/lib/caddy" - }, - apps = { - http = ./http.dhall host - } - }, - nixosConfig = { - systemd = { - tmpfiles = { - rules = [ - "d '/var/lib/caddy' 0750 caddy acme - -" - ] - } - }, - networking = { - firewall = { - allowedTCPPorts = [ 80, 443 ], - allowedUDPPorts = [ 443 ] - } - }, - security = { - acme = { - certs = let value = { reloadServices = ["caddy.service"] } in { - `darkkirb.de` = value, - `chir.rs` = value, - `int.chir.rs` = value, - `miifox.net` = value - } - } - } - } -} diff --git a/config/services/caddy/default.nix b/config/services/caddy/default.nix deleted file mode 100644 index 843b9bfc..00000000 --- a/config/services/caddy/default.nix +++ /dev/null @@ -1,47 +0,0 @@ -{lib, ...}: { - services.caddy = { - enable = true; - group = "acme"; - globalConfig = '' - admin off - storage file_system /var/lib/caddy - auto_https disable_certs - ''; - logFormat = lib.mkForce '' - output file /var/log/caddy/access.log { - roll_keep_for 7d - } - format filter { - wrap json - fields { - request>remote_addr ip_mask { - ipv4 0 - ipv6 0 - } - request>headers>Cf-Connecting-Ip ip_mask { - ipv4 0 - ipv6 0 - } - request>headers>X-Forwarded-For ip_mask { - ipv4 0 - ipv6 0 - } - } - } - ''; - extraConfig = '' - (baseConfig) { - encode { - gzip - zstd - # TODO: support for brotli - } - } - ''; - }; - systemd.tmpfiles.rules = [ - "d '/var/lib/caddy' 0750 caddy acme - -" - ]; - networking.firewall.allowedTCPPorts = [80 443]; - networking.firewall.allowedUDPPorts = [443]; -} diff --git a/config/services/caddy/http.dhall b/config/services/caddy/http.dhall deleted file mode 100644 index 44baa2ee..00000000 --- a/config/services/caddy/http.dhall +++ /dev/null @@ -1,3 +0,0 @@ -λ(host: Text) → { - -} diff --git a/config/services/chir-rs.dhall b/config/services/chir-rs.dhall deleted file mode 100644 index 80c703e0..00000000 --- a/config/services/chir-rs.dhall +++ /dev/null @@ -1,64 +0,0 @@ -λ ( secretsFile - : { staticDir : Text, connectionString : Text, signUpKey : Text - , nodeName : Text } - ) → - let SqliteConfig = - { Type = - { filename : Text - , walEnabled : Optional Bool - , fkEnabled : Optional Bool - , extraPragmas : Optional (List Text) - } - , default = - { walEnabled = None Bool - , fkEnabled = None Bool - , extraPragmas = None (List Text) - } - } - - let PostgresConfig = - { Type = - { connectionString : Text - , poolStripes : Natural - , poolIdleTimeout : Natural - } - , default = { poolStripes = 0, poolIdleTimeout = 300 } - } - - let LogLevel = - { Type = - < LogLevelDebug - | LogLevelInfo - | LogLevelWarn - | LogLevelError - | LogLevelOther : Text - > - } - - let Config = - { Type = - { listenPort : Natural - , database : PostgresConfig.Type - , databasePoolSize : Natural - , staticDir : Text - , logLevel : LogLevel.Type - , nodeName : Text - , signUpKey : Text - , rpId : Text - } - , default = - { databasePoolSize = 10 - , staticDir = "./static" - , logLevel = LogLevel.Type.LogLevelInfo - } - } - - in Config::{ - , listenPort = 62936 - , database = PostgresConfig::{ connectionString = secretsFile.connectionString } - , logLevel = LogLevel.Type.LogLevelInfo - , signUpKey = secretsFile.signUpKey - , rpId = "lotte-test.chir.rs" - , staticDir = secretsFile.staticDir - , nodeName = secretsFile.nodeName - } diff --git a/config/services/chir-rs.nix b/config/services/chir-rs.nix deleted file mode 100644 index 08495ddd..00000000 --- a/config/services/chir-rs.nix +++ /dev/null @@ -1,96 +0,0 @@ -{ - lib, - pkgs, - config, - chir-rs, - system, - ... -}: let - staticDir = pkgs.stdenvNoCC.mkDerivation { - name = "static"; - buildPhase = "true"; - src = pkgs.emptyDirectory; - installPhase = '' - mkdir $out - for f in ${chir-rs.packages.${system}.chir-rs-fe}/*; do - ln -sv $f $out - done - ln -sv ${chir-rs.packages.${system}.art-assets} $out/img - ''; - }; - auxCfg = pkgs.writeText "config.dhall" '' - ${./chir-rs.dhall} { - staticDir = "${staticDir}", - connectionString = "postgres://chir_rs:" ++ (${config.sops.secrets."services/chir-rs/database-password".path} as Text) ++ "@nixos-8gb-fsn1-1.int.chir.rs/chir_rs", - signUpKey = ${config.sops.secrets."services/chir-rs/signup-secret".path} as Text, - nodeName = "${config.networking.hostName}" - } - ''; -in { - systemd.services.chir-rs = { - enable = true; - wantedBy = ["multi-user.target"]; - after = ["network.target"]; - serviceConfig = { - Restart = "always"; - PrivateTmp = true; - WorkingDirectory = "/tmp"; - User = "chir-rs"; - CapabilityBoundingSet = [""]; - DeviceAllow = [""]; - LockPersonality = true; - MemoryDenyWriteExecute = true; - NoNewPrivileges = true; - PrivateDevices = true; - ProtectClock = true; - ProtectControlGroups = true; - ProtectHome = true; - ProtectHostname = true; - ProtectKernelLogs = true; - ProtectKernelModules = true; - ProtectKernelTunables = true; - ProtectSystem = "strict"; - RemoveIPC = true; - RestrictAddressFamilies = ["AF_INET" "AF_INET6"]; - RestrictNamespaces = true; - RestrictRealtime = true; - RestrictSUIDSGID = true; - SystemCallArchitectures = "native"; - UMask = "0077"; - ExecStart = '' - ${chir-rs.packages.${system}.chir-rs}/bin/chir-rs - ''; - }; - environment = { - CHIR_RS_CONFIG = "${auxCfg}"; - }; - }; - sops.secrets."services/chir-rs/database-password".owner = "chir-rs"; - sops.secrets."services/chir-rs/signup-secret".owner = "chir-rs"; - services.postgresql.ensureDatabases = [ - "chir_rs" - ]; - services.postgresql.ensureUsers = [ - { - name = "chir_rs"; - ensureDBOwnership = true; - } - ]; - services.caddy.virtualHosts."lotte-test.chir.rs" = { - useACMEHost = "chir.rs"; - logFormat = lib.mkForce ""; - extraConfig = '' - import baseConfig - - reverse_proxy http://127.0.0.1:62936 { - trusted_proxies private_ranges - } - ''; - }; - users.users.chir-rs = { - description = "Chir.rs domain server"; - isSystemUser = true; - group = "chir-rs"; - }; - users.groups.chir-rs = {}; -} diff --git a/config/services/cifs.nix b/config/services/cifs.nix deleted file mode 100644 index 63d4544d..00000000 --- a/config/services/cifs.nix +++ /dev/null @@ -1,5 +0,0 @@ -{pkgs, ...}: { - environment.systemPackages = [pkgs.cifs-utils pkgs.lxqt.lxqt-policykit]; - networking.firewall.extraCommands = ''iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns''; - services.gvfs.enable = true; -} diff --git a/config/services/cups.nix b/config/services/cups.nix deleted file mode 100644 index 8fe06596..00000000 --- a/config/services/cups.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - pkgs, - nixpkgs, - ... -}: { - services.printing = { - enable = true; - drivers = with pkgs; [ - brlaser - ]; - browsing = true; - listenAddresses = ["*:631"]; - allowFrom = ["all"]; - defaultShared = true; - extraConf = '' - ServerAlias * - ''; - }; - - services.avahi = { - enable = true; - publish.enable = true; - publish.userServices = true; - }; - - #imports = ["${nixpkgs}/nixos/modules/services/hardware/sane_extra_backends/brscan4.nix"]; - hardware.sane.enable = true; -} diff --git a/config/services/docker.nix b/config/services/docker.nix deleted file mode 100644 index 1c042400..00000000 --- a/config/services/docker.nix +++ /dev/null @@ -1,11 +0,0 @@ -_: { - virtualisation.docker = { - autoPrune = { - dates = "weekly"; - enable = true; - flags = ["--all"]; - }; - enable = true; - }; - users.users.darkkirb.extraGroups = ["docker"]; -} diff --git a/config/services/dovecot.nix b/config/services/dovecot.nix deleted file mode 100644 index 54ca43f4..00000000 --- a/config/services/dovecot.nix +++ /dev/null @@ -1,153 +0,0 @@ -{ - pkgs, - config, - ... -}: let - sieves = import ../../packages/sieves.nix pkgs; -in { - nixpkgs.overlays = [ - (curr: prev: { - dovecot = - (prev.dovecot.override { - withPgSQL = true; - }) - .overrideAttrs (super: { - doCheck = false; - doInstallCheck = false; - }); - }) - ]; - services.dovecot2 = { - enable = true; - enableImap = true; - enableLmtp = true; - enablePop3 = true; - enableQuota = true; - modules = [pkgs.dovecot_pigeonhole]; - mailGroup = "dovecot"; - mailUser = "dovecot"; - mailLocation = "maildir:/var/vmail/%d/%n"; - mailPlugins = { - globally.enable = [ - "old_stats" - ]; - perProtocol = { - imap.enable = [ - "imap_sieve" - ]; - lda.enable = [ - "sieve" - ]; - lmtp.enable = [ - "sieve" - ]; - }; - }; - mailboxes = { - Drafts = { - specialUse = "Drafts"; - auto = "subscribe"; - }; - Junk = { - specialUse = "Junk"; - auto = "subscribe"; - }; - Trash = { - specialUse = "Trash"; - auto = "subscribe"; - }; - Sent = { - specialUse = "Sent"; - auto = "subscribe"; - }; - "Sent Messages" = { - specialUse = "Sent"; - }; - "virtual/All" = { - specialUse = "All"; - auto = "subscribe"; - }; - }; - sslServerCert = "/var/lib/acme/chir.rs/cert.pem"; - sslServerKey = "/var/lib/acme/chir.rs/key.pem"; - extraConfig = '' - service old-stats { - unix_listener old-stats { - user = dovecot-exporter - group = dovecot-exporter - mode = 0660 - } - fifo_listener old-stats-mail { - mode = 0660 - user = dovecot - group = dovecot - } - fifo_listener old-stats-user { - mode = 0660 - user = dovecot - group = dovecot - } - } - plugin { - old_stats_refresh = 30 secs - old_stats_track_cmds = yes - } - plugin { - sieve_plugins = sieve_imapsieve sieve_extprograms - # From elsewhere to Spam folder or flag changed in Spam folder - imapsieve_mailbox1_name = Junk - imapsieve_mailbox1_causes = COPY FLAG - imapsieve_mailbox1_before = file:${sieves.report-spam}/report-spam.sieve - - # From Spam folder to elsewhere - imapsieve_mailbox2_name = * - imapsieve_mailbox2_from = Junk - imapsieve_mailbox2_causes = COPY - imapsieve_mailbox2_before = file:${sieves.report-ham}/report-ham.sieve - - sieve_pipe_bin_dir = /nix/store - - sieve_global_extensions = +vnd.dovecot.pipe - sieve = ${sieves.default}/default.sieve - } - disable_plaintext_auth = yes - auth_mechanisms = plain login - - passdb { - driver = sql - args = /run/secrets/services/dovecot/dovecot-sql.conf.ext - } - userdb { - driver = prefetch - } - userdb { - driver = sql - args = /run/secrets/services/dovecot/dovecot-sql.conf.ext - } - service auth { - unix_listener /run/dovecot2/auth { - mode = 0660 - user = postfix - group = postfix - } - } - first_valid_uid = 76 - last_valid_uid = 987 - ''; - user = "dovecot"; - group = "dovecot"; - }; - services.prometheus.exporters.dovecot = { - enable = true; - port = 35496; - }; - sops.secrets."services/dovecot/rspamd_password" = {owner = "dovecot";}; - sops.secrets."services/dovecot/dovecot-sql.conf.ext" = {owner = "dovecot";}; - networking.firewall.allowedTCPPorts = [ - 110 # POP3 - 143 # IMAP - 993 # IMAPS - 995 # POP3S - ]; - security.acme.certs."chir.rs".reloadServices = ["dovecot2.service"]; -} diff --git a/config/services/forgejo-runner.nix b/config/services/forgejo-runner.nix deleted file mode 100644 index a79fbd62..00000000 --- a/config/services/forgejo-runner.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - pkgs, - config, - ... -}: { - services.gitea-actions-runner = { - package = pkgs.forgejo-actions-runner; - instances.default = { - enable = true; - name = config.networking.hostName; - url = "https://git.chir.rs"; - # Obtaining the path to the runner token file may differ - tokenFile = config.sops.secrets."services/forgejo-runner".path; - labels = ["docker"]; - }; - instances.darkkirb = { - enable = true; - name = config.networking.hostName; - url = "https://git.chir.rs"; - # Obtaining the path to the runner token file may differ - tokenFile = config.sops.secrets."services/forgejo-runner-darkkirb".path; - labels = [ - "ubuntu-latest:docker://node:16-bullseye" - "ubuntu-22.04:docker://node:16-bullseye" - "ubuntu-20.04:docker://node:16-bullseye" - "ubuntu-18.04:docker://node:16-buster" - "docker" - ]; - }; - }; - sops.secrets."services/forgejo-runner" = {}; - sops.secrets."services/forgejo-runner-darkkirb" = {}; -} diff --git a/config/services/gitea.nix b/config/services/gitea.nix deleted file mode 100644 index 69f61c73..00000000 --- a/config/services/gitea.nix +++ /dev/null @@ -1,92 +0,0 @@ -{ - pkgs, - config, - ... -}: { - imports = [ - ../../modules/gitea.nix - ]; - services.gitea = { - package = pkgs.forgejo; - enable = true; - appName = "Lotte's Git"; - cookieSecure = true; - database = { - host = "localhost"; - name = "gitea"; - user = "gitea"; - type = "postgres"; - }; - domain = "git.chir.rs"; - httpAddress = "127.0.0.1"; - lfs.enable = true; - rootUrl = "https://git.chir.rs/"; - storageSecretFile = "/run/secrets/services/gitea"; - settings = rec { - storage = { - STORAGE_TYPE = "minio"; - MINIO_ENDPOINT = "ams1.vultrobjects.com"; - MINIO_ACCESS_KEY_ID = "X86D3HKJ3Y92IASK0XIG"; - MINIO_SECRET_ACCESS_KEY = "#storageSecret#"; - MINIO_BUCKET = "git-chir-rs"; - MINIO_USE_SSL = "true"; - }; - openid = { - ENABLE_OPENID_SIGNIN = true; - ENABLE_OPENID_SIGNUP = true; - }; - cache = { - ENABLED = config.services.redis.servers.gitea.enable; - ADAPTER = "redis"; - HOST = "redis://${config.services.redis.servers.gitea.bind}:${toString config.services.redis.servers.gitea.port}/0"; - }; - session = { - PROVIDER = "redis"; - PROVIDER_CONFIG = "redis://${config.services.redis.servers.gitea.bind}:${toString config.services.redis.servers.gitea.port}/1"; - }; - metrics = { - ENABLED = true; - ENABLED_ISSUE_BY_LABEL = true; - ENABLED_ISSUE_BY_REPOSITORY = true; - }; - queue = { - TYPE = "redis"; - CONN_STRING = "redis://${config.services.redis.servers.gitea.bind}:${toString config.services.redis.servers.gitea.port}/2"; - }; - packages.ENABLED = true; - federation.ENABLED = true; - "repository.signing" = { - SIGNING_KEY = "823566455E49DDC6AE5813048CA13817A54AAB38"; - SIGNING_NAME = "Gitea"; - SIGNING_EMAIL = "gitea@chir.rs"; - INITIAL_COMMIT = "always"; - WIKI = "always"; - CRUD_ACTIONS = "always"; - MERGES = "always"; - }; - git = { - HOME_PATH = "/var/lib/gitea"; - }; - }; - }; - - services.caddy.virtualHosts."git.chir.rs" = { - useACMEHost = "chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - - reverse_proxy http://${config.services.gitea.httpAddress}:${toString config.services.gitea.httpPort} - ''; - }; - - services.postgresql.ensureDatabases = ["gitea"]; - - services.redis.servers.gitea = { - enable = true; - bind = "127.0.0.1"; - databases = 3; - port = 6379; - }; - sops.secrets."services/gitea" = {owner = "gitea";}; -} diff --git a/config/services/grafana.nix b/config/services/grafana.nix deleted file mode 100644 index 5196aa26..00000000 --- a/config/services/grafana.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - lib, - config, - pkgs, - ... -}: { - services.grafana = { - enable = true; - domain = "grafana.int.chir.rs"; - port = 2342; - addr = "127.0.0.1"; - }; - - services.caddy.virtualHosts.${config.services.grafana.domain} = { - useACMEHost = "int.chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - - reverse_proxy http://127.0.0.1:${toString config.services.grafana.port} - ''; - }; -} diff --git a/config/services/heisenbridge.nix b/config/services/heisenbridge.nix deleted file mode 100644 index 4764e023..00000000 --- a/config/services/heisenbridge.nix +++ /dev/null @@ -1,9 +0,0 @@ -{...}: { - services.heisenbridge = { - port = 30435; - owner = "@lotte:chir.rs"; - homeserver = "https://matrix.int.chir.rs"; - enable = true; - }; - services.matrix-synapse.settings.app_service_config_files = ["/var/lib/heisenbridge/registration.yml"]; -} diff --git a/config/services/hydra.nix b/config/services/hydra.nix deleted file mode 100644 index 402a59d2..00000000 --- a/config/services/hydra.nix +++ /dev/null @@ -1,204 +0,0 @@ -{ - system, - attic, - lib, - config, - pkgs, - hydra, - ... -}: let - machines = pkgs.writeText "machines" '' - localhost armv7l-linux,powerpc-linux,powerpc64-linux,powerpc64le-linux,wasm32-wasi,x86_64-linux,i686-linux,riscv32-linux,riscv64-linux - 12 1 kvm,nixos-test,big-parallel,benchmark,gccarch-znver1,gccarch-skylake,ca-derivations - - build-aarch64 aarch64-linux,riscv32-linux,riscv64-linux - 4 1 nixos-test,benchmark,ca-derivations,gccarch-armv8-a,gccarch-armv8.1-a,gccarch-armv8.2-a,big-parallel - - build-riscv riscv64-linux,riscv32-linux - 4 2 nixos-test,benchmark,ca-derivations,gccarch-rv64gc_zba_zbb,gccarch-rv64gc_zba,gccarch-rv64gc_zbb,ccarch-rv64gc,gccarch-rv32gc_zba_zbb,gccarch-rv32gc_zba,gccarch-rv32gc_zbb,gccarch-rv32gc,big-parallel,native-riscv - - ''; - sshConfig = pkgs.writeText "ssh-config" '' - Host build-aarch64 - Port 22 - IdentitiesOnly yes - User remote-build - HostName instance-20221213-1915.int.chir.rs - IdentityFile /var/lib/hydra/queue-runner/.ssh/builder_id_ed25519 - Host build-nas - Port 22 - IdentitiesOnly yes - User remote-build - HostName nas.int.chir.rs - IdentityFile /var/lib/hydra/queue-runner/.ssh/builder_id_ed25519 - Host build-rainbow-resort - Port 22 - IdentitiesOnly yes - User remote-build - HostName rainbow-resort.int.chir.rs - IdentityFile /var/lib/hydra/queue-runner/.ssh/builder_id_ed25519 - Host build-riscv - Port 22 - IdentitiesOnly yes - User remote-build - HostName vf2.int.chir.rs - IdentityFile /var/lib/hydra/queue-runner/.ssh/builder_id_ed25519 - - Host * - ForwardAgent no - Compression no - ServerAliveInterval 0 - ServerAliveCountMax 3 - HashKnownHosts no - UserKnownHostsFile ~/.ssh/known_hosts - ControlMaster auto - ControlPath ~/.ssh/master-%r@%n:%p - ControlPersist 10m - ''; -in { - imports = [ - ./postgres.nix - ../../modules/hydra.nix - hydra.nixosModules.hydra - ]; - nixpkgs.overlays = [ - hydra.overlays.default - ]; - services.hydra-dev = { - enable = true; - package = hydra.packages.${system}.hydra.overrideAttrs (super: { - doCheck = false; - doInstallCheck = false; - patches = - super.patches - or [] - ++ [ - ./hydra/0001-add-gitea-pulls.patch - ./hydra/0002-unlimit-output.patch - ./hydra/0003-remove-pr-number-from-github-job-name.patch - ./hydra/0004-use-pulls-instead-of-issues.patch - ./hydra/0005-only-list-open-prs.patch - ./hydra/0006-status-state.patch - ./hydra/0007-hydra-server-findLog-fix-issue-with-ca-derivations-e.patch - ]; - }); - hydraURL = "https://hydra.chir.rs/"; - notificationSender = "hydra@chir.rs"; - useSubstitutes = true; - port = 3001; - extraConfig = '' - - darkkirb = #gitea_token# - ProcyOS = #gitea_token# - - - DarkKirb = Bearer #github_token# - - - jobs = .* - - - - listen_address = 0.0.0.0 - port = 8905 - - - binary_cache_secret_key_file = ${config.sops.secrets."services/hydra/cache-key".path} - - timeout = 3600 - - - job = *:*:* - command = cat $HYDRA_JSON | ${pkgs.jq}/bin/jq -r '.drvPath' >> /var/lib/hydra/queue-runner/upload - - max_concurrent_evals = 1 - ''; - giteaTokenFile = "/run/secrets/services/hydra/gitea_token"; - githubTokenFile = "/run/secrets/services/hydra/github_token"; - buildMachinesFiles = [ - "${machines}" - "/run/hydra-machines" - ]; - }; - nix.settings.allowed-uris = ["github:" "https://" "http://"]; - sops.secrets."services/hydra/gitea_token" = {}; - sops.secrets."services/hydra/github_token" = {}; - sops.secrets."services/hydra/cache-key" = { - owner = "hydra-www"; - mode = "0440"; - }; - services.caddy.virtualHosts."hydra.int.chir.rs" = { - useACMEHost = "int.chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - - reverse_proxy http://127.0.0.1:${toString config.services.hydra-dev.port} { - trusted_proxies private_ranges - } - ''; - }; - sops.secrets."services/hydra/aws_credentials" = { - owner = "hydra-queue-runner"; - path = "/var/lib/hydra/queue-runner/.aws/credentials"; - restartUnits = ["hydra-notify.service"]; - }; - systemd.services.update-hydra-hosts = { - description = "Update hydra hosts"; - serviceConfig = { - Type = "oneshot"; - }; - script = '' - if ${pkgs.iputils}/bin/ping -c 1 rainbow-resort.int.chir.rs; then - echo "build-rainbow-resort armv7l-linux,powerpc-linux,powerpc64-linux,powerpc64le-linux,wasm32-wasi,x86_64-linux,i686-linux,riscv32-linux,riscv64-linux - 16 1 kvm,nixos-test,big-parallel,benchmark,gccarch-znver4,gccarch-znver3,gccarch-znver2,gccarch-znver1,gccarch-skylake,gccarch-skylake-avx512,ca-derivations -" > /run/hydra-machines - else - rm -f /run/hydra-machines - fi - ''; - }; - systemd.timers.update-hydra-hosts = { - enable = true; - description = "Update hydra hosts"; - requires = ["update-hydra-hosts.service"]; - wantedBy = ["multi-user.target"]; - timerConfig = { - OnBootSec = 300; - OnUnitActiveSec = 300; - }; - }; - nix.settings.trusted-users = ["@hydra"]; - sops.secrets."hydra/ssh/builder_id_ed25519" = { - sopsFile = ../../secrets/shared.yaml; - owner = "hydra-queue-runner"; - key = "ssh/builder_id_ed25519"; - path = "/var/lib/hydra/queue-runner/.ssh/builder_id_ed25519"; - }; - system.activationScripts.setupHydraSshConfig = lib.stringAfter ["var"] '' - mkdir -p /var/lib/hydra/queue-runner/.ssh/ - chown -Rv hydra-queue-runner /var/lib/hydra/queue-runner - ln -svf ${sshConfig} /var/lib/hydra/queue-runner/.ssh/config - ''; - sops.secrets."attic/config.toml" = { - owner = "hydra-queue-runner"; - key = "attic/config.toml"; - path = "/var/lib/hydra/queue-runner/.config/attic/config.toml"; - }; - services.postgresql.ensureDatabases = [ - "hydra-queue-runner" - ]; - services.postgresql.ensureUsers = [ - { - name = "hydra-queue-runner"; - ensureDBOwnership = true; - } - ]; - - systemd.services."attic-queue" = { - description = "Upload build results"; - wantedBy = ["multi-user.target"]; - serviceConfig = { - User = "hydra-queue-runner"; - Group = "hydra"; - }; - script = '' - export QUEUE_PATH=/var/lib/hydra/queue-runner/upload - export DATABASE_PATH=postgresql:///hydra-queue-runner - export RUST_LOG=info - exec ${attic.packages.${system}.attic-queue}/bin/attic-queue - ''; - }; -} diff --git a/config/services/hydra/0001-add-gitea-pulls.patch b/config/services/hydra/0001-add-gitea-pulls.patch deleted file mode 100644 index 49b889b3..00000000 --- a/config/services/hydra/0001-add-gitea-pulls.patch +++ /dev/null @@ -1,77 +0,0 @@ -From c53f83b7d8ce1ea324980e60c588e1eb0ceae715 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Charlotte=20=F0=9F=A6=9D=20Delenk?= -Date: Wed, 4 Sep 2024 08:33:46 +0200 -Subject: [PATCH 1/6] add gitea pulls - ---- - src/lib/Hydra/Plugin/GiteaPulls.pm | 58 ++++++++++++++++++++++++++++++ - 1 file changed, 58 insertions(+) - create mode 100644 src/lib/Hydra/Plugin/GiteaPulls.pm - -diff --git a/src/lib/Hydra/Plugin/GiteaPulls.pm b/src/lib/Hydra/Plugin/GiteaPulls.pm -new file mode 100644 -index 00000000..dda50f8d ---- /dev/null -+++ b/src/lib/Hydra/Plugin/GiteaPulls.pm -@@ -0,0 +1,58 @@ -+package Hydra::Plugin::GiteaPulls; -+ -+use strict; -+use warnings; -+use parent 'Hydra::Plugin'; -+use HTTP::Request; -+use LWP::UserAgent; -+use JSON::MaybeXS; -+use Hydra::Helper::CatalystUtils; -+use File::Temp; -+use POSIX qw(strftime); -+ -+sub supportedInputTypes { -+ my ($self, $inputTypes) = @_; -+ $inputTypes->{'giteapulls'} = 'Open Gitea Pull Requests'; -+} -+ -+sub _iterate { -+ my ($url, $page, $auth, $pulls, $ua) = @_; -+ my $req = HTTP::Request->new('GET', "$url&page=$page"); -+ $req->header('Accept' => 'application/json'); -+ $req->header('Authorization' => $auth) if defined $auth; -+ my $res = $ua->request($req); -+ my $content = $res->decoded_content; -+ die "Error pulling from the gitea pulls API: $content\n" -+ unless $res->is_success; -+ my $pulls_list = decode_json $content; -+ # TODO Stream out the json instead -+ foreach my $pull (@$pulls_list) { -+ $pulls->{$pull->{number}} = $pull; -+ } -+ _iterate($url, $page + 1, $auth, $pulls, $ua) unless !@$pulls_list; -+} -+ -+sub fetchInput { -+ my ($self, $type, $name, $value, $project, $jobset) = @_; -+ return undef if $type ne "giteapulls"; -+ # TODO Allow filtering of some kind here? -+ (my $domain, my $owner, my $repo) = split ' ', $value; -+ my $auth = $self->{config}->{gitea_authorization}->{$owner}; -+ my %pulls; -+ my $ua = LWP::UserAgent->new(); -+ _iterate("https://$domain/api/v1/repos/$owner/$repo/issues?types=pulls&per_page=100", 1, $auth, \%pulls, $ua); -+ my $tempdir = File::Temp->newdir("gitea-pulls" . "XXXXX", TMPDIR => 1); -+ my $filename = "$tempdir/gitea-pulls.json"; -+ -+ open(my $fh, ">", $filename) or die "Cannot open $filename for writing: $!"; -+ print $fh JSON->new->utf8->canonical->encode(\%pulls); -+ close $fh; -+ -+ my $storePath = trim(`nix-store --add "$filename"` -+ or die "cannot copy path $filename to the Nix store.\n"); -+ chomp $storePath; -+ my $timestamp = time; -+ return { storePath => $storePath, revision => strftime "%Y%m%d%H%M%S", gmtime($timestamp) }; -+} -+ -+1; --- -2.46.0 - diff --git a/config/services/hydra/0002-unlimit-output.patch b/config/services/hydra/0002-unlimit-output.patch deleted file mode 100644 index 5cf6e6c0..00000000 --- a/config/services/hydra/0002-unlimit-output.patch +++ /dev/null @@ -1,28 +0,0 @@ -From b1e4e97a5fad51f2fad87b6743369f90b012aeb6 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Charlotte=20=F0=9F=A6=9D=20Delenk?= -Date: Wed, 4 Sep 2024 09:52:45 +0200 -Subject: [PATCH 2/6] unlimit output - ---- - src/hydra-queue-runner/build-remote.cc | 5 ----- - 1 file changed, 5 deletions(-) - -diff --git a/src/hydra-queue-runner/build-remote.cc b/src/hydra-queue-runner/build-remote.cc -index 352b2208..67513407 100644 ---- a/src/hydra-queue-runner/build-remote.cc -+++ b/src/hydra-queue-runner/build-remote.cc -@@ -654,11 +654,6 @@ void State::buildRemote(ref destStore, - size_t totalNarSize = 0; - auto infos = build_remote::queryPathInfos(conn, *localStore, outputs, totalNarSize); - -- if (totalNarSize > maxOutputSize) { -- result.stepStatus = bsNarSizeLimitExceeded; -- return; -- } -- - /* Copy each path. */ - printMsg(lvlDebug, "copying outputs of ‘%s’ from ‘%s’ (%d bytes)", - localStore->printStorePath(step->drvPath), machine->sshName, totalNarSize); --- -2.46.0 - diff --git a/config/services/hydra/0003-remove-pr-number-from-github-job-name.patch b/config/services/hydra/0003-remove-pr-number-from-github-job-name.patch deleted file mode 100644 index 5e13e56d..00000000 --- a/config/services/hydra/0003-remove-pr-number-from-github-job-name.patch +++ /dev/null @@ -1,65 +0,0 @@ -From fbdb6e02774208097164a5d1951bd6cf38d60392 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Charlotte=20=F0=9F=A6=9D=20Delenk?= -Date: Wed, 4 Sep 2024 09:54:13 +0200 -Subject: [PATCH 3/6] remove pr number from github job name - ---- - src/lib/Hydra/Plugin/GithubStatus.pm | 26 +++++++++++--------------- - 1 file changed, 11 insertions(+), 15 deletions(-) - -diff --git a/src/lib/Hydra/Plugin/GithubStatus.pm b/src/lib/Hydra/Plugin/GithubStatus.pm -index fe791533..075301fd 100644 ---- a/src/lib/Hydra/Plugin/GithubStatus.pm -+++ b/src/lib/Hydra/Plugin/GithubStatus.pm -@@ -38,15 +38,14 @@ sub common { - my $ua = LWP::UserAgent->new(); - - foreach my $conf (@config) { -- next unless $jobName =~ /^$conf->{jobs}$/; - # Don't send out "pending" status updates if the build is already finished - next if !$finished && $build->finished == 1; - -- my $contextTrailer = $conf->{excludeBuildFromContext} ? "" : (":" . $build->id); -- my $github_job_name = $jobName =~ s/-pr-\d+//r; -+ my $contextTrailer = ""; -+ my $github_job_name = $jobName =~ s/-?pr-?\d+//r; - my $extendedContext = $conf->{context} // "continuous-integration/hydra:" . $jobName . $contextTrailer; - my $shortContext = $conf->{context} // "ci/hydra:" . $github_job_name . $contextTrailer; -- my $context = $conf->{useShortContext} ? $shortContext : $extendedContext; -+ my $context = $shortContext; - my $body = encode_json( - { - state => $finished ? toGithubState($build->buildstatus) : "pending", -@@ -103,17 +102,13 @@ sub common { - print STDERR "Can't parse flake, skipping GitHub status update\n"; - } - } else { -- foreach my $input (@inputs) { -- my $i = $eval->jobsetevalinputs->find({ name => $input, altnr => 0 }); -- if (! defined $i) { -- print STDERR "Evaluation $eval doesn't have input $input\n"; -- } -- next unless defined $i; -- my $uri = $i->uri; -- my $rev = $i->revision; -- $uri =~ m![:/]([^/]+)/([^/]+?)(?:.git)?$!; -- $sendStatus->($input, $1, $2, $rev); -- } -+ next unless defined ($eval->jobsetevalinputs->find({ name => "github_input" })); -+ my $input = $eval->jobsetevalinputs->find({ name => "github_input" })->value; -+ my $repoOwner = $eval->jobsetevalinputs->find({ name => "github_repo_owner" })->value; -+ my $repoName = $eval->jobsetevalinputs->find({ name => "github_repo_name" })->value; -+ my $i = $eval->jobsetevalinputs->find({ name => $input, altnr => 0 }); -+ my $rev = $i->revision; -+ $sendStatus->($input, $repoOwner, $repoName, $rev); - } - } - } -@@ -143,3 +138,4 @@ sub cachedBuildFinished { - } - - 1; -+ --- -2.46.0 - diff --git a/config/services/hydra/0004-use-pulls-instead-of-issues.patch b/config/services/hydra/0004-use-pulls-instead-of-issues.patch deleted file mode 100644 index 8c1a95a7..00000000 --- a/config/services/hydra/0004-use-pulls-instead-of-issues.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 72fd2c2cfeef8f48136f9decd876068995ef3ce3 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Charlotte=20=F0=9F=A6=9D=20Delenk?= -Date: Wed, 4 Sep 2024 10:19:35 +0200 -Subject: [PATCH 4/6] use pulls instead of issues - ---- - src/lib/Hydra/Plugin/GiteaPulls.pm | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/lib/Hydra/Plugin/GiteaPulls.pm b/src/lib/Hydra/Plugin/GiteaPulls.pm -index dda50f8d..48ae6e34 100644 ---- a/src/lib/Hydra/Plugin/GiteaPulls.pm -+++ b/src/lib/Hydra/Plugin/GiteaPulls.pm -@@ -40,7 +40,7 @@ sub fetchInput { - my $auth = $self->{config}->{gitea_authorization}->{$owner}; - my %pulls; - my $ua = LWP::UserAgent->new(); -- _iterate("https://$domain/api/v1/repos/$owner/$repo/issues?types=pulls&per_page=100", 1, $auth, \%pulls, $ua); -+ _iterate("https://$domain/api/v1/repos/$owner/$repo/pulls?types=pulls&per_page=100", 1, $auth, \%pulls, $ua); - my $tempdir = File::Temp->newdir("gitea-pulls" . "XXXXX", TMPDIR => 1); - my $filename = "$tempdir/gitea-pulls.json"; - --- -2.46.0 - diff --git a/config/services/hydra/0005-only-list-open-prs.patch b/config/services/hydra/0005-only-list-open-prs.patch deleted file mode 100644 index 64c82be1..00000000 --- a/config/services/hydra/0005-only-list-open-prs.patch +++ /dev/null @@ -1,25 +0,0 @@ -From c34ae5b32e5973648f484e09a5f4b590467f88be Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Charlotte=20=F0=9F=A6=9D=20Delenk?= -Date: Wed, 4 Sep 2024 10:20:22 +0200 -Subject: [PATCH 5/6] only list open prs - ---- - src/lib/Hydra/Plugin/GiteaPulls.pm | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/lib/Hydra/Plugin/GiteaPulls.pm b/src/lib/Hydra/Plugin/GiteaPulls.pm -index 48ae6e34..70e88861 100644 ---- a/src/lib/Hydra/Plugin/GiteaPulls.pm -+++ b/src/lib/Hydra/Plugin/GiteaPulls.pm -@@ -40,7 +40,7 @@ sub fetchInput { - my $auth = $self->{config}->{gitea_authorization}->{$owner}; - my %pulls; - my $ua = LWP::UserAgent->new(); -- _iterate("https://$domain/api/v1/repos/$owner/$repo/pulls?types=pulls&per_page=100", 1, $auth, \%pulls, $ua); -+ _iterate("https://$domain/api/v1/repos/$owner/$repo/pulls?status=open&per_page=100", 1, $auth, \%pulls, $ua); - my $tempdir = File::Temp->newdir("gitea-pulls" . "XXXXX", TMPDIR => 1); - my $filename = "$tempdir/gitea-pulls.json"; - --- -2.46.0 - diff --git a/config/services/hydra/0006-status-state.patch b/config/services/hydra/0006-status-state.patch deleted file mode 100644 index 04acb89f..00000000 --- a/config/services/hydra/0006-status-state.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 51d54758a00aebb4163a33dd75bb246007d561d1 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Charlotte=20=F0=9F=A6=9D=20Delenk?= -Date: Wed, 4 Sep 2024 10:21:14 +0200 -Subject: [PATCH 6/6] =?UTF-8?q?status=20=E2=86=92=20state?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - src/lib/Hydra/Plugin/GiteaPulls.pm | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/lib/Hydra/Plugin/GiteaPulls.pm b/src/lib/Hydra/Plugin/GiteaPulls.pm -index 70e88861..3b91fe8c 100644 ---- a/src/lib/Hydra/Plugin/GiteaPulls.pm -+++ b/src/lib/Hydra/Plugin/GiteaPulls.pm -@@ -40,7 +40,7 @@ sub fetchInput { - my $auth = $self->{config}->{gitea_authorization}->{$owner}; - my %pulls; - my $ua = LWP::UserAgent->new(); -- _iterate("https://$domain/api/v1/repos/$owner/$repo/pulls?status=open&per_page=100", 1, $auth, \%pulls, $ua); -+ _iterate("https://$domain/api/v1/repos/$owner/$repo/pulls?state=open&per_page=100", 1, $auth, \%pulls, $ua); - my $tempdir = File::Temp->newdir("gitea-pulls" . "XXXXX", TMPDIR => 1); - my $filename = "$tempdir/gitea-pulls.json"; - --- -2.46.0 - diff --git a/config/services/hydra/0007-hydra-server-findLog-fix-issue-with-ca-derivations-e.patch b/config/services/hydra/0007-hydra-server-findLog-fix-issue-with-ca-derivations-e.patch deleted file mode 100644 index 651a13bb..00000000 --- a/config/services/hydra/0007-hydra-server-findLog-fix-issue-with-ca-derivations-e.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 3750beb2a031090c4b60599044d3b0861939a735 Mon Sep 17 00:00:00 2001 -From: Rick van Schijndel -Date: Wed, 3 Apr 2024 22:47:22 +0200 -Subject: [PATCH 7/7] hydra-server: findLog: fix issue with ca-derivations - enabled - -When content addressed derivations are built on the hydra server, -one may run into an issue where some builds suddenly don't load anymore. - -This seems to be caused by outPaths that are NULL (which is -allowed for ca-derivations). Filter them out to prevent querying the -database for them, which is not supported by the database abstraction -layer that's currently in use. - -On my instance this appears to resolve the issue. -I feel like I might be doing this at the wrong abstraction layer, but on -the other hand -- it seems to resolve it and it also doesn't really look -like it will hurt anything. - -The test added in a previous commit uncovers this issue, and this commit -resolves it. So I'm happy with this patch for now. - -The issue I was seeing on my server: - -hydra-server[2549]: [error] Couldn't render template "undef error - DBIx::Class::SQLMaker::ClassicExtensions::puke(): Fatal: NULL-within-IN not implemented: The upcoming SQL::Abstract::Classic 2.0 will emit the logically correct SQL instead of raising this exception. at /nix/store/-hydra-unstable-2024-03-08_nix_2_20/libexec/hydra/lib/Hydra/Helper/Nix.pm line 190 - -See also short discussion here: https://github.com/NixOS/nixpkgs/pull/297392#issuecomment-2035366263 ---- - src/lib/Hydra/Helper/Nix.pm | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/lib/Hydra/Helper/Nix.pm b/src/lib/Hydra/Helper/Nix.pm -index 2a479ddb..69dbebce 100644 ---- a/src/lib/Hydra/Helper/Nix.pm -+++ b/src/lib/Hydra/Helper/Nix.pm -@@ -188,6 +188,10 @@ sub findLog { - - return undef if scalar @outPaths == 0; - -+ # Filter out any NULLs. Content-addressed derivations -+ # that haven't built yet or failed to build may have a NULL outPath. -+ @outPaths = grep {defined} @outPaths; -+ - my @steps = $c->model('DB::BuildSteps')->search( - { path => { -in => [@outPaths] } }, - { select => ["drvpath"] --- -2.46.0 - diff --git a/config/services/initrd-ssh.nix b/config/services/initrd-ssh.nix deleted file mode 100644 index 9c0010f8..00000000 --- a/config/services/initrd-ssh.nix +++ /dev/null @@ -1,7 +0,0 @@ -_: { - boot.initrd.network = { - enable = true; - ssh.enable = true; - ssh.hostKeys = ["/etc/secrets/initrd/ssh_host_ed25519_key"]; - }; -} diff --git a/config/services/iscsi.nix b/config/services/iscsi.nix deleted file mode 100644 index 104b9c50..00000000 --- a/config/services/iscsi.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - config, - pkgs, - ... -}: { - systemd.packages = [pkgs.tgt]; - systemd.services."tgtd".wantedBy = ["multi-user.target"]; - systemd.services.tgtd.serviceConfig.execStartPost = "${pkgs.tgt}/bin/tgtadm --op new --mode logicalunit --tid 1 --lun 1 -b /export/vf2.img"; - networking.firewall.interfaces."br0".allowedTCPPorts = [860 3260]; - environment.etc."tgt/targets.conf".text = '' - default-driver iscsi - - - backing-store /expport/vf2.img - - ''; -} diff --git a/config/services/jellyfin.nix b/config/services/jellyfin.nix deleted file mode 100644 index 13b8a8c6..00000000 --- a/config/services/jellyfin.nix +++ /dev/null @@ -1,20 +0,0 @@ -{pkgs, ...}: { - services.jellyfin.enable = true; - environment.systemPackages = [ - pkgs.jellyfin - pkgs.jellyfin-web - pkgs.jellyfin-ffmpeg - ]; - services.caddy.virtualHosts."jellyfin.int.chir.rs" = { - useACMEHost = "int.chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - - reverse_proxy { - to http://localhost:8096 - trusted_proxies private_ranges - } - ''; - }; -} diff --git a/config/services/kubernetes.nix b/config/services/kubernetes.nix deleted file mode 100644 index c94dcbea..00000000 --- a/config/services/kubernetes.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ - config, - pkgs, - ... -}: let - nodeIPs = { - instance-20221213-1915 = "100.99.173.107"; - nixos-8gb-fsn1-1 = "100.119.226.33"; - nas = "100.99.129.7"; - rainbow-resort = "100.115.217.35"; - }; -in { - sops.secrets."k3s/token" = { - sopsFile = ../../secrets/kubernetes.yaml; - }; - - services.k3s = rec { - enable = true; - role = "server"; - tokenFile = config.sops.secrets."k3s/token".path; - clusterInit = config.networking.hostName == "instance-20221213-1915"; - serverAddr = - if clusterInit - then "" - else "https://100.99.173.107:6443"; - extraFlags = - if config.networking.hostName == "rainbow-resort" - then "--container-runtime-endpoint unix:///run/containerd/containerd.sock --node-ip ${nodeIPs.${config.networking.hostName}} --node-external-ip ${nodeIPs.${config.networking.hostName}} --flannel-iface tailscale0" - else "--tls-san ${config.networking.hostName}.int.chir.rs --container-runtime-endpoint unix:///run/containerd/containerd.sock --advertise-address ${nodeIPs.${config.networking.hostName}} --node-ip ${nodeIPs.${config.networking.hostName}} --node-external-ip ${nodeIPs.${config.networking.hostName}} --flannel-iface tailscale0 --cluster-cidr=10.42.0.0/16 --service-cidr=10.43.0.0/16"; - }; - virtualisation.containerd = { - enable = true; - settings = let - fullCNIPlugins = pkgs.buildEnv { - name = "full-cni"; - paths = with pkgs; [ - cni-plugins - cni-plugin-flannel - ]; - }; - in { - plugins."io.containerd.grpc.v1.cri".cni = { - bin_dir = "${fullCNIPlugins}/bin"; - conf_dir = "/var/lib/rancher/k3s/agent/etc/cni/net.d/"; - }; - # Optionally set private registry credentials here instead of using /etc/rancher/k3s/registries.yaml - # plugins."io.containerd.grpc.v1.cri".registry.configs."registry.example.com".auth = { - # username = ""; - # password = ""; - # }; - }; - }; - environment.systemPackages = [pkgs.nfs-utils pkgs.kubernetes-helm]; - services.openiscsi = { - enable = true; - name = "${config.networking.hostName}-initiatorhost"; - }; - boot.supportedFilesystems = ["nfs"]; - services.rpcbind.enable = true; -} diff --git a/config/services/loki.nix b/config/services/loki.nix deleted file mode 100644 index 8db4f5b9..00000000 --- a/config/services/loki.nix +++ /dev/null @@ -1,73 +0,0 @@ -_: { - services.loki = { - enable = true; - configuration = { - server.http_listen_port = 24545; - server.grpc_listen_port = 24546; - auth_enabled = false; - - ingester = { - lifecycler = { - address = "127.0.0.1"; - ring = { - kvstore = { - store = "inmemory"; - }; - replication_factor = 1; - }; - }; - chunk_idle_period = "1h"; - max_chunk_age = "1h"; - chunk_target_size = 999999; - chunk_retain_period = "30s"; - }; - - schema_config = { - configs = [ - { - from = "2022-06-06"; - store = "boltdb-shipper"; - object_store = "filesystem"; - schema = "v11"; - index = { - prefix = "index_"; - period = "24h"; - }; - } - ]; - }; - - storage_config = { - boltdb_shipper = { - active_index_directory = "/var/lib/loki/boltdb-shipper-active"; - cache_location = "/var/lib/loki/boltdb-shipper-cache"; - cache_ttl = "24h"; - }; - - filesystem = { - directory = "/var/lib/loki/chunks"; - }; - }; - - limits_config = { - reject_old_samples = true; - reject_old_samples_max_age = "168h"; - allow_structured_metadata = false; - }; - - table_manager = { - retention_deletes_enabled = false; - retention_period = "0s"; - }; - - compactor = { - working_directory = "/var/lib/loki"; - compactor_ring = { - kvstore = { - store = "inmemory"; - }; - }; - }; - }; - }; -} diff --git a/config/services/matrix-media-repo.nix b/config/services/matrix-media-repo.nix deleted file mode 100644 index c1ded2b5..00000000 --- a/config/services/matrix-media-repo.nix +++ /dev/null @@ -1,200 +0,0 @@ -{ - system, - config, - pkgs, - lib, - ... -}: let - inherit (pkgs) matrix-media-repo; - config-yml = pkgs.writeText "matrix-media-repo.yaml" (lib.generators.toYAML {} { - repo = { - bindAddress = "127.0.0.1"; - port = 8008; - logDirectory = "-"; - }; - database.postgres = "postgresql:///matrix_media_repo?sslmode=disable&host=/run/postgresql"; - homeservers = [ - { - name = "chir.rs"; - csApi = "https://matrix.chir.rs"; - signingKeyPath = config.sops.secrets."services/matrix-media-repo/signing.key".path; - } - ]; - accessTokens.maxCacheTimeSeconds = 43200; - admins = ["@lotte:chir.rs"]; - datastores = [ - { - type = "s3"; - id = "b003babbb86fecf56bb9ba6571f9adb0bd1e71c8"; - enabled = true; - forKinds = ["all"]; - opts = { - tempPath = "/var/lib/matrix-media-repo"; - endpoint = "ams1.vultrobjects.com"; - accessKeyId = "#ACCESS_KEY_ID#"; - accessSecret = "#SECRET_ACCESS_KEY#"; - ssl = true; - bucketName = "matrix-chir-rs"; - region = "ams1"; - }; - } - ]; - metrics = { - enabled = true; - bindAddress = "::"; - port = 20855; - }; - urlPreviews = { - enabled = true; - numWorkers = 10; - oEmbed = false; - allowedNetworks = [ - "0.0.0.0/0" - "::/0" - ]; - disallowedNetworks = [ - "127.0.0.1/8" - "10.0.0.0/8" - "172.16.0.0/12" - "192.168.0.0/16" - "::1/128" - "fe80::/64" - "fc00::/7" - ]; - # user agent header was a mistake - userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0, matrix-media-repo (like twitterbot; like telegrambot; like discordbot; like facebook; like whatsapp; like firefox/92; like vkshare) +https://github.com/DarkKirb/nixos-config/pull/264"; - }; - downloads = { - expireAfterDays = 7; - }; - featureSupport = { - }; - rateLimit.enabled = false; - thumbnails = { - maxSourceBytes = 0; - maxPixels = 102000000; - types = [ - "image/jpeg" - "image/jpg" - "image/png" - "image/apng" - "image/gif" - "image/heif" - "image/webp" - "image/svg+xml" - "image/jxl" - "audio/mpeg" - "audio/ogg" - "audio/wav" - "audio/flac" - "video/mp4" - "video/webm" - "video/x-matroska" - "video/quicktime" - ]; - }; - }); -in { - systemd.services.matrix-media-repo = { - description = "Matrix Media Repo"; - after = ["network.target"]; - wantedBy = ["multi-user.target"]; - path = [matrix-media-repo pkgs.ffmpeg pkgs.imagemagick]; - preStart = '' - akid=$(cat ${config.sops.secrets."services/matrix-media-repo/access-key-id".path}) - sak=$(cat ${config.sops.secrets."services/matrix-media-repo/secret-access-key".path}) - cat ${config-yml} > /var/lib/matrix-media-repo/config.yml - sed -i "s|#ACCESS_KEY_ID#|$akid|g" /var/lib/matrix-media-repo/config.yml - sed -i "s|#SECRET_ACCESS_KEY#|$sak|g" /var/lib/matrix-media-repo/config.yml - ''; - serviceConfig = { - Type = "simple"; - User = "matrix-media-repo"; - Group = "matrix-media-repo"; - Restart = "always"; - ExecStart = "${matrix-media-repo}/bin/media_repo -config /var/lib/matrix-media-repo/config.yml"; - }; - }; - sops.secrets."services/matrix-media-repo/access-key-id".owner = "matrix-media-repo"; - sops.secrets."services/matrix-media-repo/secret-access-key".owner = "matrix-media-repo"; - sops.secrets."services/matrix-media-repo/signing.key".owner = "matrix-media-repo"; - users.users.matrix-media-repo = { - description = "Matrix Media Repository"; - home = "/var/lib/matrix-media-repo"; - useDefaultShell = true; - group = "matrix-media-repo"; - isSystemUser = true; - }; - users.groups.matrix-media-repo = {}; - systemd.tmpfiles.rules = [ - "d '/var/lib/matrix-media-repo' 0750 matrix-media-repo matrix-media-repo - -" - ]; - services.postgresql.ensureDatabases = [ - "matrix_media_repo" - ]; - services.caddy.virtualHosts."matrix.chir.rs" = { - useACMEHost = "chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - route { - handle /_matrix/media/* { - uri * replace /unstable/fi.mau.msc2246/ /v1/ - reverse_proxy http://localhost:8008 { - header_down Access-Control-Allow-Origin * - header_down Access-Control-Allow-Headers * - header_up Host chir.rs - header_up X-Forwarded-Host chir.rs - } - } - - handle /_matrix/client/v3/logout/* { - reverse_proxy { - to http://localhost:8008 - header_up Host chir.rs - header_up X-Forwarded-Host chir.rs - } - } - - handle /_matrix/client/v1/media/* { - reverse_proxy { - to http://localhost:8008 - header_up Host chir.rs - header_up X-Forwarded-Host chir.rs - } - } - - handle /_matrix/federation/v1/media/* { - reverse_proxy { - to http://localhost:8008 - header_up Host chir.rs - header_up X-Forwarded-Host chir.rs - } - } - - handle /_matrix/* { - reverse_proxy { - to https://matrix.int.chir.rs - header_up Host {upstream_hostport} - - transport http { - versions 1.1 - } - } - } - - handle /.well-known/matrix/server { - header Access-Control-Allow-Origin * - header Content-Type application/json - respond "{ \"m.server\": \"matrix.chir.rs:443\" }" 200 - } - - handle /.well-known/matrix/client { - header Access-Control-Allow-Origin * - header Content-Type application/json - respond "{ \"m.homeserver\": { \"base_url\": \"https://matrix.chir.rs\" } }" 200 - } - } - ''; - }; -} diff --git a/config/services/mautrix-discord.nix b/config/services/mautrix-discord.nix deleted file mode 100644 index f471fe78..00000000 --- a/config/services/mautrix-discord.nix +++ /dev/null @@ -1,75 +0,0 @@ -{ - config, - pkgs, - ... -}: { - imports = [ - ../../modules/matrix/mautrix-discord.nix - ]; - - services.mautrix-discord = { - enable = true; - environmentFile = config.sops.secrets."services/mautrix/shared_secret".path; - settings = { - homeserver = { - address = "https://matrix.chir.rs"; - domain = "chir.rs"; - async_media = true; - }; - appservice = { - database = { - type = "postgres"; - uri = "postgres:///mautrix_discord?sslmode=disable&host=/run/postgresql"; - }; - ephemeral_events = true; - async_transactions = true; - }; - metrics = { - enabled = true; - listen = "[::]:29321"; - }; - bridge = { - channel_name_template = "{{if or (eq .Type 3) (eq .Type 4)}}{{.Name}} ({{.GuildName}} — {{.ParentName}}){{else}}#{{.Name}} ({{.GuildName}} — {{.ParentName}}){{end}}"; - private_chat_portal_meta = "always"; - startup_private_channel_create_limit = 25; - delivery_receipts = true; - sync_direct_chat_list = true; - delete_portal_on_channel_delete = true; - prefix_webhook_messages = true; - cache_media = "always"; - animated_sticker.target = "disable"; - backfill = { - forward_limits = { - initial.dm = 50; - initial.channel = 50; - initial.thread = 50; - - missed.dm = -1; - missed.channel = -1; - missed.thread = -1; - }; - }; - encryption = { - allow = true; - default = false; - appservice = true; - require = false; - plaintext_mentions = true; - allow_key_sharing = true; - }; - permissions = { - "*" = "relay"; - "@miifox:chir.rs" = "user"; - "@lotte:chir.rs" = "admin"; - }; - login_shared_secret_map = { - "chir.rs" = "as_token:$SHARED_AS_TOKEN"; - }; - }; - }; - }; - sops.secrets."services/mautrix/shared_secret" = {}; - services.postgresql.ensureDatabases = [ - "mautrix_discord" - ]; -} diff --git a/config/services/mautrix-signal.nix b/config/services/mautrix-signal.nix deleted file mode 100644 index e059ce58..00000000 --- a/config/services/mautrix-signal.nix +++ /dev/null @@ -1,59 +0,0 @@ -{ - pkgs, - config, - ... -}: { - services.mautrix-signal = { - enable = true; - environmentFile = config.sops.secrets."services/mautrix/shared_secret".path; - settings = { - homeserver = { - address = "https://matrix.chir.rs"; - domain = "chir.rs"; - async_media = true; - }; - appservice = { - max_body_size = 10; - }; - metrics = { - enabled = true; - listen = "[::]:29329"; - }; - database = { - type = "postgres"; - uri = "postgres:///mautrix_signal?sslmode=disable&host=/run/postgresql"; - }; - bridge = { - relay.enabled = true; - permissions = { - "*" = "relay"; - "@miifox:chir.rs" = "user"; - "@lotte:chir.rs" = "admin"; - }; - }; - matrix = { - delivery_receipts = true; - }; - - backfill = { - enabled = true; - }; - encryption = { - allow = true; - default = false; - appservice = true; - allow_key_sharing = true; - pickle_key = "generate"; - }; - double_puppet = { - secrets = { - "chir.rs" = "as_token:$SHARED_AS_TOKEN"; - }; - }; - }; - }; - sops.secrets."services/mautrix/shared_secret" = {}; - services.postgresql.ensureDatabases = [ - "mautrix_signal" - ]; -} diff --git a/config/services/mautrix-slack.nix b/config/services/mautrix-slack.nix deleted file mode 100644 index 54c80f5c..00000000 --- a/config/services/mautrix-slack.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ - config, - pkgs, - ... -}: { - imports = [ - ../../modules/matrix/mautrix-slack.nix - ]; - - services.mautrix-slack = { - enable = true; - environmentFile = config.sops.secrets."services/mautrix/shared_secret".path; - settings = { - bridge = { - permissions = { - "*" = "relay"; - "@miifox:chir.rs" = "user"; - "@lotte:chir.rs" = "admin"; - }; - }; - database = { - type = "postgres"; - uri = "postgres:///mautrix_slack?sslmode=disable&host=/run/postgresql"; - }; - homeserver = { - address = "https://matrix.chir.rs"; - domain = "chir.rs"; - async_media = true; - }; - appservice = { - ephemeral_events = true; - async_transactions = true; - }; - backfill = { - enabled = true; - queue.enabled = true; - }; - encryption = { - allow = true; - default = false; - appservice = false; - }; - }; - }; - sops.secrets."services/mautrix/shared_secret" = {}; - services.postgresql.ensureDatabases = [ - "mautrix_slack" - ]; -} diff --git a/config/services/mautrix-telegram.nix b/config/services/mautrix-telegram.nix deleted file mode 100644 index 9aa7394f..00000000 --- a/config/services/mautrix-telegram.nix +++ /dev/null @@ -1,74 +0,0 @@ -{config, ...}: { - imports = [ - ../../modules/matrix/mautrix-telegram.nix - ]; - services.mautrix-telegram-2 = { - enable = true; - environmentFile = config.sops.secrets."services/mautrix/telegram".path; - settings = { - homeserver = { - address = "https://matrix.chir.rs"; - domain = "chir.rs"; - http_retry_count = 1000; - async_media = true; - }; - appservice = { - address = "http://localhost:29317"; - hostname = "0.0.0.0"; - port = 29317; - max_body_size = 10; - database = "postgres:///mautrix_telegram?sslmode=disable&host=/run/postgresql"; - as_token = "$AS_TOKEN"; - hs_token = "$HS_TOKEN"; - }; - bridge = { - displayname_template = "{displayname}"; - max_initial_member_sync = -1; - sync_channel_members = true; - startup_sync = true; - sync_create_limit = 0; - sync_deferred_create_all = true; - public_portals = true; - sync_with_custom_puppets = true; - sync_direct_chat_list = true; - invite_link_resolve = true; - encryption = { - allow = true; - default = false; - appservice = true; - require = false; - allow_key_sharing = true; - }; - - private_chat_portal_meta = "aways"; - delivery_receipts = true; - pinned_tag = "m.favourite"; - archive_tag = "m.lowpriority"; - - backfill = { - enable = true; - normal_groups = true; - unread_hours_threshold = -1; - }; - permissions = { - "*" = "relaybot"; - "@miifox:chir.rs" = "full"; - "@lotte:chir.rs" = "admin"; - }; - login_shared_secret_map = { - "chir.rs" = "as_token:$SHARED_AS_TOKEN"; - }; - }; - telegram = { - api_id = "$API_ID"; - api_hash = "$API_HASH"; - bot_token = "$BOT_TOKEN"; - connection.retries = -1; - }; - }; - }; - sops.secrets."services/mautrix/telegram".owner = "mautrix-telegram"; - services.postgresql.ensureDatabases = [ - "mautrix_telegram" - ]; -} diff --git a/config/services/mautrix-whatsapp.nix b/config/services/mautrix-whatsapp.nix deleted file mode 100644 index f03026ba..00000000 --- a/config/services/mautrix-whatsapp.nix +++ /dev/null @@ -1,62 +0,0 @@ -{ - config, - pkgs, - ... -}: { - imports = [ - ../../modules/matrix/mautrix-whatsapp.nix - ]; - - services.mautrix-whatsapp = { - enable = true; - environmentFile = config.sops.secrets."services/mautrix/shared_secret".path; - settings = { - homeserver = { - address = "https://matrix.chir.rs"; - domain = "chir.rs"; - async_media = true; - }; - appservice = { - max_body_size = 10; - }; - metrics = { - enabled = true; - listen = "[::]:29319"; - }; - database = { - type = "postgres"; - uri = "postgres:///mautrix_whatsapp?sslmode=disable&host=/run/postgresql"; - }; - bridge = { - relay.enabled = true; - permissions = { - "*" = "relay"; - "@miifox:chir.rs" = "user"; - "@lotte:chir.rs" = "admin"; - }; - }; - matrix = { - delivery_receipts = true; - }; - - backfill = { - enabled = true; - }; - encryption = { - allow = true; - default = false; - appservice = true; - allow_key_sharing = true; - }; - double_puppet = { - secrets = { - "chir.rs" = "as_token:$SHARED_AS_TOKEN"; - }; - }; - }; - }; - sops.secrets."services/mautrix/shared_secret" = {}; - services.postgresql.ensureDatabases = [ - "mautrix_whatsapp" - ]; -} diff --git a/config/services/minecraft.nix b/config/services/minecraft.nix deleted file mode 100644 index 2008514e..00000000 --- a/config/services/minecraft.nix +++ /dev/null @@ -1,260 +0,0 @@ -{ - pkgs, - config, - ... -}: { - imports = [ - ../../modules/minecraft/server.nix - ../../modules/minecraft/luckperms.nix - ../../modules/minecraft/essentialsx.nix - ../../modules/minecraft/multiverse.nix - ]; - - services.minecraft = { - enable = true; - stateDir = "/persist/var/lib/minecraft"; - whitelist = [ - { - uuid = "74e2502d-64db-4ac4-bac7-a0a2bc50ec9f"; - name = "DragonKing1337"; - } - { - uuid = "a6578f9a-288d-44af-8f43-e6402b126bb6"; - name = "DarkKirb"; - } - { - uuid = "5c29f08d-bc6f-4e3f-a83f-9454c5543d49"; - name = "Hrothiwulfus"; - } - { - uuid = "6253c244-cdf6-41b9-9187-62ad7552ca5c"; - name = "BL4CKM1ND"; - } - { - uuid = "7ee66be7-c8a7-44c9-8f2b-8dae22afbf09"; - name = "blackmind"; - } - { - uuid = "64315aa6-b996-4e9a-95d0-c6b567c2a2e6"; - name = "_KleineMio_"; - } - { - uuid = "7df86b33-1987-4b99-8290-d23440c13bc2"; - name = "DaTsHeePiii"; - } - { - name = "crafted2cc"; - uuid = "894a8cfe-4066-4a68-be7d-2b01a62a1ed6"; - } - { - name = "blackghost4"; - uuid = "4a8b0dbb-7239-4b5b-8a59-e5d6ce728299"; - } - ]; - properties.server-ip = "172.16.154.251"; # death - paper-yml = { - world-settings.default = { - max-auto-save-chunks-per-tick = 8; - optimize-explosions = true; - mob-spawner-tick-rate = 2; - game-mechanics.disable-chest-cat-detection = true; - container-update-tick-rate = 3; - max-entity-collisions = 2; - grass-spread-tick-rate = 4; - non-player-arrow-despawn-rate = 60; - creative-arrow-despawn-rate = 60; - despawn-ranges = rec { - monster = { - soft = 28; - hard = 96; - }; - creature = monster; - ambient = monster; - axolotls = monster; - underground_water_creature = monster; - water_creature = monster; - water_ambient = { - soft = 28; - hard = 32; - }; - misc = monster; - }; - hopper = { - disable-move-event = true; - }; - prevent-moving-into-unloaded-chunks = true; - use-faster-eigencraft-redstone = true; - armor-stands-tick = false; - per-player-mob-spawns = true; - }; - }; - luckperms = { - enable = true; - config = { - enable-ops = false; - }; - groups = { - admin = { - name = "admin"; - permissions = [ - "*" - { - "essentials.hat.prevent-type.*" = { - value = false; - }; - } - { - "mv.bypass.gamemode.*" = { - value = false; - }; - } - ]; - prefixes = [ - { - "&d@" = { - priority = 1; - }; - } - ]; - }; - default = { - name = "default"; - permissions = [ - "bukkit.command.help" - "bukkit.commit.mspt" - "bukkit.command.plugins" - "bukkit.command.version" - - "essentials.balance" - "essentials.book" - "essentials.compass" - "essentials.delhome" - "essentials.depth" - "essentials.editsign" - "essentials.gc" - "essentials.getpos" - "essentials.help" - "essentials.helpop" - "essentials.ignore" - "essentials.info" - "essentials.itemdb" - "essentials.itemlore" - "essentials.keepinv" - "essentials.keepxp" - "essentials.list" - "essentials.mail" - "essentials.me" - "essentials.motd" - "essentials.msgtoggle" - "essentials.pay" - "essentials.payconfirmtoggle" - "essentials.paytoggle" - "essentials.ping" - "essentials.playtime" - "essentials.realname" - "essentials.recipe" - "essentials.rtoggle" - "essentials.rules" - { - "essentials.sell" = { - value = true; - context = { - gamemode = "survival"; - }; - }; - } - "essentials.sell.hand" - "essentials.skull" - "essentials.sleepingignored" - "essentials.tpa" - "essentials.tpacancel" - "essentials.tpaccept" - "essentials.tpahere" - "essentials.tpauto" - "essentials.tpdeny" - "essentials.warp" - "essentials.warpinfo" - "essentials.world" - "essentials.whois" - "essentials.worth" - "essentials.afk" - "essentials.afk.auto" - "essentials.balancetop" - "essentials.hat" - "essentials.home" - "essentials.near" - "essentials.nick" - "essentials.seen" - "essentials.seen.extra" - "essentials.sethome" - "essentials.sethome.bed" - - "multiverse.access.*" - ]; - }; - }; - users = { - a6578f9a-288d-44af-8f43-e6402b126bb6 = { - uuid = "a6578f9a-288d-44af-8f43-e6402b126bb6"; - name = "DarkKirb"; - primary-group = "admin"; - parents = [ - "admin" - "default" - ]; - }; - }; - }; - essentialsx = { - enable = true; - config = { - change-playerlist = true; - change-tab-complete-name = true; - add-prefix-in-playerlist = true; - add-suffix-in-playerlist = true; - respawn-at-home = true; - currency-symbol = "€"; - currency-symbol-suffix = true; - chat.format = "{DISPLAYNAME}&r: {MESSAGE}"; - enabled-signs = [ - "color" - "balance" - "buy" - "sell" - "trade" - "free" - "disposal" - "warp" - "mail" - ]; - }; - worth-yml = ../../extra/worth.yml; - }; - multiverse = { - enable = true; - netherportals = true; - signportals = true; - inventories = true; - }; - }; - networking.firewall.allowedTCPPorts = [ - config.services.minecraft.properties.server-port - ]; - services.minecraft.plugins = [ - { - package = (pkgs.callPackage ../../packages/minecraft/dynmap.nix {}).core; - startScript = ""; - } - ]; - services.caddy.virtualHosts."mc.chir.rs" = { - useACMEHost = "chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - - reverse_proxy http://172.16.154.251:8123 { - trusted_proxies private_ranges - } - ''; - }; -} diff --git a/config/services/named-submissive.nix b/config/services/named-submissive.nix deleted file mode 100644 index bc059453..00000000 --- a/config/services/named-submissive.nix +++ /dev/null @@ -1,59 +0,0 @@ -{ - pkgs, - config, - dns, - ... -}: let - mkZone = name: { - master = false; - masters = ["100.119.226.33" "fd7a:115c:a1e0:ab12:4843:cd96:6277:e221"]; - file = "/var/lib/named/${name}"; - }; -in { - services.bind = { - enable = true; - zones = { - "chir.rs" = mkZone "chir.rs"; - "int.chir.rs" = mkZone "int.chir.rs"; - }; - extraConfig = '' - statistics-channels { - inet 127.0.0.1 port 8653 allow { 127.0.0.1; }; - }; - ''; - extraOptions = '' - allow-recursion { - 127.0.0.1; - ::1; - fc00::/7; - 100.0.0.0/8; - }; - recursion yes; - dnssec-validation yes; - allow-notify { 130.162.60.127; 2a01:4f8:1c17:d953:b4e1:8ff:e658:6f49; 138.201.155.128; 2a01:4f8:1c17:d953:b4e1:8ff:e658:6f49; fd0d:a262:1fa6:e621:b4e1:8ff:e658:6f49; 100.119.226.33; fd7a:115c:a1e0:ab12:4843:cd96:6277:e221; }; - ''; - }; - networking.firewall.allowedTCPPorts = [53]; - networking.firewall.allowedUDPPorts = [53]; - services.prometheus.exporters.bind = { - enable = true; - bindGroups = ["server" "view" "tasks"]; - bindURI = "http://127.0.0.1:8653/"; - port = 1533; - }; - services.prometheus.scrapeConfigs = [ - { - job_name = "bind"; - static_configs = [ - { - targets = [ - "127.0.0.1:${toString config.services.prometheus.exporters.bind.port}" - ]; - } - ]; - } - ]; - systemd.tmpfiles.rules = [ - "d /var/lib/named 4700 named named - -" - ]; -} diff --git a/config/services/named.nix b/config/services/named.nix deleted file mode 100644 index 9e54784c..00000000 --- a/config/services/named.nix +++ /dev/null @@ -1,102 +0,0 @@ -{ - pkgs, - config, - dns, - ... -}: let - chir-rs = import ../../zones/chir.rs.nix {inherit dns;}; - int-chir-rs = import ../../zones/int.chir.rs.nix {inherit dns;}; - signzone = import ../../zones/signzone.nix; -in { - imports = [ - (signzone { - inherit dns; - ksk = "services/dns/rs/chir/32969"; - zsk = "services/dns/rs/chir/51207"; - zone = chir-rs; - zonename = "chir.rs"; - }) - (signzone { - inherit dns; - ksk = "services/dns/rs/chir/int/35133"; - zsk = "services/dns/rs/chir/int/19631"; - zone = int-chir-rs; - zonename = "int.chir.rs"; - }) - ]; - - services.bind = { - enable = true; - zones = { - "chir.rs" = { - master = true; - file = "/var/lib/named/chir.rs"; - slaves = ["fd7a:115c:a1e0:ab12:4843:cd96:6263:ad6b" "100.99.173.107"]; - extraConfig = "also-notify {fd7a:115c:a1e0:ab12:4843:cd96:6263:ad6b; 100.99.173.107;};"; - }; - "_acme-challenge.chir.rs" = { - master = true; - file = "/var/lib/named/_acme-challenge.chir.rs"; - extraConfig = '' - update-policy { - grant certbot. name _acme-challenge.chir.rs. txt; - }; - ''; - }; - "int.chir.rs" = { - master = true; - file = "/var/lib/named/int.chir.rs"; - slaves = ["fd7a:115c:a1e0:ab12:4843:cd96:6263:ad6b" "100.99.173.107"]; - extraConfig = "also-notify {fd7a:115c:a1e0:ab12:4843:cd96:6263:ad6b; 100.99.173.107;};"; - }; - "_acme-challenge.int.chir.rs" = { - master = true; - file = "/var/lib/named/_acme-challenge.int.chir.rs"; - extraConfig = '' - update-policy { - grant certbot. name _acme-challenge.int.chir.rs. txt; - }; - ''; - }; - }; - extraConfig = '' - statistics-channels { - inet 127.0.0.1 port 8653 allow { 127.0.0.1; }; - }; - include "/run/secrets/services/dns/named-keys"; - ''; - extraOptions = '' - allow-recursion { - 127.0.0.1; - ::1; - fc00::/7; - 100.0.0.0/8; - }; - recursion yes; - dnssec-validation yes; - allow-transfer {fd7a:115c:a1e0:ab12:4843:cd96:6263:ad6b; 100.99.173.107;}; - notify-delay 0; - ''; - }; - networking.firewall.allowedTCPPorts = [53]; - networking.firewall.allowedUDPPorts = [53]; - services.prometheus.exporters.bind = { - enable = true; - bindGroups = ["server" "view" "tasks"]; - bindURI = "http://127.0.0.1:8653/"; - port = 1533; - }; - services.prometheus.scrapeConfigs = [ - { - job_name = "bind"; - static_configs = [ - { - targets = [ - "127.0.0.1:${toString config.services.prometheus.exporters.bind.port}" - ]; - } - ]; - } - ]; - sops.secrets."services/dns/named-keys" = {owner = "named";}; -} diff --git a/config/services/nfs.nix b/config/services/nfs.nix deleted file mode 100644 index dd1f6452..00000000 --- a/config/services/nfs.nix +++ /dev/null @@ -1,14 +0,0 @@ -{pkgs, ...}: { - systemd.packages = with pkgs; [nfs-utils]; - services.nfs.server = { - enable = true; - exports = '' - /export/vf2 192.168.2.1/24(rw,no_root_squash,async,nohide,no_subtree_check) - ''; - extraNfsdConfig = ''''; - }; - networking.firewall = { - allowedTCPPorts = [111 2049 4000 4001 4002 20048]; - allowedUDPPorts = [111 2049 4000 4001 4002 20048]; - }; -} diff --git a/config/services/otel.nix b/config/services/otel.nix deleted file mode 100644 index ad5374b4..00000000 --- a/config/services/otel.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ - config, - pkgs, - ... -}: { - services.opentelemetry-collector = { - enable = true; - package = pkgs.opentelemetry-collector-contrib; - settings = { - receivers = { - otlp.protocols = { - grpc = {}; - http = {}; - }; - }; - processors.batch = {}; - exporters = { - "otlp".endpoint = "nas.int.chir.rs:4317"; - otlp.tls.insecure = true; - loki = { - endpoint = "https://nas.int.chir.rs:3100/loki/api/v1/push"; - }; - }; - extensions = { - zpages = {}; - }; - service = { - extensions = ["zpages"]; - pipelines = { - traces = { - receivers = ["otlp"]; - processors = ["batch"]; - exporters = ["otlp"]; - }; - metrics = { - receivers = ["otlp"]; - processors = ["batch"]; - exporters = ["otlp"]; - }; - logs = { - receivers = ["otlp"]; - processors = ["batch"]; - exporters = ["loki"]; - }; - }; - telemetry = { - logs.level = "DEBUG"; - logs.initial_fields.service = config.networking.hostName; - metrics = { - level = "detailed"; - address = "127.0.0.1:63174"; - }; - }; - }; - }; - }; -} diff --git a/config/services/peertube/default.nix b/config/services/peertube/default.nix deleted file mode 100644 index 5437d735..00000000 --- a/config/services/peertube/default.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: { - services.peertube = { - enable = true; - localDomain = "peertube.chir.rs"; - listenHttp = 5370; - listenWeb = 443; - enableWebHttps = true; - serviceEnvironmentFile = config.sops.secrets."services/peertube/env".path; - secrets.secretsFile = config.sops.secrets."services/peertube/secret".path; - settings = { - object_storage = { - upload_acl.public = "private"; - enabled = true; - endpoint = "ams1.vultrobjects.com"; - videos = { - bucket_name = "mastodon-assets-chir-rs"; - prefix = "peertube/videos/"; - base_url = "https://mastodon-assets.chir.rs"; - }; - streaming_playlists = { - bucket_name = "mastodon-assets-chir-rs"; - prefix = "peertube/streaming-playlists/"; - base_url = "https://mastodon-assets.chir.rs"; - }; - }; - }; - database.createLocally = true; - redis.createLocally = true; - }; - services.caddy.virtualHosts."peertube.chir.rs" = { - useACMEHost = "chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - reverse_proxy { - to http://127.0.0.1:5370 - } - ''; - }; - sops.secrets."services/peertube/env".owner = "peertube"; - sops.secrets."services/peertube/secret".owner = "peertube"; -} diff --git a/config/services/pipewire.nix b/config/services/pipewire.nix deleted file mode 100644 index 4c4a91dd..00000000 --- a/config/services/pipewire.nix +++ /dev/null @@ -1,59 +0,0 @@ -_: { - services.pipewire = { - enable = true; - pulse.enable = true; - jack.enable = true; - alsa.enable = true; - alsa.support32Bit = true; - }; - security.rtkit.enable = true; - hardware.pulseaudio.enable = false; - xdg.portal = { - enable = true; - wlr.enable = true; - }; - security.pam.loginLimits = [ - { - domain = "@audio"; - item = "memlock"; - type = "-"; - value = "unlimited"; - } - { - domain = "@audio"; - item = "rtprio"; - type = "-"; - value = "99"; - } - { - domain = "@audio"; - item = "nofile"; - type = "soft"; - value = "99999"; - } - { - domain = "@audio"; - item = "nofile"; - type = "hard"; - value = "99999"; - } - ]; - /* - environment.etc."pipewire/pipewire-pulse.conf.d/discord.conf".text = '' - pulse.rules = [ - { - # Discord notification sounds fix - matches = [ - { application.process.binary = "Discord" } - { application.process.binary = ".Discord-wrapped" } - ] - actions = { - update-props = { - pulse.min.quantum = 1024/48000 # 21ms - } - } - } - ] - ''; - */ -} diff --git a/config/services/postfix.nix b/config/services/postfix.nix deleted file mode 100644 index 0c0141e6..00000000 --- a/config/services/postfix.nix +++ /dev/null @@ -1,62 +0,0 @@ -{ - lib, - pkgs, - ... -}: { - nixpkgs.overlays = [ - (curr: prev: { - postfix = prev.postfix.override { - withPgSQL = true; - }; - }) - ]; - services.postfix = { - enable = true; - enableSubmission = true; - enableSubmissions = true; - destination = [ - "localhost" - ]; - domain = "chir.rs"; - hostname = "mail.chir.rs"; - masterConfig = { - submission = { - args = ["-o" "smtpd_tls_security_level=encrypt"]; - type = "inet"; - }; - }; - origin = "mail.chir.rs"; - sslCert = "/var/lib/acme/chir.rs/cert.pem"; - sslKey = "/var/lib/acme/chir.rs/key.pem"; - config = { - smtpd_tls_security_level = lib.mkForce "encrypt"; - smtp_tls_security_level = "encrypt"; - - virtual_alias_domains = "pgsql:/run/secrets/services/postfix/virtual_alias_domains.cf"; - virtual_alias_maps = "pgsql:/run/secrets/services/postfix/virtual_alias_maps.cf"; - virtual_mailbox_domains = "pgsql:/run/secrets/services/postfix/virtual_mailbox_domains.cf"; - virtual_transport = "lmtp:unix:/run/dovecot2/lmtp"; - smtpd_milters = "inet:rspamd.int.chir.rs:11332"; - non_smtpd_milters = "inet:rspamd.int.chir.rs:11332"; - disable_vrfy_command = "yes"; - smtpd_banner = "mail.chir.rs ESMTP NO UCE NO UBE NO RELAYCLIENT=yes YES OwO"; - message_size_limit = "20971520"; - biff = "no"; - smtpd_helo_restrictions = "permit_mynetworks, permit_sasl_authenticated"; - smtpd_helo_required = "yes"; - smtpd_sasl_type = "dovecot"; - smtpd_sasl_path = "/run/dovecot2/auth"; - smtpd_sasl_auth_enable = "yes"; - smtpd_tls_auth_only = "yes"; - smtpd_tls_mandatory_protocols = "!SSLv2, !SSLv3, !TLSv1, !TLSv1.1"; - smtpd_tls_protocols = "!SSLv2, !SSLv3, !TLSv1, !TLSv1.1"; - tls_preempt_cipherlist = "no"; - smtputf8_enable = "yes"; - }; - }; - sops.secrets."services/postfix/virtual_alias_domains.cf" = {owner = "postfix";}; - sops.secrets."services/postfix/virtual_alias_maps.cf" = {owner = "postfix";}; - sops.secrets."services/postfix/virtual_mailbox_domains.cf" = {owner = "postfix";}; - networking.firewall.allowedTCPPorts = [25 465 587]; - security.acme.certs."chir.rs".reloadServices = ["postfix.service"]; -} diff --git a/config/services/postgres.nix b/config/services/postgres.nix deleted file mode 100644 index f698eb33..00000000 --- a/config/services/postgres.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - config, - lib, - ... -}: { - services.postgresql = { - enable = true; - enableTCPIP = true; - authentication = "host all all fd7a:115c:a1e0:ab12::/64 md5"; - settings = { - shared_preload_libraries = "pg_stat_statements"; - "pg_stat_statements.track" = "all"; - }; - }; - services.postgresqlBackup = { - enable = true; - compression = "none"; # the file system and restic both do compression - }; - services.prometheus.exporters.postgres = { - enable = true; - user = "postgres"; - port = 1589; - }; -} diff --git a/config/services/prometheus.nix b/config/services/prometheus.nix deleted file mode 100644 index 30c00a10..00000000 --- a/config/services/prometheus.nix +++ /dev/null @@ -1,131 +0,0 @@ -{config, ...}: { - services.prometheus = { - port = 26678; - enable = true; - - retentionTime = "90d"; - - checkConfig = false; - - # ingest the published nodes - scrapeConfigs = [ - { - job_name = "nodes"; - static_configs = [ - { - targets = [ - "nas.int.chir.rs:31941" - "nixos-8gb-fsn1-1.int.chir.rs:31941" - "instance-20221213-1915.int.chir.rs:31941" - "rainbow-resort.int.chir.rs:31941" - "thinkrac.int.chir.rs:31941" - ]; - } - ]; - } - { - job_name = "dovecot"; - static_configs = [ - { - targets = [ - "nixos-8gb-fsn1-1.int.chir.rs:35496" - ]; - } - ]; - } - { - job_name = "forgejo"; - static_configs = [ - { - targets = [ - "nixos-8gb-fsn1-1.int.chir.rs:6379" - ]; - } - ]; - } - { - job_name = "hydra"; - static_configs = [ - { - targets = [ - "nas.int.chir.rs:8905" - ]; - } - ]; - } - { - job_name = "matrix-media-repo"; - static_configs = [ - { - targets = [ - "nixos-8gb-fsn1-1.int.chir.rs:20855" - ]; - } - ]; - } - { - job_name = "rspamd"; - static_configs = [ - { - targets = [ - "nixos-8gb-fsn1-1.int.chir.rs:58636" - ]; - } - ]; - } - { - job_name = "matrix-synapse"; - metrics_path = "/_synapse/metrics"; - static_configs = [ - { - targets = [ - "instance-20221213-1915.int.chir.rs:8008" - ]; - } - ]; - } - { - job_name = "opentelemetry-collector"; - static_configs = [ - { - targets = [ - "nas.int.chir.rs:63174" - "nixos-8gb-fsn1-1.int.chir.rs:63174" - "instance-20221213-1915.int.chir.rs:63174" - "rainbow-resort.int.chir.rs:63174" - "thinkrac.int.chir.rs:63174" - ]; - } - ]; - } - { - job_name = "postgresql"; - static_configs = [ - { - targets = [ - "nas.int.chir.rs:1589" - "nixos-8gb-fsn1-1.int.chir.rs:1589" - "instance-20221213-1915.int.chir.rs:1589" - "thinkrac.int.chir.rs:1589" - "rainbow-resort.int.chir.rs:1589" - ]; - } - ]; - } - { - job_name = "akkoma"; - metrics_path = "/api/v1/akkoma/metrics"; - authorization.credentials_file = config.sops.secrets."services/akkoma-key".path; - scheme = "https"; - static_configs = [ - { - targets = [ - "akko.chir.rs" - ]; - } - ]; - } - ]; - }; - sops.secrets."services/akkoma-key".owner = "prometheus"; -} diff --git a/config/services/promtail.nix b/config/services/promtail.nix deleted file mode 100644 index 8da64b04..00000000 --- a/config/services/promtail.nix +++ /dev/null @@ -1,38 +0,0 @@ -{config, ...}: { - services.promtail = { - enable = true; - configuration = { - server = { - http_listen_port = 45871; - grpc_listen_port = 0; - }; - positions = { - filename = "/tmp/positions.yaml"; - }; - clients = [ - { - url = "http://nas.int.chir.rs:24545/loki/api/v1/push"; - } - ]; - scrape_configs = [ - { - job_name = "journal"; - journal = { - max_age = "12h"; - labels = { - job = "systemd-journal"; - host = "${config.networking.hostName}"; - }; - }; - relabel_configs = [ - { - source_labels = ["__journal__systemd_unit"]; - target_label = "unit"; - } - ]; - } - ]; - }; - # extraFlags - }; -} diff --git a/config/services/renovate.nix b/config/services/renovate.nix deleted file mode 100644 index 7e7bf2b1..00000000 --- a/config/services/renovate.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - pkgs, - config, - cargo2nix, - system, - ... -}: { - services.renovate = { - enable = true; - schedule = "hourly"; - settings = { - platform = "gitea"; - endpoint = "https://git.chir.rs"; - gitAuthor = "Renovate "; - autodiscover = true; - autodiscoverTopics = ["managed-by-renovate"]; - nix.enabled = true; - lockFileMaintenance.enabled = true; - osvVulnerabilityAlerts = true; - allowedPostUpgradeCommands = [ - "^cargo2nix -o$" - "^alejandra \\.$" - "^./update.sh$" - ]; - allowCustomCrateRegistries = true; - }; - credentials = { - RENOVATE_TOKEN = config.sops.secrets."services/renovate".path; - }; - runtimePackages = with pkgs; [ - config.nix.package - nodejs - corepack - cargo - cargo2nix.packages.${system}.cargo2nix - alejandra - git-lfs - ]; - }; - - sops.secrets."services/renovate" = {}; -} diff --git a/config/services/restic.nix b/config/services/restic.nix deleted file mode 100644 index be873afb..00000000 --- a/config/services/restic.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - config, - lib, - ... -}: { - systemd.timers.restic-backups-sysbackup.wantedBy = lib.mkForce ["multi-user.target"]; - services.restic.backups."sysbackup" = { - timerConfig = { - OnUnitActiveSec = "12h"; - RandomizedDelaySec = "1d"; - OnActiveSec = "1m"; - }; - environmentFile = config.sops.secrets."security/restic/env".path; - paths = [ - "/var" - "/home" - "/root" - ]; - extraBackupArgs = [ - "--exclude-caches" - "--compression max" - "--exclude" - "/var/tmp" - "--exclude" - "/var/cache" - "--exclude" - "/root/.cache" - "--exclude" - "/home/darkkirb/.cache" - "--exclude" - "/var/lib/ipfs/root" - ]; - repository = "s3://ams1.vultrobjects.com/backup-chir-rs"; - passwordFile = config.sops.secrets."security/restic/password".path; - }; - sops.secrets."security/restic/env" = { - sopsFile = ../../secrets/shared.yaml; - }; - sops.secrets."security/restic/password" = { - sopsFile = ../../secrets/shared.yaml; - }; -} diff --git a/config/services/reverse-proxy.nix b/config/services/reverse-proxy.nix deleted file mode 100644 index da97b90a..00000000 --- a/config/services/reverse-proxy.nix +++ /dev/null @@ -1,246 +0,0 @@ -{ - system, - pkgs, - config, - ... -}: let - mkConfigExtra = extra: dest: { - useACMEHost = "chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - ${extra} - - reverse_proxy { - to ${dest} - header_up Host {upstream_hostport} - - transport http { - versions 1.1 - } - } - ''; - }; - mkConfig = mkConfigExtra ""; -in { - services.caddy.virtualHosts = { - "hydra.chir.rs" = mkConfig "https://hydra.int.chir.rs"; - "weblate.chir.rs" = mkConfig "https://weblate.int.chir.rs"; - "weblate.int.chir.rs" = { - useACMEHost = "int.chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - reverse_proxy { - to http://localhost:23432 - header_up Host weblate.chir.rs - transport http { - versions 1.1 - } - } - ''; - }; - "mastodon.chir.rs" = { - useACMEHost = "chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - reverse_proxy { - to https://mastodon.int.chir.rs - header_up Host {upstream_hostport} - transport http { - versions 1.1 - } - } - ''; - }; - "mastodon-assets.chir.rs" = { - useACMEHost = "chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - @getOnly { - method GET - } - - @options { - method OPTIONS - } - - header { - Access-Control-Allow-Origin * - Access-Control-Allow-Credentials true - Access-Control-Allow-Methods GET - Access-Control-Allow-Headers * - defer - } - - reverse_proxy @getOnly { - to http://localhost:24155 - header_up Host {upstream_hostport} - header_up -Authorization - header_down -Set-Cookie - header_down -Access-Control-Allow-Origin - header_down -Access-Control-Allow-Methods - header_down -Access-Control-Allow-Headers - header_up -Set-Cookie - - transport http { - versions 1.1 - } - } - respond @options 204 - ''; - }; - "cache.chir.rs" = { - useACMEHost = "chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - - uri strip_prefix /cache - - @getOnly { - method GET - } - - @writeRequests { - method POST PUT PATCH DELETE - } - - reverse_proxy @writeRequests { - to https://cache-chir-rs.s3.us-west-000.backblazeb2.com - header_up Host {upstream_hostport} - header_down -Set-Cookie - header_down Access-Control-Allow-Origin '*' - header_down -Access-Control-Allow-Methods - header_down Access-Control-Allow-Headers - header_up -Set-Cookie - - transport http { - versions 1.1 - } - } - - reverse_proxy @getOnly { - @error status 500 404 - handle_response @error { - reverse_proxy { - to http://localhost:24156 - header_up Host {upstream_hostport} - header_up -Authorization - header_down -Set-Cookie - header_down Access-Control-Allow-Origin '*' - header_down -Access-Control-Allow-Methods - header_down Access-Control-Allow-Headers - header_up -Set-Cookie - - transport http { - versions 1.1 - } - } - } - to https://cache.nixos.org - header_up Host {upstream_hostport} - header_up -Authorization - header_down -Set-Cookie - header_down Access-Control-Allow-Origin '*' - header_down -Access-Control-Allow-Methods - header_down Access-Control-Allow-Headers - header_up -Set-Cookie - - transport http { - versions 1.1 - } - } - ''; - }; - "moa.chir.rs" = mkConfig "https://moa.int.chir.rs"; - "chir.rs" = { - useACMEHost = "chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - handle /.well-known/webfinger { - header Location https://mastodon.chir.rs{path} - respond 301 - } - handle /.well-known/matrix/server { - header Access-Control-Allow-Origin * - header Content-Type application/json - respond "{ \"m.server\": \"matrix.chir.rs:443\" }" 200 - } - - handle /.well-known/matrix/client { - header Access-Control-Allow-Origin * - header Content-Type application/json - respond "{ \"m.homeserver\": { \"base_url\": \"https://matrix.chir.rs\" } }" 200 - } - ''; - }; - }; - services.nginx.virtualHosts."mastodon-assets.chir.rs" = { - listen = [ - { - addr = "127.0.0.1"; - port = 24155; - } - ]; - locations."/" = { - extraConfig = '' - limit_except GET { - deny all; - } - proxy_set_header Authorization ${"''"}; - proxy_hide_header Set-Cookie; - proxy_hide_header 'Access-Control-Allow-Origin'; - proxy_hide_header 'Access-Control-Allow-Methods'; - proxy_hide_header 'Access-Control-Allow-Headers'; - proxy_ignore_headers Set-Cookie; - proxy_intercept_errors off; - proxy_cache akkoma_media_cache; - proxy_cache_key $host$uri$is_args$args; - proxy_cache_valid 200 48h; - proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; - proxy_cache_lock on; - expires 1y; - add_header Cache-Control public; - add_header 'Access-Control-Allow-Origin' '*'; - add_header X-Cache-Status $upstream_cache_status; - ''; - proxyPass = "https://f000.backblazeb2.com/file/mastodon-chir-rs/"; - }; - }; - services.nginx.virtualHosts."cache.chir.rs" = { - listen = [ - { - addr = "127.0.0.1"; - port = 24156; - } - ]; - locations."/" = { - extraConfig = '' - limit_except GET { - deny all; - } - proxy_set_header Authorization ${"''"}; - proxy_hide_header Set-Cookie; - proxy_hide_header 'Access-Control-Allow-Origin'; - proxy_hide_header 'Access-Control-Allow-Methods'; - proxy_hide_header 'Access-Control-Allow-Headers'; - proxy_ignore_headers Set-Cookie; - proxy_intercept_errors off; - proxy_cache akkoma_media_cache; - proxy_cache_key $host$uri$is_args$args; - proxy_cache_valid 200 48h; - proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; - proxy_cache_lock on; - expires 1y; - add_header Cache-Control public; - add_header 'Access-Control-Allow-Origin' '*'; - add_header X-Cache-Status $upstream_cache_status; - ''; - proxyPass = "https://f000.backblazeb2.com/file/cache-chir-rs/"; - }; - }; -} diff --git a/config/services/rspamd.nix b/config/services/rspamd.nix deleted file mode 100644 index fef5ed7d..00000000 --- a/config/services/rspamd.nix +++ /dev/null @@ -1,201 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: { - services = { - # TODO: Antivirus - - rspamd = { - enable = true; - locals = { - "dkim_signing.conf".text = '' - domain { - "darkkirb.de" { - selector = "dkim"; - path = "${config.sops.secrets."services/rspamd/dkim/darkkirb.de".path}"; - } - "miifox.net" { - selector = "dkim"; - path = "${config.sops.secrets."services/rspamd/dkim/miifox.net".path}"; - } - "chir.rs" { - selector = "dkim"; - path = "${config.sops.secrets."services/rspamd/dkim/chir.rs".path}"; - } - } - ''; - "dmarc.conf".text = '' - actions { - reject = "reject"; - quarantine = "quarantine"; - softfail = "add_header"; - } - ''; - "greylist.conf".text = '' - greylist_min_score = 0; - ''; - "hfilter.conf".text = '' - helo_enabled = true; - hostname_enabled = true; - url_enabled = true; - from_enabled = true; - rcpt_enabled = true; - mid_enabled = true; - ''; - "history.conf".text = '' - nrows = 1000; - subject_privacy = true; - ''; - "milter.conf".text = '' - use = [ - "authentication-results" - "fuzzy-hashes" - "spam-header" - "stat-signature" - "x-rspamd-queue-id" - "x-rspamd-result" - "x-rspamd-server" - "x-rspamd-bar" - "x-spam-status" - ]; - ''; - "mx_check.conf".text = '' - enabled = true; - ''; - "neural.conf".text = '' - enabled = true; - rules { - LONG { - train { - max_trains = 5000; - max_usages = 200; - max_iterations = 25; - learning_rate = 0.01; - } - symbol_spam = "NEURAL_SPAM_LONG"; - symbol_ham = "NEURAL_HAM_LONG"; - ann_expire = "365d"; - } - SHORT { - train { - max_trains = 5000; - max_usages = 2; - max_iterations = 25; - learning_rate = 0.01; - } - symbol_spam = "NEURAL_SPAM_SHORT"; - symbol_ham = "NEURAL_HAM_SHORT"; - ann_expire = "30d"; - } - } - ''; - "neural_group.conf".text = '' - symbols { - NEURAL_SPAM_LONG { - weight = 3.0; # sample weight - description = "Neural network spam (long)"; - } - NEURAL_HAM_LONG { - weight = -3.0; # sample weight - description = "Neural network ham (long)"; - } - NEURAL_SPAM_SHORT { - weight = 2.0; # sample weight - description = "Neural network spam (short)"; - } - NEURAL_HAM_SHORT { - weight = -1.0; # sample weight - description = "Neural network ham (short)"; - } - } - ''; - "phishing.conf".text = '' - openphish_enabled = true; - ''; - "reputation.conf".text = '' - rules { - ip_reputation { - selector.type = "ip"; - backend.type = "redis"; - symbol = "IP_REPUTATION"; - } - spf_reputation { - selector.type = "spf"; - backend.type = "redis"; - symbol = "SPF_REPUTATION"; - } - dkim_reputation { - selector.type = "dkim"; - backend.type = "redis"; - symbol = "DKIM_REPUTATION"; - } - asn_reputation { - selector.type = "generic"; - selector.selector = "asn"; - backend.type = "redis"; - symbol = "ASN_REPUTATION"; - } - country_reputation { - selector.type = "generic"; - selector.selector = "country"; - backend.type = "redis"; - symbol = "COUNTRY_REPUTATION"; - } - } - ''; - "replies.conf".text = '' - expire = "7d"; - symbol = "REPLY"; - ''; - "redis.conf".text = '' - servers = "${config.services.redis.servers.rspamd.bind}:${toString config.services.redis.servers.rspamd.port}"; - ''; - "worker-controller.inc".text = '' - password = "$2$xkox1hi3so3y61no8ps1enx7p56nh51s$tp8fjciao1goswpcze6g9bb9sbx3mf3kbik1iznybgia36d78jnb"; - ''; - }; - workers = { - rspamd_proxy = { - includes = ["$CONFDIR/worker-proxy.inc"]; - bindSockets = ["*:11332"]; - }; - normal = { - includes = ["$CONFDIR/worker-normal.inc"]; - bindSockets = ["*:11333"]; - }; - controller = { - includes = ["$CONFDIR/worker-controller.inc"]; - bindSockets = ["*:11334"]; - }; - }; - }; - redis.servers.rspamd = { - enable = true; - bind = "127.0.0.1"; - databases = 1; - port = 6380; - settings = { - maxmemory = "500mb"; - maxmemory-policy = "volatile-ttl"; - }; - }; - caddy.virtualHosts."rspamd.int.chir.rs" = { - useACMEHost = "int.chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - - reverse_proxy http://127.0.0.1:11334 - ''; - }; - }; - sops.secrets."services/rspamd/dkim/darkkirb.de" = {owner = "rspamd";}; - sops.secrets."services/rspamd/dkim/miifox.net" = {owner = "rspamd";}; - sops.secrets."services/rspamd/dkim/chir.rs" = {owner = "rspamd";}; - services.prometheus.exporters.rspamd = { - enable = true; - port = 58636; - }; -} diff --git a/config/services/shitalloverme.nix b/config/services/shitalloverme.nix deleted file mode 100644 index ad767115..00000000 --- a/config/services/shitalloverme.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ - system, - pkgs, - ... -}: let - input = "${pkgs.lotte-art}/2022-12-27-rexyi-scatych.jxl"; - sizes = [1 2 4 8 16 32 64 128 256 512 1024 2000]; - formats = ["jxl" "avif" "heic" "webp" "jpeg" "png"]; - mkImage = format: size: let - pkg = pkgs.stdenvNoCC.mkDerivation { - src = pkgs.emptyDirectory; - name = "${toString size}.${format}"; - nativeBuildInputs = with pkgs; [imagemagick]; - buildPhase = '' - mkdir $out - convert ${input} -resize ${toString size}x${toString size} $out/${toString size}.${format} - ''; - installPhase = "true"; - }; - in "${pkg}/${toString size}.${format}"; - files = builtins.concatMap (format: map (mkImage format) sizes) formats; - shitalloverme = pkgs.stdenvNoCC.mkDerivation { - src = pkgs.emptyDirectory; - name = "shitallover.me"; - buildPhase = "true"; - installPhase = '' - mkdir $out - ln -sv ${../../extra/shitalloverme.html} $out/index.html - for f in ${toString files}; do - ln -sv $f $out - done - ''; - }; -in { - services.caddy.virtualHosts."shitallover.me" = { - useACMEHost = "shitallover.me"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - - root * ${shitalloverme} - file_server - ''; - }; -} diff --git a/config/services/synapse.nix b/config/services/synapse.nix deleted file mode 100644 index 7aa4dcbb..00000000 --- a/config/services/synapse.nix +++ /dev/null @@ -1,189 +0,0 @@ -{ - pkgs, - lib, - config, - ... -}: { - services.matrix-synapse = { - enable = true; - settings = { - app_service_config_files = [ - config.sops.secrets."synapse/mautrix-discord".path - config.sops.secrets."synapse/mautrix-telegram".path - config.sops.secrets."synapse/mautrix-whatsapp".path - config.sops.secrets."synapse/doublepuppet".path - config.sops.secrets."synapse/mautrix-slack".path - ]; - server_name = "chir.rs"; - public_baseurl = "https://matrix.chir.rs/"; - default_room_version = 10; - listeners = [ - { - port = 8008; - tls = false; - type = "http"; - x_forwarded = true; - bind_addresses = ["::" "0.0.0.0"]; - resources = [ - { - names = ["client" "federation" "metrics"]; - compress = false; - } - ]; - } - ]; - admin_contact = "mailto:lotte@chir.rs"; - retention = { - enabled = true; - purge_jobs = [ - { - longest_max_lifetime = "3d"; - interval = "12h"; - } - { - shortest_max_lifetime = "3d"; - interval = "1d"; - } - ]; - }; - database = { - name = "psycopg2"; - txn_limit = 10000; - args = { - host = "/run/postgresql"; - user = "matrix-synapse"; - database = "synapse"; - }; - }; - enable_media_repo = false; - url_preview_enabled = true; - url_preview_ip_range_blacklist = [ - "127.0.0.0/8" - "10.0.0.0/8" - "172.16.0.0/12" - "192.168.0.0/16" - "100.64.0.0/10" - "192.0.0.0/24" - "169.254.0.0/16" - "192.88.99.0/24" - "198.18.0.0/15" - "192.0.2.0/24" - "198.51.100.0/24" - "203.0.113.0/24" - "224.0.0.0/4" - "fe80::/10" - "fc00::/7" - "2001:db8::/32" - "ff00::/8" - "fec0::/10" - ]; - enable_registration = false; - signing_key_path = config.sops.secrets."services/synapse/private_key".path; - enable_metrics = true; - experimental_features = { - msc3026_enabled = true; - msc2716_enabled = true; - msc3244_enabled = true; - msc3266_enabled = true; - - msc2409_to_device_messages_enabled = true; - msc3202_device_masquerading_enabled = true; - msc3202_transaction_extensions = true; - msc3706_enabled = true; - faster_joins_enabled = true; - msc3720_enabled = true; - msc2654_enabled = true; - msc2815_enabled = true; - msc3391_enabled = true; - msc3773_enabled = true; - msc3664_enabled = true; - msc3848_enabled = true; - msc3852_enabled = true; - msc3881_enabled = true; - msc3882_enabled = true; - msc3874_enabled = true; - msc3890_enabled = true; - msc3381_polls_enabled = true; - msc3912_enabled = true; - msc1767_enabled = true; - msc3952_intentional_mentions = true; - msc3958_supress_edit_notifs = true; - msc3967_enabled = true; - msc2659_enabled = true; - }; - }; - withJemalloc = true; - }; - sops.secrets."services/synapse/private_key" = {owner = "matrix-synapse";}; - services.postgresql.ensureDatabases = [ - "synapse" - ]; - systemd.services.matrix-synapse.serviceConfig.ExecStartPre = lib.mkForce (pkgs.writeShellScript "dummy" "true"); - - services.caddy.virtualHosts."matrix.int.chir.rs" = { - useACMEHost = "int.chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - - handle /_matrix/* { - reverse_proxy localhost:8008 { - trusted_proxies private_ranges - } - } - handle /_synapse/* { - reverse_proxy localhost:8008 { - trusted_proxies private_ranges - } - } - handle /_matrix/media/* { - reverse_proxy { - to https://matrix.chir.rs - trusted_proxies private_ranges - - header_up Host {upstream_hostport} - - transport http { - versions 1.1 - } - } - } - ''; - }; - - services.caddy.virtualHosts."matrix-admin.int.chir.rs" = { - useACMEHost = "int.chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - - root * ${pkgs.synapse-admin} - file_server - ''; - }; - - sops.secrets."synapse/mautrix-discord" = { - key = "services/mautrix/discord.yaml"; - owner = "matrix-synapse"; - }; - sops.secrets."synapse/mautrix-signal" = { - key = "services/mautrix/signal.yaml"; - owner = "matrix-synapse"; - }; - sops.secrets."synapse/mautrix-telegram" = { - key = "services/mautrix/telegram.yaml"; - owner = "matrix-synapse"; - }; - sops.secrets."synapse/mautrix-whatsapp" = { - key = "services/mautrix/whatsapp.yaml"; - owner = "matrix-synapse"; - }; - sops.secrets."synapse/mautrix-slack" = { - key = "services/mautrix/slack.yaml"; - owner = "matrix-synapse"; - }; - sops.secrets."synapse/doublepuppet" = { - key = "services/mautrix/doublepuppet.yaml"; - owner = "matrix-synapse"; - }; -} diff --git a/config/services/syncthing.nix b/config/services/syncthing.nix deleted file mode 100644 index e801f0bb..00000000 --- a/config/services/syncthing.nix +++ /dev/null @@ -1,8 +0,0 @@ -_: { - services.syncthing = { - enable = true; - guiAddress = "[::]:8384"; - }; - networking.firewall.allowedTCPPorts = [22000]; - networking.firewall.allowedUDPPorts = [22000]; -} diff --git a/config/services/tempo.nix b/config/services/tempo.nix deleted file mode 100644 index cc702833..00000000 --- a/config/services/tempo.nix +++ /dev/null @@ -1,30 +0,0 @@ -{lib, ...}: { - services.tempo = { - enable = true; - settings = { - server = { - http_listen_address = "0.0.0.0"; - http_listen_port = 2144; - graceful_shutdown_timeout = "10s"; - }; - distributor.receivers = { - otlp.protocols = { - grpc = {}; - http = {}; - }; - jaeger.protocols = { - thrift_http = {}; - grpc = {}; - thrift_binary = {}; - thrift_compact = {}; - }; - }; - storage.trace = { - backend = "local"; - wal.path = "/var/lib/tempo/wal"; - local.path = "/var/lib/tempo/blocks"; - }; - }; - }; - services.opentelemetry-collector.enable = lib.mkForce false; -} diff --git a/config/services/tpm2.nix b/config/services/tpm2.nix deleted file mode 100644 index 427ef7bf..00000000 --- a/config/services/tpm2.nix +++ /dev/null @@ -1,4 +0,0 @@ -_: { - security.tpm2.enable = true; - security.tpm2.abrmd.enable = true; -} diff --git a/config/services/uptime-kuma.nix b/config/services/uptime-kuma.nix deleted file mode 100644 index aeae4828..00000000 --- a/config/services/uptime-kuma.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ - pkgs, - lib, - ... -}: { - services.uptime-kuma = { - enable = true; - settings = { - PORT = "45566"; - }; - }; - services.caddy.virtualHosts."status.chir.rs" = { - useACMEHost = "chir.rs"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - - reverse_proxy http://127.0.0.1:45566 - ''; - }; - systemd.services.uptime-kuma.serviceConfig = { - DynamicUser = lib.mkForce false; - User = "uptime-kuma"; - Group = "uptime-kuma"; - }; - users.users.uptime-kuma = { - description = "auth.chir.rs"; - home = "/var/empty"; - useDefaultShell = true; - group = "uptime-kuma"; - isSystemUser = true; - }; - users.groups.uptime-kuma = {}; -} diff --git a/config/services/yiff-stash.nix b/config/services/yiff-stash.nix deleted file mode 100644 index 8d11463b..00000000 --- a/config/services/yiff-stash.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ - config, - system, - pkgs, - ... -}: { - users.users.yiffstash = { - group = "yiffstash"; - isSystemUser = true; - }; - users.groups.yiffstash = {}; - - systemd.services.yiffstash = { - enable = true; - description = "Post yiff to telegram"; - serviceConfig = { - ExecStart = "/bin/sh ${pkgs.yiffstash}"; - User = "yiffstash"; - Group = "yiffstash"; - Type = "oneshot"; - }; - }; - systemd.timers.yiffstash = { - enable = true; - description = "Post yiff to telegram"; - requires = ["yiffstash.service"]; - wantedBy = ["multi-user.target"]; - timerConfig = { - OnUnitActiveSec = "30m"; - RandomizedDelaySec = "1h"; - }; - }; - sops.secrets."caroline/yiffstash/bot-token".owner = "yiffstash"; -} diff --git a/config/sops.nix b/config/sops.nix deleted file mode 100644 index e3114181..00000000 --- a/config/sops.nix +++ /dev/null @@ -1,4 +0,0 @@ -{config, ...}: { - sops.age.sshKeyPaths = ["/etc/ssh/ssh_host_ed25519_key"]; - sops.defaultSopsFile = ../secrets + "/${config.networking.hostName}.yaml"; -} diff --git a/config/specialization.nix b/config/specialization.nix deleted file mode 100644 index f8b9d618..00000000 --- a/config/specialization.nix +++ /dev/null @@ -1,21 +0,0 @@ -# Configuration file configuring specialization -{ - gomod2nix, - pkgs, - config, - lib, - ... -}: { - nixpkgs.overlays = [ - (self: prev: { - custom_xanmod = pkgs.linuxPackagesFor (pkgs.linuxKernel.kernels.linux_xanmod.override { - ignoreConfigErrors = true; - autoModules = true; - kernelPreferBuiltin = true; - enableParallelBuilding = true; - extraConfig = import (../extra/linux/config- + "${config.networking.hostName}.nix"); - }); - }) - gomod2nix.overlays.default - ]; -} diff --git a/config/sway.nix b/config/sway.nix deleted file mode 100644 index 24ac4aae..00000000 --- a/config/sway.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - system, - config, - pkgs, - lib, - ... -}: { - programs.sway.enable = true; - programs.sway.package = config.home-manager.users.darkkirb.wayland.windowManager.sway.package; - security.pam.services.sddm.u2fAuth = true; - services.xserver = { - displayManager.sddm.enable = true; - displayManager.sddm.wayland.enable = true; - }; -} diff --git a/config/sway/cliphist.nix b/config/sway/cliphist.nix new file mode 100644 index 00000000..88049100 --- /dev/null +++ b/config/sway/cliphist.nix @@ -0,0 +1,4 @@ +{ ... }: +{ + services.cliphist.enable = true; +} diff --git a/config/programs/sway.nix b/config/sway/default.nix similarity index 63% rename from config/programs/sway.nix rename to config/sway/default.nix index 33bd1ca3..503e5bdd 100644 --- a/config/programs/sway.nix +++ b/config/sway/default.nix @@ -1,29 +1,15 @@ { - config, pkgs, lib, + config, system, ... -}: let - c = "$"; - switch_window = pkgs.writeScript "switchWindow" '' - set -euo pipefail - tree=$(${pkgs.sway}/bin/swaymsg -t get_tree) - readarray -t win_ids <<< "$(${pkgs.jq}/bin/jq -r '.. | objects | select(has("app_id")) | .id' <<< "$tree")" - readarray -t win_names <<< "$(${pkgs.jq}/bin/jq -r '.. | objects | select(has("app_id")) | .name' <<< "$tree")" - readarray -t win_types <<< "$(${pkgs.jq}/bin/jq -r '.. | objects | select(has("app_id")) | .app_id // .window_properties.class' <<< "$tree")" - switch () { - local k - read -r k - swaymsg "[con_id=${c}{win_ids[$k]}] focus" - } - for k in $(seq 0 $((${c}{#win_ids[@]} - 1))); do - echo -e "${c}{win_types[$k]} - ${c}{win_names[$k]}" - done | rofi -dmenu -markup-rows -i -p window -format i | switch - ''; +}: +let + sway = config.wayland.windowManager.sway.package; screenshot_then_switch = pkgs.writeScript "screenshotThenSwitch" '' ${pkgs.sway-contrib.grimshot}/bin/grimshot "$@" - ${pkgs.sway}/bin/swaymsg mode default + ${sway}/bin/swaymsg mode default ''; mkKeybind = combo: number: [ { @@ -35,21 +21,59 @@ value = "move container to workspace number ${toString number}"; } ]; - keys = ["0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "f1" "f2" "f3" "f4" "f5" "f6" "f7" "f8" "f9" "f10" "f11" "f12"]; - combos = lib.concatMap (k: map (s: "${k}${s}") keys) ["" "ctrl+" "alt+" "ctrl+alt+"]; - keybinds = lib.flatten (lib.zipListsWith mkKeybind combos (lib.lists.range 0 ((lib.lists.length combos) - 1))); -in { + keys = [ + "0" + "1" + "2" + "3" + "4" + "5" + "6" + "7" + "8" + "9" + "f1" + "f2" + "f3" + "f4" + "f5" + "f6" + "f7" + "f8" + "f9" + "f10" + "f11" + "f12" + ]; + combos = lib.concatMap (k: map (s: "${k}${s}") keys) [ + "" + "ctrl+" + "alt+" + "ctrl+alt+" + ]; + keybinds = lib.flatten ( + lib.zipListsWith mkKeybind combos (lib.lists.range 0 ((lib.lists.length combos) - 1)) + ); + +in +{ + programs.fish.loginShellInit = '' + if not set -q DISPLAY + and test (tty) = /dev/tty1 + exec ${sway}/bin/sway + end + ''; + imports = [ - ./wl-clipboard.nix + ./cliphist.nix ./mako.nix ./swayidle.nix ./rofi.nix - ./fcitx.nix - ./kitty.nix ./mpd.nix - ./theming.nix + ./waybar.nix ]; wayland.windowManager.sway = { + systemd.enable = true; enable = true; config = { modifier = "Mod4"; @@ -60,7 +84,7 @@ in { }; }; output = { - "DP-1" = { + "DP-2" = { mode = "2560x1440@74.971Hz"; position = "0 0"; subpixel = "rgb"; @@ -75,11 +99,12 @@ in { transform = "90"; }; }; - keybindings = let - inherit (config.wayland.windowManager.sway.config) modifier; - in - lib.mkOptionDefault ({ - "${modifier}+Return" = "exec ${pkgs.kitty}/bin/kitty"; + keybindings = + let + inherit (config.wayland.windowManager.sway.config) modifier; + in + lib.mkOptionDefault ( + { "${modifier}+d" = "exec ${pkgs.rofi}/bin/rofi -show drun"; "Print" = "mode screenshot"; "XF86AudioRaiseVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ +5%"; @@ -92,9 +117,9 @@ in { "XF86AudioNext" = "exec ${pkgs.mpc-cli}/bin/mpc next"; "XF86AudioPrev" = "exec ${pkgs.mpc-cli}/bin/mpc prev"; "XF86AudioStop" = "exec ${pkgs.mpc-cli}/bin/mpc stop"; - "Mod1+Tab" = "exec ${switch_window}"; } - // (lib.listToAttrs keybinds)); + // (lib.listToAttrs keybinds) + ); bars = [ { command = "${pkgs.waybar}/bin/waybar"; @@ -132,19 +157,14 @@ in { export GDK_DPI_SCALE=1 export MOZ_ENABLE_WAYLAND=1 export _JAVA_AWT_WM_NONREPARENTING=1 - export QT_QPA_PLATFORMTHEME=qt5ct - export GTK_IM_MODULE=fcitx - export QT_IM_MODULE=fcitx - export XMODIFIERS=@im=fcitx - export GLFW_IM_MODULE=ibus - export SDL_IM_MODULE=fcitx '' + ( - if system == "x86_64-linux" - then '' - export VK_ICD_FILENAMES=/run/opengl-driver/share/vulkan/icd.d/intel_icd.x86_64.json:/run/opengl-driver/share/vulkan/icd.d/radeon_icd.x86_64.json:/run/opengl-driver-32/share/vulkan/icd.d/radeon_icd.i686.json:/run/opengl-driver-32/share/vulkan/icd.d/intel_icd.i686.json - '' - else "" + if system == "x86_64-linux" then + '' + export VK_ICD_FILENAMES=/run/opengl-driver/share/vulkan/icd.d/intel_icd.x86_64.json:/run/opengl-driver/share/vulkan/icd.d/radeon_icd.x86_64.json:/run/opengl-driver-32/share/vulkan/icd.d/radeon_icd.i686.json:/run/opengl-driver-32/share/vulkan/icd.d/intel_icd.i686.json + '' + else + "" ); extraConfig = '' default_border none @@ -153,5 +173,20 @@ in { exec_always ${pkgs.xorg.xrandr}/bin/xrandr --output DP-1 --primary ''; }; - home.file.".XCompose".source = ../../extra/.XCompose; + qt = { + enable = true; + platformTheme.name = "qtct"; + }; + systemd.user.services.transparency = { + Unit = { + Description = "transparency"; + After = [ "graphical-session.target" ]; + PartOf = [ "graphical-session.target" ]; + }; + Install.WantedBy = [ "graphical-session.target" ]; + Service = { + ExecStart = "${pkgs.python3.withPackages (ps: with ps; [ i3ipc ])}/bin/python ${./transparency.py}"; + }; + }; + } diff --git a/config/sway/mako.nix b/config/sway/mako.nix new file mode 100644 index 00000000..c6e74ec7 --- /dev/null +++ b/config/sway/mako.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + services.mako = { + enable = true; + defaultTimeout = 30000; + }; +} diff --git a/config/programs/mpd.nix b/config/sway/mpd.nix similarity index 100% rename from config/programs/mpd.nix rename to config/sway/mpd.nix diff --git a/config/programs/rofi.nix b/config/sway/rofi.nix similarity index 63% rename from config/programs/rofi.nix rename to config/sway/rofi.nix index cf75bddd..a1963dc1 100644 --- a/config/programs/rofi.nix +++ b/config/sway/rofi.nix @@ -1,11 +1,10 @@ -{pkgs, ...}: { +{ ... }: +{ programs.rofi = { enable = true; - font = "Noto Sans"; extraConfig = { display-drun = "  Apps "; display-run = "  Run "; }; - terminal = "${pkgs.kitty}/bin/kitty"; }; } diff --git a/config/programs/swayidle.nix b/config/sway/swayidle.nix similarity index 98% rename from config/programs/swayidle.nix rename to config/sway/swayidle.nix index b7a69e8e..f5dccf30 100644 --- a/config/programs/swayidle.nix +++ b/config/sway/swayidle.nix @@ -1,4 +1,5 @@ -{pkgs, ...}: let +{ pkgs, ... }: +let lock-script = pkgs.writeScript "suspend" '' ${pkgs.swaylock}/bin/swaylock -f -c 000000 ${pkgs.mpc-cli}/bin/mpc pause @@ -16,7 +17,8 @@ ${pkgs.procps}/bin/pkill swaylock ${pkgs.mpc-cli}/bin/mpc play ''; -in { +in +{ services.swayidle = { enable = true; events = [ diff --git a/config/programs/transparency.py b/config/sway/transparency.py old mode 100755 new mode 100644 similarity index 100% rename from config/programs/transparency.py rename to config/sway/transparency.py diff --git a/config/programs/waybar.nix b/config/sway/waybar.nix similarity index 86% rename from config/programs/waybar.nix rename to config/sway/waybar.nix index f50e1c99..8d04606c 100644 --- a/config/programs/waybar.nix +++ b/config/sway/waybar.nix @@ -1,4 +1,5 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ programs.waybar = { enable = true; settings = { @@ -59,7 +60,7 @@ tooltip-format = "MPD (connected)"; tooltip-format-disconnected = "MPD (disconnected)"; on-click = "${pkgs.mpc-cli}/bin/mpc toggle"; - on-click-middle = "${pkgs.kitty}/bin/kitty ${pkgs.ncmpcpp}/bin/ncmpcpp"; + on-click-middle = "${pkgs.foot}/bin/foot ${pkgs.ncmpcpp}/bin/ncmpcpp"; on-click-right = "${pkgs.mpc-cli}/bin/mpc stop"; on-scroll-up = "${pkgs.mpc-cli}/bin/mpc seekthrough +00:00:01"; on-scroll-down = "${pkgs.mpc-cli}/bin/mpc seekthrough -00:00:01"; @@ -88,11 +89,18 @@ temperature = { critical-threshold = 80; format = "{temperatureC}℃ {icon}"; - format-icons = ["" "" ""]; + format-icons = [ + "" + "" + "" + ]; }; backlight = { format = "{percent}% {icon}"; - format-icons = ["" ""]; + format-icons = [ + "" + "" + ]; }; battery = { states = { @@ -103,7 +111,13 @@ format-charging = "{capacity}% "; format-plugged = "{capacity}% "; format-alt = "{time} {icon}"; - format-icons = ["" "" "" "" ""]; + format-icons = [ + "" + "" + "" + "" + "" + ]; }; "battery#bat2" = { bat = "BAT2"; @@ -121,7 +135,11 @@ phone = ""; portable = ""; car = ""; - default = ["" "" ""]; + default = [ + "" + "" + "" + ]; }; on-click = "${pkgs.pavucontrol}/bin/pavucontrol"; }; diff --git a/config/systemd-boot.nix b/config/systemd-boot.nix index ba7f9bb6..31c39d0e 100644 --- a/config/systemd-boot.nix +++ b/config/systemd-boot.nix @@ -1,4 +1,14 @@ -_: { - boot.loader.systemd-boot.enable = true; +{ pkgs, ... }: +let + isx86 = pkgs.targetPlatform.system == "x86_64-linux"; +in +{ + boot.loader.systemd-boot = { + enable = true; + memtest86.enable = isx86; + netbootxyz.enable = isx86; + edk2-uefi-shell.enable = isx86; + }; + boot.loader.generic-extlinux-compatible.enable = false; boot.loader.efi.canTouchEfiVariables = true; } diff --git a/config/tailscale.hujson b/config/tailscale.hujson deleted file mode 100644 index 9e63dd8c..00000000 --- a/config/tailscale.hujson +++ /dev/null @@ -1,156 +0,0 @@ -// This file is managed in the nixos-config repo -{ - // Declare static groups of users beyond those in the identity service. - "groups": { - "group:admins": ["DarkKirb@github"], - }, - - // Access control lists. - "acls": [ - // Allow DNS access to the DNS servers - { - "action": "accept", - "src": ["*"], - "dst": ["tag:dnsserver:53"], - }, - // Allow ssh access to build devices - { - "action": "accept", - "src": ["*"], - "dst": ["tag:buildserver:22"], - }, - // Allow all development devices to connect via ssh - { - "action": "accept", - "src": ["tag:devDevice"], - "dst": ["*:22"], - }, - - // http servers running on the servers can be accessed - { - "action": "accept", - "src": ["*"], - "dst": ["tag:server:80", "tag:server:443"], - }, - - // members can access email server - { - "action": "accept", - "src": ["*"], - "dst": [ - "tag:nixos-8gb-fsn1-1:25", // SMTP - "tag:nixos-8gb-fsn1-1:110", // POP3 - "tag:nixos-8gb-fsn1-1:143", // IMAP - "tag:nixos-8gb-fsn1-1:465", // Submission - "tag:nixos-8gb-fsn1-1:587", // SMTPS - "tag:nixos-8gb-fsn1-1:993", // IMAPS - "tag:nixos-8gb-fsn1-1:995", // POP3S - ], - }, - - // opentelemetry stuff - { - "action": "accept", - "src": ["*"], - "dst": [ - "tag:nas:26678", // prometheus - "tag:nas:24545", // loki - "tag:nas:4317", // otel - "tag:nas:2144", // tempo - ], - }, - - // prometheus stuff - { - "action": "accept", - "src": ["tag:nas"], - "dst": [ - "*:31941", - "*:35496", - "*:6379", - "*:8905", - "*:5001", - "*:20855", - "*:58636", - "*:8008", - "*:63174", - "*:1589", - ], - }, - - // postgres and redis - { - "action": "accept", - "src": ["tag:instance-20221213-1915"], - "dst": ["tag:nixos-8gb-fsn1-1:5432", "tag:nixos-8gb-fsn1-1:53538"], - }, - - // syncthing - { - "action": "accept", - "src": ["tag:syncthing"], - "dst": ["tag:syncthing:22000"], - }, - // syncthing admin panel, cups - { - "action": "accept", - "src": ["tag:devDevice"], - "dst": ["tag:nas:8384", "tag:nas:631", "tag:ipfs:5001"], - }, - // Woodpecker agents - { - "action": "accept", - "src": ["tag:woodpeckerRunner"], - "dst": ["tag:nas:9000"], - }, - // IPFS - { - "action": "accept", - "src": ["tag:ipfs"], - "dst": ["tag:ipfs:4001"], - }, - // KDE Connect - { - "action": "accept", - "src": ["tag:kdeconnect"], - "dst": ["tag:kdeconnect:1714-1764"], - }, - ], - - "tagOwners": { - "tag:instance-20221213-1915": ["DarkKirb@github"], - "tag:nixos-8gb-fsn1-1": ["DarkKirb@github"], - "tag:nas": ["DarkKirb@github"], - "tag:moto-g82-5g": ["DarkKirb@github"], - "tag:nutty-noon": ["DarkKirb@github"], - "tag:thinkrac": ["DarkKirb@github"], - "tag:dnsserver": ["DarkKirb@github"], - "tag:buildserver": ["DarkKirb@github"], - "tag:devDevice": ["DarkKirb@github"], - "tag:server": ["DarkKirb@github"], - "tag:syncthing": ["DarkKirb@github"], - "tag:woodpeckerRunner": ["DarkKirb@github"], - "tag:ipfs": ["DarkKirb@github"], - "tag:kdeconnect": ["DarkKirb@github"], - }, - "nodeAttrs": [ - { - // Funnel policy, which lets tailnet members control Funnel - // for their own devices. - // Learn more at https://tailscale.com/kb/1223/tailscale-funnel/ - "target": ["autogroup:member"], - "attr": ["funnel"], - }, - {"target": ["100.75.9.4"], "attr": ["funnel"]}, - ], - "ssh": [ - // The default SSH policy, which lets users SSH into devices they own. - // Learn more at https://tailscale.com/kb/1193/tailscale-ssh/ - { - "action": "check", - "src": ["autogroup:member"], - "dst": ["autogroup:self"], - "users": ["autogroup:nonroot", "root"], - }, - ], -} diff --git a/config/tailscale.nix b/config/tailscale.nix deleted file mode 100644 index a1bdcb19..00000000 --- a/config/tailscale.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - config, - pkgs, - ... -}: { - sops.secrets."tailscale" = { - sopsFile = ../secrets/shared.yaml; - key = "tailscale"; - }; - environment.systemPackages = [pkgs.tailscale]; - services.tailscale.enable = true; - systemd.services.tailscale-autoconnect = { - description = "Automatic connection to Tailscale"; - - # make sure tailscale is running before trying to connect to tailscale - after = ["network-pre.target" "tailscale.service"]; - wants = ["network-pre.target" "tailscale.service"]; - wantedBy = ["multi-user.target"]; - - # set this service as a oneshot job - serviceConfig.Type = "oneshot"; - - # have the job run this shell script - script = with pkgs; '' - # wait for tailscaled to settle - sleep 2 - - # check if we are already authenticated to tailscale - status="$(${tailscale}/bin/tailscale status -json | ${jq}/bin/jq -r .BackendState)" - if [ $status = "Running" ]; then # if so, then do nothing - exit 0 - fi - - # otherwise authenticate with tailscale - ${tailscale}/bin/tailscale up -authkey $(cat ${config.sops.secrets."tailscale".path}) - ''; - }; - - networking.firewall.allowedUDPPorts = [config.services.tailscale.port]; - networking.firewall.trustedInterfaces = ["tailscale0"]; -} diff --git a/config/thinkrac.nix b/config/thinkrac.nix deleted file mode 100644 index e27c2548..00000000 --- a/config/thinkrac.nix +++ /dev/null @@ -1,122 +0,0 @@ -{ - modulesPath, - nixos-hardware, - config, - lib, - pkgs, - ... -}: { - networking.hostName = "thinkrac"; - networking.hostId = "2bfaea87"; - - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - ./systemd-boot.nix - ./desktop.nix - ./services/tpm2.nix - nixos-hardware.nixosModules.lenovo-thinkpad-t470s - #nixos-hardware.nixosModules.common-cpu-intel-kaby-lake - nixos-hardware.nixosModules.common-pc-ssd - ./services/postgres.nix - ]; - hardware.cpu.intel.updateMicrocode = true; - - boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "usb_storage" "sd_mod" "bcache"]; - boot.initrd.kernelModules = []; - boot.kernelModules = ["kvm-intel"]; - boot.extraModulePackages = []; - - fileSystems."/" = { - device = "/dev/nvme0n1p2"; - fsType = "btrfs"; - options = ["compress=zstd"]; - }; - - fileSystems."/boot" = { - device = "/dev/nvme0n1p1"; - fsType = "vfat"; - }; - - services.btrfs.autoScrub = { - enable = true; - fileSystems = ["/"]; - }; - services.snapper.configs.main = { - SUBVOLUME = "/"; - TIMELINE_LIMIT_HOURLY = 5; - TIMELINE_LIMIT_DAILY = 7; - TIMELINE_LIMIT_WEEKLY = 4; - TIMELINE_LIMIT_MONTHLY = 12; - TIMELINE_LIMIT_YEARLY = 0; - }; - services.beesd.filesystems.root = { - spec = "/"; - hashTableSizeMB = 2048; - verbosity = "crit"; - extraOptions = ["--loadavg-target" "5.0"]; - }; - - swapDevices = [ - { - device = "/dev/nvme0n1p3"; - } - ]; - - networking.interfaces.enp0s31f6.useDHCP = true; - system.stateVersion = "23.11"; - services.xserver.videoDrivers = ["modesetting"]; - nix.settings.cores = 4; - - # use the lowest frequency possible, to save power - powerManagement.cpuFreqGovernor = "powersave"; - # lm_sensors who cares - environment.etc."sysconfig/lm_sensors".text = '' - # Generated by sensors-detect on Tue Aug 7 10:54:09 2018 - # This file is sourced by /etc/init.d/lm_sensors and defines the modules to - # be loaded/unloaded. - # - # The format of this file is a shell script that simply defines variables: - # HWMON_MODULES for hardware monitoring driver modules, and optionally - # BUS_MODULES for any required bus driver module (for example for I2C or SPI). - - HWMON_MODULES="coretemp" - ''; - services.thermald.enable = true; - boot.extraModprobeConfig = '' - # enable power savings mode of snd_hda_intel - options snd-hda-intel power_save=1 power_save_controller=y - # enable power savings mode of igpu, enable framebuffer compression, downclock the LVDS connection - options i915 i915_enable_rc6=7 i915_enable_fbc=1 lvds_downclock=1 - # automatically suspend USB devices - options usbcore autosuspend=2 - # Fan control for thinkpads - options thinkpad_acpi fan_control=1 - options zfs zfs_arc_max=4294967296 - ''; - boot.kernel.sysctl = { - # Probably unnecessary - "kernel.nmi_watchdog" = "0"; - "vm.laptop_mode" = "5"; - # The kernel flusher threads will periodically wake up and write `old' data out to disk. This - # tunable expresses the interval between those wakeups, in 100'ths of a second (Default is 500). - "vm.dirty_writeback_centisecs" = "1500"; - }; - networking.networkmanager.enable = true; - users.users.darkkirb.extraGroups = ["networkmanager"]; - nix.settings.max-jobs = 4; - nix.daemonCPUSchedPolicy = "idle"; - nix.daemonIOSchedClass = "idle"; - nix.settings.system-features = [ - "kvm" - "nixos-test" - "big-parallel" - "benchmark" - "gccarch-skylake" - "ca-derivations" - ]; - services.joycond.enable = true; - hardware.bluetooth.enable = true; - services.blueman.enable = true; - services.tailscale.useRoutingFeatures = "client"; - services.prometheus.exporters.node.enabledCollectors = ["wifi"]; -} diff --git a/config/users/darkkirb.nix b/config/users/darkkirb.nix deleted file mode 100644 index d213e99e..00000000 --- a/config/users/darkkirb.nix +++ /dev/null @@ -1,25 +0,0 @@ -{config, ...}: { - users.users.darkkirb = { - createHome = true; - description = "Charlotte 🦝 Delenk"; - extraGroups = [ - "wheel" - "input" - "dialout" - ]; - group = "users"; - home = "/home/darkkirb"; - isNormalUser = true; - uid = 1000; - openssh.authorizedKeys.keys = [ - "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIDXQlfvRUm/z6eP1EjsajIbMibkq9n+ymlbBi7NFiOuaAAAABHNzaDo= ssh:" - ]; - passwordFile = config.sops.secrets."password/darkkirb".path; - }; - sops.secrets."email/lotte@chir.rs" = {owner = "darkkirb";}; - sops.secrets."email/mdelenk@hs-mittweida.de" = {owner = "darkkirb";}; - sops.secrets."password/darkkirb" = { - neededForUsers = true; - }; - services.postgresql.ensureDatabases = ["darkkirb"]; -} diff --git a/config/users/miifox.nix b/config/users/miifox.nix deleted file mode 100644 index 59827e56..00000000 --- a/config/users/miifox.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ - pkgs, - system, - ... -}: { - users.users.miifox = { - createHome = true; - description = "Miifox"; - group = "users"; - home = "/home/miifox"; - isNormalUser = true; - uid = 1001; - openssh.authorizedKeys.keys = [ - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDDIqSXWTE+zpq+DjgZbWI2i+9++SHCEorrfcNT7oDgeah1oGqg84X3f7hIov7FtNYExFj+kaYW7GOOOV9KwwB6W5adfORWvP6domwXdLutDOnkfAXCNAQBBXDRMrAHS9x089xdFJ0+FTVbB8a4QN9DG82uxGPSoMGwZfloYM0/SYahc5x3I2zpMi9PxJJzhrnmSXJx2gMYMkEoMZBxWdlXD/ge192ejMDQ/f4idW7humK9F6TG7j7u5pqUmN/WqZVg1f2mltjUFjRWn+gIDmEpgfqJ3LXQHu90vAWpXVYMsPqHc8A6+Y29YB9BuCflC4gSwKZqTHVp9oaMYJIBEw0xayK5TgsC0EliX7WQK7KacjGHhQPhP/igT+/wTC1I+gdyjOGloVVFOjWJLbpW+9C/Xp/Oy8zcH7YPj9vO8Sc5jZhuRxWgH7vUI9Nl+wjfcbKRx3ihS3HP7zenN9ATr0gO1Cj7yWKn0Mhr6an3hMDFbAA9ppiTr9JC4wvUIrurHiE= caroline the husky@Huskydev" - ]; - }; - home-manager.users.miifox = import ../home-manager/miifox.nix; - systemd.slices."user-1001".sliceConfig = { - CPUQuota = "100%"; - MemoryHigh = "1G"; - MemoryMax = "1.1G"; - }; - services.postgresql.ensureDatabases = ["miifox"]; - services.caddy.virtualHosts."miifox.net" = { - useACMEHost = "miifox.net"; - logFormat = pkgs.lib.mkForce ""; - extraConfig = '' - import baseConfig - - root * ${pkgs.miifox-net} - file_server - ''; - }; -} diff --git a/config/users/remote-build.nix b/config/users/remote-build.nix deleted file mode 100644 index dfafdc68..00000000 --- a/config/users/remote-build.nix +++ /dev/null @@ -1,13 +0,0 @@ -{config, ...}: { - users.users.remote-build = { - createHome = true; - description = "Remote builder"; - group = "users"; - home = "/home/remote-build"; - isNormalUser = true; - uid = 1002; - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINN5Q/L2FyB3DIgdJRYnTGHW3naw5VQ9coOdwHYmv0aZ darkkirb@thinkrac" - ]; - }; -} diff --git a/config/users/root.nix b/config/users/root.nix deleted file mode 100644 index 625c49d4..00000000 --- a/config/users/root.nix +++ /dev/null @@ -1,11 +0,0 @@ -{config, ...}: { - users.users.root = { - openssh.authorizedKeys.keys = [ - "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIDXQlfvRUm/z6eP1EjsajIbMibkq9n+ymlbBi7NFiOuaAAAABHNzaDo= ssh:" - ]; - passwordFile = config.sops.secrets."password/root".path; - }; - sops.secrets."password/root" = { - neededForUsers = true; - }; -} diff --git a/config/vf2.nix b/config/vf2.nix deleted file mode 100644 index bc6018c8..00000000 --- a/config/vf2.nix +++ /dev/null @@ -1,123 +0,0 @@ -{ - lib, - config, - pkgs, - nixpkgs, - nixos-hardware, - riscv-overlay, - lix, - ... -} @ args: let - pkgs_x86_64 = import nixpkgs { - system = "x86_64-linux"; - crossSystem.system = "riscv64-linux"; - overlays = [lix.overlays.default]; - }; -in { - networking.hostName = "vf2"; - networking.hostId = "ad325df9"; - imports = [ - ./services/caddy - ./services/acme.nix - ./users/remote-build.nix - ./systemd-boot.nix - "${nixos-hardware}/starfive/visionfive/v2/default.nix" - ]; - - nixpkgs.config.allowUnsupportedSystem = true; - - nixpkgs.overlays = [ - riscv-overlay.overlays.default - (self: super: { - inherit (pkgs_x86_64) lix nixos-option; - }) - ]; - - nix.settings.substituters = lib.mkForce [ - "https://beam.attic.rs/riscv" - "https://cache.ztier.in" - "https://hydra.int.chir.rs" - ]; - - fileSystems = { - "/boot" = { - device = "/dev/nvme0n1p1"; - fsType = "vfat"; - options = ["nofail"]; - }; - "/" = { - device = "/dev/nvme0n1p2"; - fsType = "btrfs"; - options = ["compress=zstd"]; - }; - }; - swapDevices = [ - { - device = "/dev/nvme0n1p3"; - } - ]; - # hardware.deviceTree.name = "starfive/jh7110-starfive-visionfive-2-v1.3b.dtb"; - home-manager.users.darkkirb = import ./home-manager/darkkirb.nix { - desktop = false; - inherit args; - }; - nix.settings.cores = 4; - nix.settings.max-jobs = 4; - nix.settings.system-features = [ - "nixos-test" - "big-parallel" - "benchmark" - "ca-derivations" - # There are many more combinations but i simply do not care lol - "gccarch-rv64gc_zba_zbb" - "gccarch-rv64gc_zba" - "gccarch-rv64gc_zbb" - "gccarch-rv64gc" - "gccarch-rv32gc_zba_zbb" - "gccarch-rv32gc_zba" - "gccarch-rv32gc_zbb" - "gccarch-rv32gc" - "native-riscv" - ]; - nix.daemonCPUSchedPolicy = "idle"; - nix.daemonIOSchedClass = "idle"; - services.tailscale.useRoutingFeatures = "server"; - - boot.binfmt.emulatedSystems = [ - "x86_64-linux" - ]; - boot.loader.efi.canTouchEfiVariables = true; - boot.loader.generic-extlinux-compatible.enable = false; - #system.requiredKernelConfig = lib.mkForce []; - - system.stateVersion = "24.05"; - - boot.loader.systemd-boot.extraInstallCommands = '' - set -euo pipefail - ${pkgs.coreutils}/bin/cp --no-preserve=mode -r ${config.hardware.deviceTree.package} ${config.boot.loader.efi.efiSysMountPoint}/ - for filename in ${config.boot.loader.efi.efiSysMountPoint}/loader/entries/nixos*-generation-[1-9]*.conf; do - if ! ${pkgs.gnugrep}/bin/grep -q 'devicetree' $filename; then - ${pkgs.coreutils}/bin/echo "devicetree /dtbs/${config.hardware.deviceTree.name}" >> $filename - fi - done - ''; - hardware.deviceTree.name = "starfive/jh7110-starfive-visionfive-2-v1.3b.dtb"; - boot.initrd.kernelModules = [ - "dw_mmc-starfive" - "motorcomm" - "dwmac-starfive" - "cdns3-starfive" - "jh7110-trng" - "phy-jh7110-usb" - "clk-starfive-jh7110-aon" - "clk-starfive-jh7110-stg" - "clk-starfive-jh7110-vout" - "clk-starfive-jh7110-isp" - "clk-starfive-jh7100-audio" - "phy-jh7110-pcie" - "pcie-starfive" - "nvme" - ]; - systemd.network.enable = true; - networking.useNetworkd = true; -} diff --git a/config/wireguard/default.nix b/config/wireguard/default.nix deleted file mode 100644 index 85cf7083..00000000 --- a/config/wireguard/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{config, ...}: { - networking.wireguard = { - enable = true; - interfaces."wg0" = { - listenPort = 51820; - privateKeyFile = "/run/secrets/network/wireguard/privkey"; - peers = [ - # nixos-8gb-fsn1-1 - { - publicKey = "zQY9cAzbRO/FgV92pda7yk0NJFSXzHfi6+tgRq3g/SY="; - allowedIPs = [ - "fd0d:a262:1fa6:e621:b4e1:08ff:e658:6f49/128" - "fd0d:a262:1fa6:e621:b4e1:08ff:e658:6f49/64" - ]; - endpoint = "138.201.155.128:51820"; - persistentKeepalive = 25; - } - { - publicKey = "GHsVg8seCVIMYOidH5+/3EnoXRmi98NXtNTVu+nFcnw="; - allowedIPs = [ - "fd0d:a262:1fa6:e621:746d:4523:5c04:1453/128" - ]; - endpoint = "130.162.60.127:51820"; - persistentKeepalive = 25; - } - ]; - }; - }; - networking.firewall.allowedUDPPorts = [51820]; - sops.secrets."network/wireguard/privkey" = {}; -} diff --git a/config/wireguard/public-server.nix b/config/wireguard/public-server.nix deleted file mode 100644 index fa964644..00000000 --- a/config/wireguard/public-server.nix +++ /dev/null @@ -1,59 +0,0 @@ -{pkgs, ...}: { - networking.wireguard.interfaces.wg0 = { - postSetup = '' - ${pkgs.iptables}/bin/iptables -A FORWARD -i wg0 -j ACCEPT - ${pkgs.iptables}/bin/iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o ens3 -j MASQUERADE - ${pkgs.iptables}/bin/ip6tables -A FORWARD -i wg0 -j ACCEPT - ${pkgs.iptables}/bin/ip6tables -t nat -A POSTROUTING -s fc00::/7 -o ens3 -j MASQUERADE - ''; - - postShutdown = '' - ${pkgs.iptables}/bin/iptables -D FORWARD -i wg0 -j ACCEPT - ${pkgs.iptables}/bin/iptables -t nat -D POSTROUTING -s 10.0.0.0/8 -o ens3 -j MASQUERADE - ${pkgs.iptables}/bin/ip6tables -D FORWARD -i wg0 -j ACCEPT - ${pkgs.iptables}/bin/ip6tables -t nat -D POSTROUTING -s fc00::/7 -o ens3 -j MASQUERADE - ''; - - peers = [ - { - publicKey = "/pQ86rAyPpM2tqzvk7NcKfEm72ENTVCSTTiHf6OrzDw="; - allowedIPs = [ - "fd0d:a262:1fa6:e621:539c:94d8:30e1:fb8b/128" - "10.0.0.1/32" - ]; - } - { - publicKey = "YDh67pqmhWMPNWf1BYXeH4/GTScCWqoWuyIao3ZUcz4="; - allowedIPs = [ - "fd0d:a262:1fa6:e621:480:b859:2a43:7101/128" - "10.0.0.2/32" - ]; - } - { - publicKey = "JZi7Lw8G5W2pnoqJWW6YfJm4OAaxhaneY8i3V9EO8X4="; - allowedIPs = [ - "10.0.0.3/32" - "fd0d:a262:1fa6:e621:66b6:3f04:5583:db63/128" - ]; - } - # thinkrac - { - publicKey = "iKW9nomLyLY2f90UY66POzY8CfDhQrqOLqchERlR3TY="; - allowedIPs = [ - "fd0d:a262:1fa6:e621:f45a:db9f:eb7c:1a3f/128" - ]; - } - # nas - { - publicKey = "RuQImASPojufJMoJ+zZ4FceC+mMN5vhxNR+i+m7g9Bc="; - allowedIPs = [ - "fd0d:a262:1fa6:e621:bc9b:6a33:86e4:873b/128" - ]; - } - ]; - }; - boot.kernel.sysctl = { - "net.ipv4.conf.all.forwarding" = true; - "net.ipv6.conf.all.forwarding" = true; - }; -} diff --git a/config/workarounds/default.nix b/config/workarounds/default.nix deleted file mode 100644 index c1838163..00000000 --- a/config/workarounds/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - self, - system, - ... -}: { - nixpkgs.overlays = [ - self.overlays.${system} - (self: super: { - utillinux = super.util-linux; - }) - ]; -} diff --git a/config/zfs.nix b/config/zfs.nix deleted file mode 100644 index dd973459..00000000 --- a/config/zfs.nix +++ /dev/null @@ -1,8 +0,0 @@ -_: { - boot.supportedFilesystems = ["zfs"]; - boot.zfs.devNodes = "/dev/"; - services.zfs.trim.enable = true; - services.zfs.autoScrub.enable = true; - services.zfs.autoScrub.pools = ["tank" "ssd" "hdd"]; - services.zfs.autoSnapshot.enable = true; -} diff --git a/containers/default-configuration.nix b/containers/default-configuration.nix new file mode 100644 index 00000000..e1399577 --- /dev/null +++ b/containers/default-configuration.nix @@ -0,0 +1,7 @@ +{ system, ... }: +{ + inherit system; + config = import ./default.nix; + autoStart = true; + privateNetwork = true; +} diff --git a/containers/default.nix b/containers/default.nix new file mode 100644 index 00000000..c9efd042 --- /dev/null +++ b/containers/default.nix @@ -0,0 +1,6 @@ +{ nixos-config, ... }: +{ + imports = [ + nixos-config.nixosModules.containers + ]; +} diff --git a/containers/postgresql-configuration.nix b/containers/postgresql-configuration.nix new file mode 100644 index 00000000..8429422f --- /dev/null +++ b/containers/postgresql-configuration.nix @@ -0,0 +1,9 @@ +{ system, ... }: +{ + inherit system; + config = import ./postgresql.nix; + autoStart = true; + privateNetwork = true; + hostBridge = "containers"; + localAddress6 = "fdc6:e7e5:0ba1:1::2/64"; +} diff --git a/containers/postgresql.nix b/containers/postgresql.nix new file mode 100644 index 00000000..7da0a4e1 --- /dev/null +++ b/containers/postgresql.nix @@ -0,0 +1,27 @@ +{ + config, + pkgs, + system, + ... +}: +{ + imports = [ + ./default.nix + ]; + services.postgresql = { + dataDir = "/persistent/${config.services.postgresql.package.psqlSchema}"; + enable = true; + enableJIT = system != "riscv64-linux"; + enableTCPIP = true; + extraPlugins = ps: with ps; [ rum ]; + package = + if config.services.postgresql.enableJIT then pkgs.postgresql_17_jit else pkgs.postgresql_17; + }; + services.postgresqlBackup = { + compression = "zstd"; + compressionLevel = 19; + enable = true; + location = "/persistent/pgbackup"; + }; + system.stateVersion = "24.11"; +} diff --git a/default.nix b/default.nix index 2b625713..1d976a35 100644 --- a/default.nix +++ b/default.nix @@ -1,14 +1,11 @@ -( - import - ( - let - lock = builtins.fromJSON (builtins.readFile ./flake.lock); - in - fetchTarball { - url = lock.nodes.flake-compat.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; - sha256 = lock.nodes.flake-compat.locked.narHash; - } - ) - {src = ./.;} -) -.defaultNix +(import ( + let + lock = builtins.fromJSON (builtins.readFile ./flake.lock); + in + fetchTarball { + url = + lock.nodes.flake-compat.locked.url + or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; + sha256 = lock.nodes.flake-compat.locked.narHash; + } +) { src = ./.; }).defaultNix diff --git a/efi/DB.auth b/efi/DB.auth deleted file mode 100644 index c0d2cf6c..00000000 Binary files a/efi/DB.auth and /dev/null differ diff --git a/efi/DB.cer b/efi/DB.cer deleted file mode 100644 index 76327c0b..00000000 Binary files a/efi/DB.cer and /dev/null differ diff --git a/efi/DB.crt b/efi/DB.crt deleted file mode 100644 index 22ca76fc..00000000 --- a/efi/DB.crt +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFKzCCAxOgAwIBAgIUI3+y+fO534cN62xuXIJV9MFe9IkwDQYJKoZIhvcNAQEL -BQAwJTEjMCEGA1UEAwwaY2hpci5ycyBFRkkgU2VjdXJlIEJvb3QgREIwHhcNMjIw -NDIwMDcwNDU4WhcNMzIwNDE3MDcwNDU4WjAlMSMwIQYDVQQDDBpjaGlyLnJzIEVG -SSBTZWN1cmUgQm9vdCBEQjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -AK68ldtCl7Wv9Np6+5TvrdxI3DYOk5U/GH0WEYT0JNN1PyNBnAUnGcv0Fll/Y1BV -VUcP6LnubHLqh6OuQHQpCyuUigTXPMk/84iMAqYbPCn82iym5bA6OtBcFtrY+ntu -UHBQvyerEFUHibYW112lw1VXNHS/o/PZP7CLMc9oFm9To+seavspGL0XpOOpcxn/ -psDGlSAuVK9/udvMVysCpXs7KO2a6/m3mGzC4wUzXMGClzEc9wY7FAgGJxk85Ndy -RRl3ivQg67I7x+dXz17JD1HZiWMzSdvoh2EgZcmq3VPIJIBkOOjJi6WBREeIxADM -M51anY4N1luD+7fxCEumaZY2oDX7RX9mtN2jD64PX8ERn5h1GOicsbj051QJc5Gf -moR2tXbnr7cZ9f3JpADSGwkleEL0E+STOCajnXlz+QGXetF8kuL7DmS+62SeusaE -lv016QH0Q1Onj0HzqZBtqPGkOX02heGyXez6BysZBTTYhuIoO06k0EG4uzqHCGVo -UmAK8EfYw2OJASP3zKY78Hjr5MSYqZUIS2RLIqw1ujb1cJCvuEbOeM8mBTRaJmAx -w+IX57+cABmSyCgR/qrmDOw7uh69/fAlPR5jjJNUIHGjuqJL856MaFo/OQPm85vI -tPZfhICVgAXqlj1/5yLKAZqBGx3w2CGoJnp+JpyIITM1AgMBAAGjUzBRMB0GA1Ud -DgQWBBTwqZ3TzsEKqqKzKGE0fCn67vB3lzAfBgNVHSMEGDAWgBTwqZ3TzsEKqqKz -KGE0fCn67vB3lzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQCR -PE3EYnPmpGufxQEQqhDqkRVPp5pzVaBbVU1Vo9WF+kJAVnJlh0DpFCwMXEuzn/1u -rtnGCH46p96cxIWrJoIWnuwAuvcTLMvwrkKLHExpPisXJR3ufrYeVhEyBd39Lrl1 -FD9g6FDPMJshsRPhXZLhUKLli6IAbwji2TplCBH4SFDxHoaEezhl9J8tIlQZ6roY -L0A30qoLRQ8Z19DJ3Vhj18S5ibTgRWWcquq9pF3Swv/v4gS6cULPbGSqsnFwqVND -b3pzCdBmRKciGEXGK11nGhd++wcirxJN+U0brl8mHsP7vhX0ztBBxXkfyzo9q7cl -U3p/ae1pCzX0NyRPlYyYMZTs0ZSllDLoztrEGIp16bANOHmfh+f1xszAUYHImVl7 -Zq8J3js/UtnQJD5KZIEQCleXChMJaH6qbtJKpvgqO3RsHQRJDyunNgE7r6bPTfh4 -TP7DhL1QWAgTdfRPzm1qofRwnTRLitRovMDWI/95lLlPbbNL/zGkBqvur3T8fLKx -gE/X7BGHGbARc8tSDdQ81kVOchL8yvud7CMgPOdazP6dmJxcO52S9Q9KpFW/duJi -V9V33wKQe5MCbTV4jtbE6ot245vslGjB/fLt4eP6Hngth0YzbU14FhXXjJofhDq7 -hB0zS9HklS54OtQBvAd7EX732UfEWZi1jeR0LL6rhA== ------END CERTIFICATE----- diff --git a/efi/DB.esl b/efi/DB.esl deleted file mode 100644 index d5e14298..00000000 Binary files a/efi/DB.esl and /dev/null differ diff --git a/efi/KEK.auth b/efi/KEK.auth deleted file mode 100644 index 9870eb88..00000000 Binary files a/efi/KEK.auth and /dev/null differ diff --git a/efi/KEK.cer b/efi/KEK.cer deleted file mode 100644 index 246fa4bf..00000000 Binary files a/efi/KEK.cer and /dev/null differ diff --git a/efi/KEK.crt b/efi/KEK.crt deleted file mode 100644 index b4cc33bc..00000000 --- a/efi/KEK.crt +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFLTCCAxWgAwIBAgIUCg57ZgQLP349Iz6LjZfplKAh+ZQwDQYJKoZIhvcNAQEL -BQAwJjEkMCIGA1UEAwwbY2hpci5ycyBFRkkgU2VjdXJlIEJvb3QgS0VLMB4XDTIy -MDQyMDA3MDQ1OFoXDTMyMDQxNzA3MDQ1OFowJjEkMCIGA1UEAwwbY2hpci5ycyBF -RkkgU2VjdXJlIEJvb3QgS0VLMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC -AgEA7JvQgi2sXsEksXaCd6bQIISP9aBa0dsHUa4ZTCyyGqlOdb3GuZembdnKzjwT -AffWSoaSVUo+GeewHFOOhQNMsAEW/Vm6yNdsyOHKQxgd86WIs4AoD0ngwqx3f9yp -iwjiG6PCW6BroaVAnczOfXXwUdOWNPKCfpZd9YVZ4O6Eiq1rnuWiMtGrpNm20QMJ -oXw/ieTyJzE8GWRoQm3Sk0qfpO0ae8oVkAzeHd78yT+7ciStw+EgXFbwwjTQNovo -C0pAJABP+GFDGcv7mndMJO6Ln6tNZbuZfnboTPr34akxzgLWljplyRhn1l8e9gPy -LH1Yz3SwDq5Hm02k1ZxzF0R7S0gdcLRCmU31FISHE691SBWqMR0subDXfY3aW4Dx -oO9D+JEL1hECtPK4cEBXPIuEUnHofY3kVD820xM5DLVjJCLdyV18HoW/a3FG1fqu -SQvH1EcfLjLwJIY/OJrYiChLFM9wRDuRO7oOjOYIcNg82O7Z3tJi/fjnAXtm66Pm -rLJaMNtTKZj5GIMKQq1Opi38P9yxFhZJHk1CdV5D2L4VCz6EcFLqmoBsAF/njn9f -lQ+2No4o3sDlZEZTjJug7cgMvxqoAIIis7mRKbtUKK6Vk9wjuPLC39gRUNWkVaBs -R9OVgSVz6B1AXbbvfgc5UVVpisdAV2sKvree2Lo7TTb/k18CAwEAAaNTMFEwHQYD -VR0OBBYEFLa0KcdYrySJRfHROjG/1hCqQucZMB8GA1UdIwQYMBaAFLa0KcdYrySJ -RfHROjG/1hCqQucZMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIB -AKXBgO9HRvGqJZ83c9oOanlOM77bs9r6glfoCNRUpSzV4yqzbDUR+PToObk6RowF -hR4uHTBOYtCRAUwE/GlzlAE/pU4fteT8FsZMQq1NxfOYk6xBG8rc5hjtjlplfzZi -TW0xomOjIzzfR4CNKG9OQajGUCHquto1jAikDYSGXTWcaLYgMfqjU0WttIqRckRH -ebW1QOYQN388pirxXS2VTGir6NRNtGE+RWiXF52GveUG1zWKzEHRH3u0W3Wr25oZ -rHCEZLx69BqI/xdZJ9HM8G8U37HiZswbo2M8H6c3MrRVADksK/oTfoi9xvJl1Unr -5O4tIzSqKf0A+ZIxxa/Wg4bu+EVKds7IYb6V5hojIFznydeVWjdlHA++JsWsg2ff -XKhjRrc3TJRQ4FlQWWTXk0j+l3DVIP8UmhICeQwomj27bZ3nDhKwXZW3AliYPK2z -5jlpasnMvpyKuP2rIZlIamUsX0Fp0pjrxKPHiof0dVX1eEmM2OMVbhnjwNttDApJ -C4v/MIRfn0cPMLCXwW4FQqepPekTGUmOVzJKYFuTtdorfSSuvjtqI7iX7//MIey8 -bqxU6vOzY3R00WrLhzxtb/JJ6PQ/tCuoQ2UUEzOnnhqpCXVpfHtgn34pwpfQ+Shb -cBTrK6A68XlxHGudT59lOejkIgSeo30MFQTUGtFoJG+d ------END CERTIFICATE----- diff --git a/efi/KEK.esl b/efi/KEK.esl deleted file mode 100644 index 58cc05db..00000000 Binary files a/efi/KEK.esl and /dev/null differ diff --git a/efi/MS_UEFI_db.esl b/efi/MS_UEFI_db.esl deleted file mode 100644 index 37325b00..00000000 Binary files a/efi/MS_UEFI_db.esl and /dev/null differ diff --git a/efi/MS_Win_db.esl b/efi/MS_Win_db.esl deleted file mode 100644 index 58cb0a1b..00000000 Binary files a/efi/MS_Win_db.esl and /dev/null differ diff --git a/efi/MS_db.esl b/efi/MS_db.esl deleted file mode 100644 index 0534fc02..00000000 Binary files a/efi/MS_db.esl and /dev/null differ diff --git a/efi/PK.auth b/efi/PK.auth deleted file mode 100644 index 0258825d..00000000 Binary files a/efi/PK.auth and /dev/null differ diff --git a/efi/PK.cer b/efi/PK.cer deleted file mode 100644 index 8e3fe67c..00000000 Binary files a/efi/PK.cer and /dev/null differ diff --git a/efi/PK.crt b/efi/PK.crt deleted file mode 100644 index 831e0d5f..00000000 --- a/efi/PK.crt +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFKzCCAxOgAwIBAgIUShalNDCVi3u1Xuh2w5fUYRaCy7kwDQYJKoZIhvcNAQEL -BQAwJTEjMCEGA1UEAwwaY2hpci5ycyBFRkkgU2VjdXJlIEJvb3QgUEswHhcNMjIw -NDIwMDcwNDU3WhcNMzIwNDE3MDcwNDU3WjAlMSMwIQYDVQQDDBpjaGlyLnJzIEVG -SSBTZWN1cmUgQm9vdCBQSzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -AJovNh67rN+Kfj7jQ8TbguMQVwxxoHsznP0s/V07n8WCqAeiJiVJHcHC3Lb0QhVQ -oNRPbfVFG+ZxUyG+R8udnkUYGAxs6hFGFTiTlachJKah8cHl1Pj2EcAOOi31IjGV -4yxm4jxDWb5F4tBhtJSPeVida1YujjfGrbsdfvG3sK4vL9sfyhN27k08PQko313s -cB5OXgU2XJmd1yLHlHiBxQ2n6xZQ42V8Z3l5XRBHbd6p2vxPYQB/D42G99tkpTs/ -dMvrLPrWgSCOX/crU8ACM0LydCBOcEa66mG5x2/GcAtrapXe/PssIqhnJOPUYbgk -T/cYHnWVfb5yCrLWxdTIvnIyMzg8wVn4fOeWZxgaqjPIhtV/7x41r6zJc7UHvtGR -yhsEtc9hzibjmrnKBie4BDWUk7zR30fMz4YZv38oQKBpzknFosS3Uzerlhx33JgA -rYxJiiURiOaIPPN+C9WmYtQr50DLAMALj0yAzVNb1au+tmNqGQEvRdZxHhCtS0HR -S8T6tJW5cZ+Uf3X0akColgoYy8pe3QolNuB6j4kGfJLu6mmQoroMkFq0qyl8i6Pu -JhaUtMMd/F01cYpNYNJYIU/DK1G06a90NP7WHq+sU3+73fzb68od3gFyvs39CHCG -BiVhMt/BJnYLN62TMYj6HLVm/L5kAWFqjzCv/5JszXorAgMBAAGjUzBRMB0GA1Ud -DgQWBBTnW/GkNs3TfMLOo/tv5dTBQssnTDAfBgNVHSMEGDAWgBTnW/GkNs3TfMLO -o/tv5dTBQssnTDAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQBs -cw4zlwfLJCQAq44V7LoAYE8xuoQxiTeY90D2yAaaXlhX+UxmOXa39Vg3bB6ia3oP -kTuLmI55WMg8IkXiwNIpCJcmFqZ2wMjfzmdvn2zeDWDK/aGM80xcpytunhxDe5Fs -dy2CnBveUf1fdhyogV4bo+/CvLqJjH3oSSuDVC8SqTUHS2T/1GNgLsRIHHVpPzDq -7+vtTe2F7uEA003u+UhLy9zTwcb/kkRPeDRmzJioBcPuL5neH7wibbSQ2yLmZjGq -D9rjCjXy5iWR678wfW1c7eP3ZVBTRVbZPgNfeXNg8rVFrEC9eZGYrx0FONzBq8zc -d8BHfunjiKvLJYtA5llc+RE+CeRug9SRxfpyevU36nULKM0t1fJdKmaG7sC2LesI -4LdLen5q07Py1xfbDf35fODmw8GR0rCv6kJNqqOgjRJiuLFTySPR6QHz0P5D79Uk -T3tBurtyVNu7S+jwhUvEcpHK78hfjN0zqQD7q46n56JkaCfOA9IT0a4Qw3rzQuu4 -h5su9/to2hAe2W58kzO7SatLPT8fgx1L/3z5Ne+DvLeNy8Qa1lKo/2GRL3Md6pj8 -Q8sAI4WHuof8Fyj1TGLFqJeRelaiMaz+dyG0AICBrsQlNBbhV99ZgZ3GApS+y7wg -vqA7lksMrNOoB/59UIPs97u+OulNx4MXqtQTCGPaNQ== ------END CERTIFICATE----- diff --git a/efi/PK.esl b/efi/PK.esl deleted file mode 100644 index 7412f975..00000000 Binary files a/efi/PK.esl and /dev/null differ diff --git a/efi/add_MS_db.auth b/efi/add_MS_db.auth deleted file mode 100644 index dd557aaf..00000000 Binary files a/efi/add_MS_db.auth and /dev/null differ diff --git a/efi/mkkeys.sh b/efi/mkkeys.sh deleted file mode 100755 index 2d30db4a..00000000 --- a/efi/mkkeys.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash -# Copyright (c) 2015 by Roderick W. Smith -# Licensed under the terms of the GPL v3 - -echo -n "Enter a Common Name to embed in the keys: " -read NAME - -openssl req -new -x509 -newkey rsa:4096 -subj "/CN=$NAME PK/" -keyout PK.key \ - -out PK.crt -days 3650 -nodes -sha256 -openssl req -new -x509 -newkey rsa:4096 -subj "/CN=$NAME KEK/" -keyout KEK.key \ - -out KEK.crt -days 3650 -nodes -sha256 -openssl req -new -x509 -newkey rsa:4096 -subj "/CN=$NAME DB/" -keyout DB.key \ - -out DB.crt -days 3650 -nodes -sha256 -openssl x509 -in PK.crt -out PK.cer -outform DER -openssl x509 -in KEK.crt -out KEK.cer -outform DER -openssl x509 -in DB.crt -out DB.cer -outform DER - -GUID=`python3 -c 'import uuid; print(str(uuid.uuid1()))'` -echo $GUID > myGUID.txt - -cert-to-efi-sig-list -g $GUID PK.crt PK.esl -cert-to-efi-sig-list -g $GUID KEK.crt KEK.esl -cert-to-efi-sig-list -g $GUID DB.crt DB.esl -rm -f noPK.esl -touch noPK.esl - -sign-efi-sig-list -t "$(date --date='1 second' +'%Y-%m-%d %H:%M:%S')" \ - -k PK.key -c PK.crt PK PK.esl PK.auth -sign-efi-sig-list -t "$(date --date='1 second' +'%Y-%m-%d %H:%M:%S')" \ - -k PK.key -c PK.crt PK noPK.esl noPK.auth -sign-efi-sig-list -t "$(date --date='1 second' +'%Y-%m-%d %H:%M:%S')" \ - -k PK.key -c PK.crt KEK KEK.esl KEK.auth -sign-efi-sig-list -t "$(date --date='1 second' +'%Y-%m-%d %H:%M:%S')" \ - -k KEK.key -c KEK.crt db DB.esl DB.auth - -chmod 0600 *.key - -echo "" -echo "" -echo "For use with KeyTool, copy the *.auth and *.esl files to a FAT USB" -echo "flash drive or to your EFI System Partition (ESP)." -echo "For use with most UEFIs' built-in key managers, copy the *.cer files;" -echo "but some UEFIs require the *.auth files." -echo "" diff --git a/efi/myGUID.txt b/efi/myGUID.txt deleted file mode 100644 index 7281d52d..00000000 --- a/efi/myGUID.txt +++ /dev/null @@ -1 +0,0 @@ -30db5e21-c078-11ec-be5b-00d861d0de1e diff --git a/efi/noPK.auth b/efi/noPK.auth deleted file mode 100644 index 33dd13fb..00000000 Binary files a/efi/noPK.auth and /dev/null differ diff --git a/efi/noPK.esl b/efi/noPK.esl deleted file mode 100644 index e69de29b..00000000 diff --git a/efi/old_KEK.esl b/efi/old_KEK.esl deleted file mode 100644 index 9fa0826b..00000000 Binary files a/efi/old_KEK.esl and /dev/null differ diff --git a/efi/old_PK.esl b/efi/old_PK.esl deleted file mode 100644 index 4b9c2504..00000000 Binary files a/efi/old_PK.esl and /dev/null differ diff --git a/efi/old_db.esl b/efi/old_db.esl deleted file mode 100644 index 88d9baf7..00000000 Binary files a/efi/old_db.esl and /dev/null differ diff --git a/efi/old_dbx.esl b/efi/old_dbx.esl deleted file mode 100644 index 06e07fb5..00000000 Binary files a/efi/old_dbx.esl and /dev/null differ diff --git a/extra/.XCompose b/extra/.XCompose deleted file mode 100644 index cbd78e1d..00000000 --- a/extra/.XCompose +++ /dev/null @@ -1,8838 +0,0 @@ - <0> : "ʘ" - : "ȧ" - : "Ȧ" - : "ǡ" - : "Ǡ" - : "⩪" - : "ḃ" - : "Ḃ" - : "ċ" - : "Ċ" - : "ḋ" - : "Ḋ" - : "̇" - : "ṥ" - : "Ṥ" - : "ṩ" - : "Ṩ" - : "ṧ" - : "Ṧ" - : "ǡ" - : "Ǡ" - : "ȱ" - : "Ȱ" - : "ɟ" - : "ė" - : "Ė" - : "⋵" - : "≐" - : "ḟ" - : "Ḟ" - : "ġ" - : "Ġ" - : "⧊" - : "ḣ" - : "Ḣ" - : "⩧" - : "İ" - : "ı" - : "ȷ" - : "ʘ" - : "ŀ" - : "Ŀ" - : "⩑" - : "⩒" - : "∸" - : "ṁ" - : "Ṁ" - : "ṥ" - : "Ṥ" - : "ṥ" - : "Ṥ" - : "ṧ" - : "Ṧ" - : "⩧" - : "ṩ" - : "Ṩ" - : "ẛ" - : "ͼ" - : "Ͼ" - : "Ͼ" - : "𝚤" - : "𝚥" - : "⨰" - : "ṅ" - : "Ṅ" - : "˙" - : "ȱ" - : "Ȱ" - : "ȯ" - : "Ȯ" - : "∔" -

: "ṗ" -

: "ṕ" -

: "Ṕ" - : "⇁" - : "ŕ" - : "Ŕ" - : "ṥ" - : "Ṥ" - : "'" - : "ś" - : "Ś" - : "Ɔ́" - : "Ǝ́" - : "Ɛ́" - : "Ɩ́" - : "Ʊ́" - : "Ʋ́" - : "ǝ́" - : "ɔ́" - : "ɛ́" - : "ɩ́" - : "ʊ́" - : "ʋ́" - : "ϓ" - : "ϓ" - : "ớ" - : "Ớ" - : "ứ" - : "Ứ" - : "ἄ" - : "ἅ" - : "Ἄ" - : "Ἅ" - : "ἔ" - : "ἕ" - : "Ἔ" - : "Ἕ" - : "ἤ" - : "ἥ" - : "Ἤ" - : "Ἥ" - : "ἴ" - : "ἵ" - : "Ἴ" - : "Ἵ" - : "ὄ" - : "ὅ" - : "Ὄ" - : "Ὅ" - : "ὔ" - : "ὕ" - : "Ὕ" - : "ὤ" - : "ὥ" - : "Ὤ" - : "Ὥ" - : "ǘ" - : "Ǘ" - : "ứ" - : "Ứ" - : "↿" - : "ṹ" - : "Ṹ" - : "ú" - : "Ú" - : "ǘ" - : "Ǘ" - : "ẃ" - : "Ẃ" - : "ý" - : "Ý" - : "ź" - : "Ź" - : "ḫ" - : "Ḫ" - : "ḓ" - : "Ḓ" - : "ḙ" - : "Ḙ" - : "ḽ" - : "Ḽ" - : "ṋ" - : "Ṋ" - : "ṱ" - : "Ṱ" - : "ṷ" - : "Ṷ" - : "," - : "̦" - : "," - : "ș" - : "Ș" - : "ț" - : "Ț" - : "⩷" - : "ṳ" - : "Ṳ" - : "ạ" - : "Ạ" - : "ặ" - : "Ặ" - : "ậ" - : "Ậ" - : "ḅ" - : "Ḅ" - : "џ" - : "Џ" - : "ḍ" - : "Ḍ" - : "ṩ" - : "Ṩ" - : "̣" - : "ặ" - : "Ặ" - : "ậ" - : "Ậ" - : "ệ" - : "Ệ" - : "ộ" - : "Ộ" - : "ợ" - : "Ợ" - : "ự" - : "Ự" - : "ḹ" - : "Ḹ" - : "ṝ" - : "Ṝ" - : "ệ" - : "Ệ" - : "ẹ" - : "Ẹ" - : "⩦" - : "ḥ" - : "Ḥ" - : "ị" - : "Ị" - : "ḳ" - : "Ḳ" - : "ḷ" - : "Ḷ" - : "⟑" - : "⨪" - : "ṃ" - : "Ṃ" - : "ợ" - : "Ợ" - : "ự" - : "Ự" - : "ṇ" - : "Ṇ" - : "." - : "ộ" - : "Ộ" - : "ợ" - : "Ợ" - : "ọ" - : "Ọ" - : "⨥" - : "ṛ" - : "Ṛ" - : "ṩ" - : "Ṩ" - : "." - : "ṣ" - : "Ṣ" - : "ṭ" - : "Ṭ" - : "ợ" - : "Ợ" - : "ự" - : "Ự" - : "ự" - : "Ự" - : "ụ" - : "Ụ" - : "ṿ" - : "Ṿ" - : "ẉ" - : "Ẉ" - : "ỵ" - : "Ỵ" - : "ẓ" - : "Ẓ" - : "ḇ" - : "Ḇ" - : "ḏ" - : "Ḏ" - : "ẖ" - : "ḵ" - : "Ḵ" - : "ḻ" - : "Ḻ" - : "ṉ" - : "Ṉ" - : "ṟ" - : "Ṟ" - : "ṯ" - : "Ṯ" - : "ẕ" - : "Ẕ" - : "ḁ" - : "Ḁ" - : "⫰" - : "ḛ" - : "Ḛ" - : "ḭ" - : "Ḭ" - : "⨦" - : "ṵ" - : "Ṵ" - : "ă" - : "Ă" - : "ắ" - : "Ắ" - : "ằ" - : "Ằ" - : "ẳ" - : "Ẳ" - : "ẵ" - : "Ẵ" - : "ӑ" - : "Ӑ" - : "ӗ" - : "Ӗ" - : "й" - : "Й" - : "ў" - : "Ў" - : "ӂ" - : "Ӂ" - : "ắ" - : "Ắ" - : "ặ" - : "Ặ" - : "̆" - : "ҋ" - : "Ҋ" - : "ḝ" - : "Ḝ" - : "ằ" - : "Ằ" - : "ẳ" - : "Ẳ" - : "ẵ" - : "Ẵ" - : "ĕ" - : "Ĕ" - : "☿" - : "ğ" - : "Ğ" - : "ᾰ" - : "Ᾰ" - : "ῐ" - : "Ῐ" - : "ῠ" - : "Ῠ" - : "ḫ" - : "Ḫ" - : "ĭ" - : "Ĭ" - : "ḝ" - : "Ḝ" - : "ḝ" - : "Ḝ" - : "ặ" - : "Ặ" - : "Ᾰ" - : "Ᾰ" - : "Ῐ" - : "Ῐ" - : "Ῠ" - : "Ῠ" - : "˘" - : "ŏ" - : "Ŏ" - : "˘" - : "Ḝ" - : "ḝ" - : "Ặ" - : "ặ" - : "ŭ" - : "Ŭ" - <0> : "₀" - <1> : "₁" - <2> : "₂" - <3> : "₃" - <4> : "₄" - <5> : "₅" - <6> : "₆" - <7> : "₇" - <8> : "₈" - <9> : "₉" - : "ǎ" - : "Ǎ" - : "č" - : "Č" - : "ď" - : "Ď" - : "ṧ" - : "Ṧ" - : "̌" - : "ǚ" - : "Ǚ" - : "ě" - : "Ě" - : "≚" - : "ǯ" - : "Ǯ" - : "ǧ" - : "Ǧ" - : "ȟ" - : "Ȟ" - : "ǐ" - : "Ǐ" - : "ǰ" - : "ǩ" - : "Ǩ" - : "₀" - : "₁" - : "₂" - : "₃" - : "₄" - : "₅" - : "₆" - : "₇" - : "₈" - : "₉" - : "↢" - : "ľ" - : "Ľ" - : "₋" - : "dž" - : "Dž" - : "DŽ" - : "ǚ" - : "Ǚ" - : "ǯ" - : "Ǯ" - : "ň" - : "Ň" - : "ˇ" - : "ǒ" - : "Ǒ" - : "₍" - : "₎" - : "₊" - : "↣" - : "ř" - : "Ř" - : "ṧ" - : "Ṧ" - : "ˇ" - : "š" - : "Š" - : "ť" - : "Ť" - : "Ɔ̌" - : "Ǝ̌" - : "Ɛ̌" - : "Ɩ̌" - : "Ʊ̌" - : "Ʋ̌" - : "ǝ̌" - : "Dž" - : "ɔ̌" - : "ɛ̌" - : "ɩ̌" - : "ʊ̌" - : "ʋ̌" - : "ǚ" - : "Ǚ" - : "ǔ" - : "Ǔ" - : "ǚ" - : "Ǚ" - : "ž" - : "Ž" - : "ą" - : "Ą" - : "ḉ" - : "Ḉ" - : "ç" - : "Ç" - : "₵" - : "₵" - : "ҷ" - : "Ҷ" - : "ң" - : "Ң" - : "ҫ" - : "Ҫ" - : "ӷ" - : "Ӷ" - : "ҳ" - : "Ҳ" - : "қ" - : "Қ" - : "щ" - : "Щ" - : "ҭ" - : "Ҭ" - : "ҙ" - : "Ҙ" - : "җ" - : "Җ" - : "ḑ" - : "Ḑ" - : "ḉ" - : "Ḉ" - : "ᾅ" - : "ᾕ" - : "ᾥ" - : "ᾭ" - : "ᾝ" - : "ᾝ" - : "ᾍ" - : "ᾍ" - : "ᾝ" - : "ᾝ" - : "ᾄ" - : "ᾔ" - : "ᾤ" - : "ᾬ" - : "ᾜ" - : "ᾜ" - : "ᾌ" - : "ᾌ" - : "ᾜ" - : "ᾜ" - : "ᾴ" - : "ῄ" - : "ῴ" - : "ḝ" - : "Ḝ" - : "̧" - : "₵" - : "₵" - : "ᾅ" - : "ᾕ" - : "ᾥ" - : "ᾭ" - : "ᾝ" - : "ᾝ" - : "ᾍ" - : "ᾍ" - : "ᾝ" - : "ᾝ" - : "ᾃ" - : "ᾓ" - : "ᾣ" - : "ᾫ" - : "ᾛ" - : "ᾛ" - : "ᾋ" - : "ᾋ" - : "ᾛ" - : "ᾛ" - : "ᾇ" - : "ᾗ" - : "ᾧ" - : "ᾯ" - : "ᾟ" - : "ᾟ" - : "ᾏ" - : "ᾏ" - : "ᾟ" - : "ᾟ" - : "ᾁ" - : "ᾑ" - : "ᾡ" - : "ᾩ" - : "ᾙ" - : "ᾉ" - : "ᾙ" - : "ᾃ" - : "ᾓ" - : "ᾣ" - : "ᾫ" - : "ᾛ" - : "ᾛ" - : "ᾋ" - : "ᾋ" - : "ᾛ" - : "ᾛ" - : "ᾂ" - : "ᾒ" - : "ᾢ" - : "ᾪ" - : "ᾚ" - : "ᾚ" - : "ᾊ" - : "ᾊ" - : "ᾚ" - : "ᾚ" - : "ᾲ" - : "ῂ" - : "ῲ" - : "ᾄ" - : "ᾔ" - : "ᾤ" - : "ᾬ" - : "ᾜ" - : "ᾜ" - : "ᾌ" - : "ᾌ" - : "ᾜ" - : "ᾜ" - : "ᾂ" - : "ᾒ" - : "ᾢ" - : "ᾪ" - : "ᾚ" - : "ᾚ" - : "ᾊ" - : "ᾊ" - : "ᾚ" - : "ᾚ" - : "ᾆ" - : "ᾖ" - : "ᾦ" - : "ᾮ" - : "ᾞ" - : "ᾞ" - : "ᾎ" - : "ᾎ" - : "ᾞ" - : "ᾞ" - : "ᾀ" - : "ᾐ" - : "ᾠ" - : "ᾨ" - : "ᾘ" - : "ᾈ" - : "ᾘ" - : "ᾇ" - : "ᾗ" - : "ᾧ" - : "ᾯ" - : "ᾟ" - : "ᾟ" - : "ᾏ" - : "ᾏ" - : "ᾟ" - : "ᾟ" - : "ᾆ" - : "ᾖ" - : "ᾦ" - : "ᾮ" - : "ᾞ" - : "ᾞ" - : "ᾎ" - : "ᾎ" - : "ᾞ" - : "ᾞ" - : "ᾷ" - : "ῇ" - : "ῷ" - : "ę" - : "Ę" - : "ģ" - : "Ģ" - : "ᾳ" - : "ῃ" - : "ῳ" - : "ῼ" - : "ḩ" - : "Ḩ" - : "į" - : "Į" - : "ķ" - : "Ķ" - : "ļ" - : "Ļ" - : "ҿ" - : "Ҿ" - : "ῌ" - : "ῌ" - : "ᾼ" - : "ᾼ" - : "ῌ" - : "ῌ" - : "ņ" - : "Ņ" - : "¸" - : "ǫ" - : "Ǫ" - : "ŗ" - : "Ŗ" - : "¸" - : "ş" - : "Ş" - : "ţ" - : "Ţ" - : "Ḝ" - : "ḝ" - : "ų" - : "Ų" - <0> : "⁰" - <1> : "¹" - <2> : "²" - <3> : "³" - <4> : "⁴" - <5> : "⁵" - <6> : "⁶" - <7> : "⁷" - <8> : "⁸" - <9> : "⁹" - : "â" - : "Â" - : "ấ" - : "Ấ" - : "ầ" - : "Ầ" - : "ẩ" - : "Ẩ" - : "⩯" - : "ẫ" - : "Ẫ" - : "ĉ" - : "Ĉ" - : "я" - : "Я" - : "љ" - : "Љ" - : "њ" - : "Њ" - : "р̂" - : "Р̂" - : "є" - : "Є" - : "и̂" - : "И̂" - : "ю" - : "Ю" - : "ъ" - : "Ъ" - : "у̂" - : "У̂" - : "ᶝ" - : "ᶽ" - : "ấ" - : "Ấ" - : "ế" - : "Ế" - : "ố" - : "Ố" - : "ậ" - : "Ậ" - : "ệ" - : "Ệ" - : "ộ" - : "Ộ" - : "̂" - : "ầ" - : "Ầ" - : "ề" - : "Ề" - : "ồ" - : "Ồ" - : "ẩ" - : "Ẩ" - : "ể" - : "Ể" - : "ổ" - : "Ổ" - : "ᶤ" - : "ᶧ" - : "ᶡ" - : "ᶡ" - : "ᶧ" - : "ᶶ" - : "ẫ" - : "Ẫ" - : "ễ" - : "Ễ" - : "ỗ" - : "Ỗ" - : "↡" - : "ế" - : "Ế" - : "ê" - : "Ê" - : "ề" - : "Ề" - : "ể" - : "Ể" - : "⋯" - : "≙" - : "ễ" - : "Ễ" - : "ĝ" - : "Ĝ" - : "⃗" - : "ᵅ" - : "ᵋ" - : "ᶷ" - : "ĥ" - : "Ĥ" - : "î" - : "Î" - : "ĵ" - : "Ĵ" - : "⁰" - : "¹" - : "²" - : "³" - : "⁴" - : "⁵" - : "⁶" - : "⁷" - : "⁸" - : "⁹" - : "⁺" - : "⁼" - : "²" - : "⁻" - : "↞" - : "⃖" - : "⁻" - <3> <3> : "ᶟ" - : "ꜛ" - : "ᶞ" - : "ᵊ" - : "ậ" - : "Ậ" - : "ệ" - : "Ệ" - : "ộ" - : "Ộ" - : "ᶢ" - : "ᶦ" - : "ᶮ" - : "ᶫ" - : "ᶩ" - : "ᶤ" - : "ᶧ" - : "ᶱ" - : "ᶶ" - : "ᵑ" - : "ᶯ" - : "ᶰ" - : "ᶴ" - : "℠" - : "℠" - : "℠" - : "℠" - : "™" - : "™" - : "™" - : "™" - : "ª" - : "ʰ" - : "ⁱ" - : "ʲ" - : "ˡ" - : "ⁿ" - : "º" - : "ʳ" - : "ˢ" - : "ˠ" - : "ʱ" - : "ʴ" - : "ʵ" - : "ʶ" - : "ˤ" - : "ʷ" - : "ˣ" - : "ʸ" - : "ª" - : "ʰ" - : "ⁱ" - : "ʲ" - : "ˡ" - : "ⁿ" - : "º" - : "ʳ" - : "ˢ" - : "ˠ" - : "ʱ" - : "ʴ" - : "ʵ" - : "ʶ" - : "ˤ" - : "ʷ" - : "ˣ" - : "ʸ" - : "ꜜ" - : "ᶹ" - : "ᶾ" - : "ᶾ" - : "̽" - : "ˆ" - : "ố" - : "Ố" - : "ồ" - : "Ồ" - : "ổ" - : "Ổ" - : "ô" - : "Ô" - : "ỗ" - : "Ỗ" - : "⁽" - : "⁾" - : "⨣" - : "ˀ" - : "↠" - : "^" - : "ŝ" - : "Ŝ" - : "Ɔ̂" - : "Ǝ̂" - : "Ɛ̂" - : "Ɩ̂" - : "Ʊ̂" - : "Ʋ̂" - : "ǝ̂" - : "ɔ̂" - : "ɛ̂" - : "ɩ̂" - : "ʊ̂" - : "ʋ̂" - : "ʱ" - : "ᶨ" - : "ᶬ" - : "ᵑ" - : "ᶳ" - : "ʵ" - : "ˠ" - : "ᶼ" - : "ᶲ" - : "Ậ" - : "ậ" - : "Ệ" - : "ệ" - : "Ộ" - : "ộ" - : "ᵄ" - : "ᵓ" - : "ᶛ" - : "ᶣ" - : "̚" - : "ᶭ" - : "ᵚ" - : "ˁ" - : "↞" - : "ʴ" - : "ʶ" - : "ᶺ" - : "⁻" - : "㆒" - : "㆜" - : "㆔" - : "㆖" - : "㆘" - : "㆛" - : "㆗" - : "㆚" - : "㆓" - : "㆟" - : "㆕" - : "㆞" - : "㆝" - : "㆙" - : "ы" - : "Ы" - : "↟" - : "û" - : "Û" - : "ŵ" - : "Ŵ" - : "ŷ" - : "Ŷ" - : "ẑ" - : "Ẑ" - : "؋" - : "₳" - : "฿" - : "₱" - : "¢" - : "₡" - : "₵" - : "₵" - : "₫" - : "₯" - : "₵" - : "₵" - : "¤" - : "₠" - : "€" - : "₣" - : "ƒ" - : "₲" - : "₲" - : "₴" - : "₴" - : "៛" - : "﷼" - : "₭" - : "₭" - : "£" - : "₤" - : "₥" - : "ℳ" - : "₦" - : "₦" - : "¤" - : "૱" - : "௹" -

: "₧" -

: "₰" - : "₢" - : "₨" - : "$" - : "₪" - : "¤" - : "৳" - : "₮" - : "৲" - : "৲" - : "元" - : "圓" - : "₩" - : "₩" - : "¥" - : "円" - : "ᾅ" - : "ᾕ" - : "ᾥ" - : "ᾭ" - : "ᾝ" - : "ᾝ" - : "ᾍ" - : "ᾍ" - : "ᾝ" - : "ᾝ" - : "ἅ" - : "ἕ" - : "ἥ" - : "ἵ" - : "ὥ" - : "Ὥ" - : "ὅ" - : "ὕ" - : "Ἥ" - : "Ἥ" - : "Ἅ" - : "Ἅ" - : "Ἕ" - : "Ἕ" - : "Ἥ" - : "Ἥ" - : "Ἵ" - : "Ἵ" - : "Ὅ" - : "Ὅ" - : "Ὕ" - : "Ὕ" - : "ᾅ" - : "ᾕ" - : "ᾥ" - : "ᾭ" - : "ᾝ" - : "ᾝ" - : "ᾍ" - : "ᾍ" - : "ᾝ" - : "ᾝ" - : "ᾃ" - : "ᾓ" - : "ᾣ" - : "ᾫ" - : "ᾛ" - : "ᾛ" - : "ᾋ" - : "ᾋ" - : "ᾛ" - : "ᾛ" - : "ᾇ" - : "ᾗ" - : "ᾧ" - : "ᾯ" - : "ᾟ" - : "ᾟ" - : "ᾏ" - : "ᾏ" - : "ᾟ" - : "ᾟ" - : "ᾁ" - : "ᾑ" - : "ᾡ" - : "ᾩ" - : "ᾙ" - : "ᾙ" - : "ᾉ" - : "ᾉ" - : "ᾙ" - : "ᾙ" - : "̔" - : "ᾃ" - : "ᾓ" - : "ᾣ" - : "ᾫ" - : "ᾛ" - : "ᾛ" - : "ᾋ" - : "ᾋ" - : "ᾛ" - : "ᾛ" - : "ἃ" - : "ἓ" - : "ἣ" - : "ἳ" - : "ὣ" - : "Ὣ" - : "ὃ" - : "ὓ" - : "Ἣ" - : "Ἣ" - : "Ἃ" - : "Ἃ" - : "Ἓ" - : "Ἓ" - : "Ἣ" - : "Ἣ" - : "Ἳ" - : "Ἳ" - : "Ὃ" - : "Ὃ" - : "Ὓ" - : "Ὓ" - : "ʯ" - : "ᾇ" - : "ᾗ" - : "ᾧ" - : "ᾯ" - : "ᾟ" - : "ᾟ" - : "ᾏ" - : "ᾏ" - : "ᾟ" - : "ᾟ" - : "ἇ" - : "ἧ" - : "ἷ" - : "ὧ" - : "Ὧ" - : "ὗ" - : "Ἧ" - : "Ἧ" - : "Ἇ" - : "Ἇ" - : "Ἧ" - : "Ἧ" - : "Ἷ" - : "Ἷ" - : "Ὗ" - : "Ὗ" - : "ἁ" - : "Ἁ" - : "ἑ" - : "Ἑ" - : "ἡ" - : "Ἡ" - : "ἱ" - : "Ἱ" - : "ὡ" - : "Ὡ" - : "ὁ" - : "Ὁ" - : "ῥ" - : "Ῥ" - : "ὑ" - : "Ὑ" - : "Ἡ" - : "Ἡ" - : "Ἁ" - : "Ἁ" - : "Ἑ" - : "Ἑ" - : "Ῥ" - : "Ῥ" - : "Ἡ" - : "Ἡ" - : "Ἱ" - : "Ἱ" - : "Ὁ" - : "Ὁ" - : "Ὑ" - : "Ὑ" - : "῾" - : "῾" - : "ä" - : "Ä" - : "̈́" - : "ǟ" - : "Ǟ" - : "̈́" - : "ӓ" - : "Ӓ" - : "ӵ" - : "Ӵ" - : "ӭ" - : "Ӭ" - : "ё" - : "Ё" - : "ӥ" - : "Ӥ" - : "ӧ" - : "Ӧ" - : "ӱ" - : "Ӱ" - : "ӹ" - : "Ӹ" - : "ӟ" - : "Ӟ" - : "ӝ" - : "Ӝ" - : "ΐ" - : "ΰ" - : "ḯ" - : "Ḯ" - : "΅" - : "ǘ" - : "Ǘ" - : "⩷" - : "ǚ" - : "Ǚ" - : "ӹ" - : "Ӹ" - : "̈" - : "ῒ" - : "ῢ" - : "ǜ" - : "Ǜ" - : "ǟ" - : "Ǟ" - : "ȫ" - : "Ȫ" - : "ṻ" - : "Ṻ" - : "ӫ" - : "Ӫ" - : "ῗ" - : "ῧ" - : "ṏ" - : "Ṏ" - : "ë" - : "Ë" - : "ϊ" - : "Ϊ" - : "ϋ" - : "Ϋ" - : "ḧ" - : "Ḧ" - : "ḯ" - : "Ḯ" - : "ï" - : "Ï" - : "ṏ" - : "Ṏ" - : "ӛ" - : "Ӛ" - : "Ϊ" - : "Ϊ" - : "Ϋ" - : "Ϋ" - : "ṻ" - : "Ṻ" - : "ṻ" - : "Ṻ" - : "¨" - : "ȫ" - : "Ȫ" - : "ö" - : "Ö" - : "ṏ" - : "Ṏ" - : "\"" - : "ẗ" - : "Ǚ" - : "ǚ" - : "Ӛ" - : "ӛ" - : "Ӫ" - : "ӫ" - : "ӛ" - : "Ӛ" - : "ǘ" - : "Ǘ" - : "ǜ" - : "Ǜ" - : "ї" - : "Ї" - : "ṻ" - : "Ṻ" - : "ü" - : "Ü" - : "ẅ" - : "Ẅ" - : "ẍ" - : "Ẍ" - : "ÿ" - : "Ÿ" - : "ӳ" - : "Ӳ" - : "̋" - : "˝" - : "ő" - : "Ő" - : "˝" - : "ű" - : "Ű" - : "ȁ" - : "Ȁ" - : "а̏" - : "А̏" - : "р̏" - : "Р̏" - : "е̏" - : "Е̏" - : "и̏" - : "И̏" - : "о̏" - : "О̏" - : "у̏" - : "У̏" - : "ȅ" - : "Ȅ" - : "ȉ" - : "Ȉ" - : "ȍ" - : "Ȍ" - : "ȑ" - : "Ȑ" - : "Ѷ" - : "ѷ" - : "ȕ" - : "Ȕ" - : "à" - : "À" - : "ằ" - : "Ằ" - : "ầ" - : "Ầ" - : "а̀" - : "А̀" - : "р̀" - : "Р̀" - : "ѐ" - : "Ѐ" - : "ѝ" - : "Ѝ" - : "о̀" - : "О̀" - : "у̀" - : "У̀" - : "ằ" - : "Ằ" - : "ᾃ" - : "ᾓ" - : "ᾣ" - : "ᾫ" - : "ᾛ" - : "ᾛ" - : "ᾋ" - : "ᾋ" - : "ᾛ" - : "ᾛ" - : "ᾂ" - : "ᾒ" - : "ᾢ" - : "ᾪ" - : "ᾚ" - : "ᾚ" - : "ᾊ" - : "ᾊ" - : "ᾚ" - : "ᾚ" - : "ᾲ" - : "ῂ" - : "ῲ" - : "ầ" - : "Ầ" - : "ề" - : "Ề" - : "ồ" - : "Ồ" - : "ᾃ" - : "ᾓ" - : "ᾣ" - : "ᾫ" - : "ᾛ" - : "ᾛ" - : "ᾋ" - : "ᾋ" - : "ᾛ" - : "ᾛ" - : "ἃ" - : "Ἃ" - : "ἓ" - : "Ἓ" - : "ἣ" - : "Ἣ" - : "ἳ" - : "Ἳ" - : "ὣ" - : "Ὣ" - : "ὃ" - : "Ὃ" - : "ὓ" - : "Ὓ" - : "Ἣ" - : "Ἃ" - : "Ἓ" - : "Ἣ" - : "Ἳ" - : "Ὃ" - : "Ὓ" - : "ῒ" - : "ῢ" - : "ǜ" - : "Ǜ" - : "̀" - : "ờ" - : "Ờ" - : "ừ" - : "Ừ" - : "ḕ" - : "Ḕ" - : "ṑ" - : "Ṑ" - : "ᾂ" - : "ᾒ" - : "ᾢ" - : "ᾪ" - : "ᾚ" - : "ᾚ" - : "ᾊ" - : "ᾊ" - : "ᾚ" - : "ᾚ" - : "ἂ" - : "Ἂ" - : "ἒ" - : "Ἒ" - : "ἢ" - : "Ἢ" - : "ἲ" - : "Ἲ" - : "ὢ" - : "Ὢ" - : "ὂ" - : "Ὂ" - : "ὒ" - : "Ἢ" - : "Ἂ" - : "Ἒ" - : "Ἢ" - : "Ἲ" - : "Ὂ" - : "ã̀" - : "Ã̀" - : "ẽ̀" - : "Ẽ̀" - : "ĩ̀" - : "Ĩ̀" - : "õ̀" - : "Õ̀" - : "Ɔ̃̀" - : "Ǝ̃̀" - : "Ɛ̃̀" - : "ǝ̃̀" - : "ɔ̃̀" - : "ɛ̃̀" - : "ũ̀" - : "Ũ̀" - : "⇃" - : "ề" - : "Ề" - : "è" - : "È" - : "ḕ" - : "Ḕ" - : "ŋ̀" - : "Ŋ̀" - : "ὰ" - : "Ὰ" - : "ὲ" - : "Ὲ" - : "ὴ" - : "Ὴ" - : "ῒ" - : "ὶ" - : "Ὶ" - : "ὼ" - : "Ὼ" - : "ὸ" - : "Ὸ" - : "ῢ" - : "ὺ" - : "Ὺ" - : "ì" - : "Ì" - : "↽" - : "m̀" - : "M̀" - : "ầ" - : "Ầ" - : "ề" - : "Ề" - : "ồ" - : "Ồ" - : "ằ" - : "Ằ" - : "Ὴ" - : "Ὴ" - : "Ὰ" - : "Ὰ" - : "Ὲ" - : "Ὲ" - : "Ὴ" - : "Ὴ" - : "Ὶ" - : "Ὶ" - : "Ὸ" - : "Ὸ" - : "Ὺ" - : "Ὺ" - : "ḕ" - : "Ḕ" - : "ṑ" - : "Ṑ" - : "ἃ" - : "Ἃ" - : "ἓ" - : "Ἓ" - : "ἣ" - : "Ἣ" - : "ἳ" - : "Ἳ" - : "ὣ" - : "Ὣ" - : "ὃ" - : "Ὃ" - : "ὓ" - : "Ὓ" - : "ἂ" - : "Ἂ" - : "ἒ" - : "Ἒ" - : "ἢ" - : "Ἢ" - : "ἲ" - : "Ἲ" - : "ὢ" - : "Ὢ" - : "ὂ" - : "Ὂ" - : "ὒ" - : "ờ" - : "Ờ" - : "ừ" - : "Ừ" - : "ῒ" - : "ῢ" - : "ǜ" - : "Ǜ" - : "ằ" - : "Ằ" - : "ḕ" - : "Ḕ" - : "ṑ" - : "Ṑ" - : "ǹ" - : "Ǹ" - : "`" - : "ồ" - : "Ồ" - : "ờ" - : "Ờ" - : "ṑ" - : "Ṑ" - : "ò" - : "Ò" - : "⇀" - : "`" - : "Ɔ̀" - : "Ǝ̀" - : "Ɛ̀" - : "Ɩ̀" - : "Ʊ̀" - : "Ʋ̀" - : "ǝ̀" - : "ɔ̀" - : "ɛ̀" - : "ɩ̀" - : "ʊ̀" - : "ʋ̀" - : "ờ" - : "Ờ" - : "ừ" - : "Ừ" - : "ἂ" - : "ἃ" - : "Ἂ" - : "Ἃ" - : "ἒ" - : "ἓ" - : "Ἒ" - : "Ἓ" - : "ἢ" - : "ἣ" - : "Ἢ" - : "Ἣ" - : "ἲ" - : "ἳ" - : "Ἲ" - : "Ἳ" - : "ὂ" - : "ὃ" - : "Ὂ" - : "Ὃ" - : "ὒ" - : "ὓ" - : "Ὓ" - : "ὢ" - : "ὣ" - : "Ὢ" - : "Ὣ" - : "ǜ" - : "Ǜ" - : "ừ" - : "Ừ" - : "↾" - : "ù" - : "Ù" - : "ǜ" - : "Ǜ" - : "ẁ" - : "Ẁ" - : "ỳ" - : "Ỳ" - : "α" - : "Α" - : "β" - : "Β" - : "µ" - : "ϒ" - : "ᾱ" - : "Ᾱ" - : "ῑ" - : "Ῑ" - : "ῡ" - : "Ῡ" - : "ϼ" - : "δ" - : "Δ" - : "ε" - : "Ε" - : "φ" - : "Φ" - : "γ" - : "Γ" - : "η" - : "Η" - : "ι" - : "Ι" - : "θ" - : "Θ" - : "κ" - : "Κ" - : "λ" - : "Λ" - : "μ" - : "Μ" - : "µ" - : "ν" - : "Ν" - : "ο" - : "Ο" -

: "π" -

: "Π" - : "χ" - : "Χ" - : "ρ" - : "Ρ" - : "µ" - : "σ" - : "Σ" - : "τ" - : "Τ" - : "υ" - : "Υ" - : "ω" - : "Ω" - : "ξ" - : "Ξ" - : "ψ" - : "Ψ" - : "ζ" - : "Ζ" - : "ả" - : "Ả" - : "ẳ" - : "Ẳ" - : "ẩ" - : "Ẩ" - : "ɓ" - : "Ɓ" - : "ƈ" - : "Ƈ" - : "ɗ" - : "Ɗ" - : "ẳ" - : "Ẳ" - : "ẩ" - : "Ẩ" - : "ể" - : "Ể" - : "ổ" - : "Ổ" - : "ϒ" - : "̉" - : "ở" - : "Ở" - : "ử" - : "Ử" - : "ể" - : "Ể" - : "ẻ" - : "Ẻ" - : "ƒ" - : "Ƒ" - : "ɠ" - : "Ɠ" - : "ɦ" - : "ỉ" - : "Ỉ" - : "ƙ" - : "Ƙ" - : "ɱ" - : "Ɱ" - : "ẩ" - : "Ẩ" - : "ể" - : "Ể" - : "ổ" - : "Ổ" - : "ẳ" - : "Ẳ" - : "ở" - : "Ở" - : "ử" - : "Ử" - : "ẳ" - : "Ẳ" - : "ɲ" - : "Ɲ" - : "̉" - : "ổ" - : "Ổ" - : "ở" - : "Ở" - : "ỏ" - : "Ỏ" -

: "ƥ" -

: "Ƥ" - : "ʠ" - : "ɼ" - : "ɚ" - : "̉" - : "ʂ" - : "ƭ" - : "Ƭ" - : "ᶑ" - : "ɝ" - : "ʄ" - : "ɻ" - : "ʮ" - : "ử" - : "Ử" - : "ủ" - : "Ủ" - : "ʋ" - : "Ʋ" - : "ⱳ" - : "Ⱳ" - : "ỷ" - : "Ỷ" - : "ȥ" - : "Ȥ" - : "ớ" - : "Ớ" - : "ứ" - : "Ứ" - : "ợ" - : "Ợ" - : "ự" - : "Ự" - : "ờ" - : "Ờ" - : "ừ" - : "Ừ" - : "ở" - : "Ở" - : "ử" - : "Ử" - : "̛" - : "ỡ" - : "Ỡ" - : "ữ" - : "Ữ" - : "̛" - : "ớ" - : "Ớ" - : "ợ" - : "Ợ" - : "ờ" - : "Ờ" - : "ở" - : "Ở" - : "ơ" - : "Ơ" - : "ỡ" - : "Ỡ" - : "̛" - : "ứ" - : "Ứ" - : "ự" - : "Ự" - : "ừ" - : "Ừ" - : "ử" - : "Ử" - : "ữ" - : "Ữ" - : "ư" - : "Ư" - : "ȃ" - : "Ȃ" - : "а̑" - : "А̑" - : "р̑" - : "Р̑" - : "е̑" - : "Е̑" - : "и̑" - : "И̑" - : "о̑" - : "О̑" - : "у̑" - : "У̑" - : "ȇ" - : "Ȇ" - : "ȋ" - : "Ȋ" - : "ȏ" - : "Ȏ" - : "ȓ" - : "Ȓ" - : "ȗ" - : "Ȗ" - : "ᾅ" - : "ᾍ" - : "ᾕ" - : "ᾝ" - : "ᾥ" - : "ᾭ" - : "ᾄ" - : "ᾌ" - : "ᾔ" - : "ᾜ" - : "ᾤ" - : "ᾬ" - : "ᾴ" - : "ῄ" - : "ῴ" - : "ᾅ" - : "ᾍ" - : "ᾕ" - : "ᾝ" - : "ᾥ" - : "ᾭ" - : "ᾄ" - : "ᾌ" - : "ᾔ" - : "ᾜ" - : "ᾤ" - : "ᾬ" - : "ᾄ" - : "ᾅ" - : "ᾌ" - : "ᾍ" - : "ᾔ" - : "ᾕ" - : "ᾜ" - : "ᾝ" - : "ᾤ" - : "ᾥ" - : "ᾬ" - : "ᾭ" - : "ᾁ" - : "ᾉ" - : "ᾑ" - : "ᾙ" - : "ᾡ" - : "ᾩ" - : "ᾃ" - : "ᾋ" - : "ᾓ" - : "ᾛ" - : "ᾣ" - : "ᾫ" - : "ᾂ" - : "ᾊ" - : "ᾒ" - : "ᾚ" - : "ᾢ" - : "ᾪ" - : "ᾲ" - : "ῂ" - : "ῲ" - : "ᾃ" - : "ᾋ" - : "ᾓ" - : "ᾛ" - : "ᾣ" - : "ᾫ" - : "ᾂ" - : "ᾊ" - : "ᾒ" - : "ᾚ" - : "ᾢ" - : "ᾪ" - : "ᾂ" - : "ᾃ" - : "ᾊ" - : "ᾋ" - : "ᾒ" - : "ᾓ" - : "ᾚ" - : "ᾛ" - : "ᾢ" - : "ᾣ" - : "ᾪ" - : "ᾫ" - : "ͺ" - : "ᾀ" - : "ᾈ" - : "ᾐ" - : "ᾘ" - : "ᾠ" - : "ᾨ" - : "ᾇ" - : "ᾏ" - : "ᾗ" - : "ᾟ" - : "ᾧ" - : "ᾯ" - : "ᾆ" - : "ᾎ" - : "ᾖ" - : "ᾞ" - : "ᾦ" - : "ᾮ" - : "ᾷ" - : "ῇ" - : "ῷ" - : "ᾇ" - : "ᾏ" - : "ᾗ" - : "ᾟ" - : "ᾧ" - : "ᾯ" - : "ᾆ" - : "ᾎ" - : "ᾖ" - : "ᾞ" - : "ᾦ" - : "ᾮ" - : "ᾆ" - : "ᾇ" - : "ᾎ" - : "ᾏ" - : "ᾖ" - : "ᾗ" - : "ᾞ" - : "ᾟ" - : "ᾦ" - : "ᾧ" - : "ᾮ" - : "ᾯ" - : "ᾴ" - : "ᾳ" - : "ᾼ" - : "ῄ" - : "ῃ" - : "ῌ" - : "ῴ" - : "ῳ" - : "ῼ" - : "ᾅ" - : "ᾍ" - : "ᾕ" - : "ᾝ" - : "ᾥ" - : "ᾭ" - : "ᾄ" - : "ᾌ" - : "ᾔ" - : "ᾜ" - : "ᾤ" - : "ᾬ" - : "ᾴ" - : "ῄ" - : "ῴ" - : "ᾅ" - : "ᾍ" - : "ᾕ" - : "ᾝ" - : "ᾥ" - : "ᾭ" - : "ᾄ" - : "ᾌ" - : "ᾔ" - : "ᾜ" - : "ᾤ" - : "ᾬ" - : "ᾄ" - : "ᾅ" - : "ᾌ" - : "ᾍ" - : "ᾔ" - : "ᾕ" - : "ᾜ" - : "ᾝ" - : "ᾤ" - : "ᾥ" - : "ᾬ" - : "ᾭ" - : "ᾅ" - : "ᾍ" - : "ᾕ" - : "ᾝ" - : "ᾥ" - : "ᾭ" - : "ᾄ" - : "ᾌ" - : "ᾔ" - : "ᾜ" - : "ᾤ" - : "ᾬ" - : "ᾴ" - : "ῄ" - : "ῴ" - : "ᾅ" - : "ᾍ" - : "ᾕ" - : "ᾝ" - : "ᾥ" - : "ᾭ" - : "ᾄ" - : "ᾌ" - : "ᾔ" - : "ᾜ" - : "ᾤ" - : "ᾬ" - : "ᾄ" - : "ᾅ" - : "ᾌ" - : "ᾍ" - : "ᾔ" - : "ᾕ" - : "ᾜ" - : "ᾝ" - : "ᾤ" - : "ᾥ" - : "ᾬ" - : "ᾭ" - : "ᾇ" - : "ᾏ" - : "ᾗ" - : "ᾟ" - : "ᾧ" - : "ᾯ" - : "ᾆ" - : "ᾎ" - : "ᾖ" - : "ᾞ" - : "ᾦ" - : "ᾮ" - : "ᾷ" - : "ῇ" - : "ῷ" - : "ᾇ" - : "ᾏ" - : "ᾗ" - : "ᾟ" - : "ᾧ" - : "ᾯ" - : "ᾆ" - : "ᾎ" - : "ᾖ" - : "ᾞ" - : "ᾦ" - : "ᾮ" - : "ᾆ" - : "ᾇ" - : "ᾎ" - : "ᾏ" - : "ᾖ" - : "ᾗ" - : "ᾞ" - : "ᾟ" - : "ᾦ" - : "ᾧ" - : "ᾮ" - : "ᾯ" - : "ᾃ" - : "ᾋ" - : "ᾓ" - : "ᾛ" - : "ᾣ" - : "ᾫ" - : "ᾂ" - : "ᾊ" - : "ᾒ" - : "ᾚ" - : "ᾢ" - : "ᾪ" - : "ᾲ" - : "ῂ" - : "ῲ" - : "ᾃ" - : "ᾋ" - : "ᾓ" - : "ᾛ" - : "ᾣ" - : "ᾫ" - : "ᾂ" - : "ᾊ" - : "ᾒ" - : "ᾚ" - : "ᾢ" - : "ᾪ" - : "ᾂ" - : "ᾃ" - : "ᾊ" - : "ᾋ" - : "ᾒ" - : "ᾓ" - : "ᾚ" - : "ᾛ" - : "ᾢ" - : "ᾣ" - : "ᾪ" - : "ᾫ" - : "ᾁ" - : "ᾉ" - : "ᾑ" - : "ᾙ" - : "ᾡ" - : "ᾩ" - : "ᾀ" - : "ᾈ" - : "ᾐ" - : "ᾘ" - : "ᾠ" - : "ᾨ" - : "ͺ" - : "ᾀ" - : "ᾁ" - : "ᾂ" - : "ᾃ" - : "ᾄ" - : "ᾅ" - : "ᾆ" - : "ᾇ" - : "ᾈ" - : "ᾉ" - : "ᾊ" - : "ᾋ" - : "ᾌ" - : "ᾍ" - : "ᾎ" - : "ᾏ" - : "ᾐ" - : "ᾑ" - : "ᾒ" - : "ᾓ" - : "ᾔ" - : "ᾕ" - : "ᾖ" - : "ᾗ" - : "ᾘ" - : "ᾙ" - : "ᾚ" - : "ᾛ" - : "ᾜ" - : "ᾝ" - : "ᾞ" - : "ᾟ" - : "ᾠ" - : "ᾡ" - : "ᾢ" - : "ᾣ" - : "ᾤ" - : "ᾥ" - : "ᾦ" - : "ᾧ" - : "ᾨ" - : "ᾩ" - : "ᾪ" - : "ᾫ" - : "ᾬ" - : "ᾭ" - : "ᾮ" - : "ᾯ" - : "ᾲ" - : "ῂ" - : "ῲ" - : "ᾷ" - : "ῇ" - : "ῷ" - : "ā" - : "Ā" - : "ǟ" - : "Ǟ" - : "ǣ" - : "Ǣ" - : "≃" - : "ḇ" - : "Ḇ" - : "а̄" - : "А̄" - : "р̄" - : "Р̄" - : "е̄" - : "Е̄" - : "ӣ" - : "Ӣ" - : "ҡ" - : "Ҡ" - : "о̄" - : "О̄" - : "ъ" - : "Ъ" - : "ӯ" - : "Ӯ" - : "ḏ" - : "Ḏ" - : "ǡ" - : "Ǡ" - : "ȱ" - : "Ȱ" - : "ḗ" - : "Ḗ" - : "ṓ" - : "Ṓ" - : "ḹ" - : "Ḹ" - : "ṝ" - : "Ṝ" - : "ǭ" - : "Ǭ" - : "ǟ" - : "Ǟ" - : "ȫ" - : "Ȫ" - : "ǖ" - : "Ǖ" - : "ḕ" - : "Ḕ" - : "ṑ" - : "Ṑ" - : "ᾱ" - : "Ᾱ" - : "ῑ" - : "Ῑ" - : "ῡ" - : "Ῡ" - : "̄" - : "ǭ" - : "Ǭ" - : "ȭ" - : "Ȭ" - : "ḗ" - : "Ḗ" - : "ē" - : "Ē" - : "ḕ" - : "Ḕ" - : "⦱" - : "ḡ" - : "Ḡ" - : "≥" - : "ᾱ" - : "Ᾱ" - : "ῑ" - : "Ῑ" - : "ῡ" - : "Ῡ" - : "ẖ" - : "ī" - : "Ī" - : "⊆" - : "⊇" - : "⨛" - : "⩃" - : "ḵ" - : "Ḵ" - : "≤" - : "ḻ" - : "Ḻ" - : "⊼" - : "⊽" - : "ǣ" - : "Ǣ" - : "ȭ" - : "Ȭ" - : "ḹ" - : "Ḹ" - : "ṝ" - : "Ṝ" - : "Ᾱ" - : "Ᾱ" - : "Ῑ" - : "Ῑ" - : "Ῡ" - : "Ῡ" - : "ǡ" - : "Ǡ" - : "ȱ" - : "Ȱ" - : "ǟ" - : "Ǟ" - : "ȫ" - : "Ȫ" - : "ǖ" - : "Ǖ" - : "ǭ" - : "Ǭ" - : "ṉ" - : "Ṉ" - : "¯" - : "ṓ" - : "Ṓ" - : "ȫ" - : "Ȫ" - : "ṑ" - : "Ṑ" - : "ō" - : "Ō" - : "ȭ" - : "Ȭ" -

: "ℏ" - : "ṟ" - : "Ṟ" - : "¯" - : "ṯ" - : "Ṯ" - : "Ɔ̄" - : "Ǝ̄" - : "Ɛ̄" - : "Ɩ̄" - : "Ʊ̄" - : "Ʋ̄" - : "ǝ̄" - : "Ǭ" - : "ǭ" - : "Ǡ" - : "ǡ" - : "Ȱ" - : "ȱ" - : "ɔ̄" - : "ɛ̄" - : "ɩ̄" - : "ʊ̄" - : "ʋ̄" - : "Ḹ" - : "ḹ" - : "Ṝ" - : "ṝ" - : "ǖ" - : "Ǖ" - : "⩂" - : "ū" - : "Ū" - : "ǖ" - : "Ǖ" - : "ȳ" - : "Ȳ" - : "ẕ" - : "Ẕ" - : "ą" - : "Ą" - : "ǭ" - : "Ǭ" - : "˛" - : "ę" - : "Ę" - : "į" - : "Į" - : "̨" - : "ǭ" - : "Ǭ" - : "ǫ" - : "Ǫ" - : "˛" - : "ų" - : "Ų" - : "ả" - : "Ả" - : "ᾄ" - : "ᾔ" - : "ᾤ" - : "ᾬ" - : "ᾜ" - : "ᾜ" - : "ᾌ" - : "ᾌ" - : "ᾜ" - : "ᾜ" - : "ἄ" - : "ἔ" - : "ἤ" - : "ἴ" - : "ὤ" - : "Ὤ" - : "ὄ" - : "ὔ" - : "Ἤ" - : "Ἤ" - : "Ἄ" - : "Ἄ" - : "Ἔ" - : "Ἔ" - : "Ἤ" - : "Ἤ" - : "Ἴ" - : "Ἴ" - : "Ὄ" - : "Ὄ" - : "ẳ" - : "Ẳ" - : "ᾄ" - : "ᾔ" - : "ᾤ" - : "ᾬ" - : "ᾜ" - : "ᾜ" - : "ᾌ" - : "ᾌ" - : "ᾜ" - : "ᾜ" - : "ᾂ" - : "ᾒ" - : "ᾢ" - : "ᾪ" - : "ᾚ" - : "ᾚ" - : "ᾊ" - : "ᾊ" - : "ᾚ" - : "ᾚ" - : "ᾆ" - : "ᾖ" - : "ᾦ" - : "ᾮ" - : "ᾞ" - : "ᾞ" - : "ᾎ" - : "ᾎ" - : "ᾞ" - : "ᾞ" - : "ᾀ" - : "ᾐ" - : "ᾠ" - : "ᾨ" - : "ᾘ" - : "ᾘ" - : "ᾈ" - : "ᾈ" - : "ᾘ" - : "ᾘ" - : "ẩ" - : "Ẩ" - : "ể" - : "Ể" - : "ổ" - : "Ổ" - : "ᾂ" - : "ᾒ" - : "ᾢ" - : "ᾪ" - : "ᾚ" - : "ᾚ" - : "ᾊ" - : "ᾊ" - : "ᾚ" - : "ᾚ" - : "ἂ" - : "ἒ" - : "ἢ" - : "ἲ" - : "ὢ" - : "Ὢ" - : "ὂ" - : "ὒ" - : "Ἢ" - : "Ἢ" - : "Ἂ" - : "Ἂ" - : "Ἒ" - : "Ἒ" - : "Ἢ" - : "Ἢ" - : "Ἲ" - : "Ἲ" - : "Ὂ" - : "Ὂ" - : "̓" - : "ᾆ" - : "ᾖ" - : "ᾦ" - : "ᾮ" - : "ᾞ" - : "ᾞ" - : "ᾎ" - : "ᾎ" - : "ᾞ" - : "ᾞ" - : "ἆ" - : "ἦ" - : "ἶ" - : "ὦ" - : "Ὦ" - : "ὖ" - : "Ἦ" - : "Ἦ" - : "Ἆ" - : "Ἆ" - : "Ἦ" - : "Ἦ" - : "Ἶ" - : "Ἶ" - : "ẻ" - : "Ẻ" - : "ἀ" - : "Ἀ" - : "ἐ" - : "Ἐ" - : "ἠ" - : "Ἠ" - : "ἰ" - : "Ἰ" - : "ὠ" - : "Ὠ" - : "ὀ" - : "Ὀ" - : "ῤ" - : "ὐ" - : "ỉ" - : "Ỉ" - : "Ἠ" - : "Ἠ" - : "Ἀ" - : "Ἀ" - : "Ἐ" - : "Ἐ" - : "Ἠ" - : "Ἠ" - : "Ἰ" - : "Ἰ" - : "Ὀ" - : "Ὀ" - : "᾿" - : "ỏ" - : "Ỏ" - : "᾿" - : "ở" - : "Ở" - : "ử" - : "Ử" - : "ủ" - : "Ủ" - : "ỷ" - : "Ỷ" - : "プ" - : "パ" - : "ペ" - : "ピ" - : "ポ" - : "ぱ" - : "ぴ" - : "ぷ" - : "ぺ" - : "ぽ" - <0> : "∅" - <2> : "ƻ" - : "ⱥ" - : "Ⱥ" - : "≁" - : "✘" - : "∤" - : "ƀ" - : "Ƀ" - : "ȼ" - : "Ȼ" - : "ҹ" - : "Ҹ" - : "ҏ" - : "Ҏ" - : "ғ" - : "Ғ" - : "ӿ" - : "Ӿ" - : "ҟ" - : "Ҟ" - : "ө" - : "Ө" - : "ҍ" - : "Ҍ" - : "ұ" - : "Ұ" - : "đ" - : "Đ" - : "ɟ" - : "ǿ" - : "Ǿ" - : "ϼ" - : "̷" - : "ɇ" - : "Ɇ" - : "∉" - : "≠" - : "ǥ" - : "Ǥ" - : "≯" - : "≱" - : "ᵼ" - : "ƛ" - : "ϼ" - : "ᵿ" - : "ħ" - : "Ħ" - : "⇎" - : "ɨ" - : "Ɨ" - : "⊄" - : "⊅" - : "⨏" - : "ɟ" - : "ɟ" - : "✘" - : "≠" - : "↚" - : "≮" - : "≰" - : "ł" - : "Ł" - : "⚦" - : "⊭" - : "⋫" - : "⊭" - : "⊬" - : "∌" - : "⋭" - : "⋬" - : "ᵻ" - : "ʡ" - : "ℏ" - : "⋭" - : "⋬" - : "⋪" - : "ᵾ" - : "/" - : "ǿ" - : "Ǿ" - : "ø" - : "Ø" -

: "ᵽ" -

: "Ᵽ" - : "↛" - : "ɍ" - : "Ɍ" - : "✘" - : "/" - : "₤" - : "ŧ" - : "Ŧ" - : "ẜ" - : "ɟ" - : "ᵼ" - : "↮" - : "∌" - : "ʢ" - : "ʢ" - : "⇍" - : "⇏" - : "∄" - : "∤" - : "∦" - : "⚧" - : "ʉ" - : "Ʉ" - : "ɏ" - : "Ɏ" - : "ƶ" - : "Ƶ" - : "ã" - : "Ã" - : "ẵ" - : "Ẵ" - : "ẫ" - : "Ẫ" - : "≈" - : "ṍ" - : "Ṍ" - : "ṹ" - : "Ṹ" - : "ẵ" - : "Ẵ" - : "ᾇ" - : "ᾗ" - : "ᾧ" - : "ᾯ" - : "ᾟ" - : "ᾟ" - : "ᾏ" - : "ᾏ" - : "ᾟ" - : "ᾟ" - : "ᾆ" - : "ᾖ" - : "ᾦ" - : "ᾮ" - : "ᾞ" - : "ᾞ" - : "ᾎ" - : "ᾎ" - : "ᾞ" - : "ᾞ" - : "ᾷ" - : "ῇ" - : "ῷ" - : "ẫ" - : "Ẫ" - : "ễ" - : "Ễ" - : "ỗ" - : "Ỗ" - : "ᾇ" - : "ᾗ" - : "ᾧ" - : "ᾯ" - : "ᾟ" - : "ᾟ" - : "ᾏ" - : "ᾏ" - : "ᾟ" - : "ᾟ" - : "ἇ" - : "Ἇ" - : "ἧ" - : "Ἧ" - : "ἷ" - : "Ἷ" - : "ὧ" - : "Ὧ" - : "ὗ" - : "Ὗ" - : "Ἧ" - : "Ἇ" - : "Ἧ" - : "Ἷ" - : "Ὗ" - : "ῗ" - : "ῧ" - : "ṏ" - : "Ṏ" - : "ỡ" - : "Ỡ" - : "ữ" - : "Ữ" - : "ȭ" - : "Ȭ" - : "ᾆ" - : "ᾖ" - : "ᾦ" - : "ᾮ" - : "ᾞ" - : "ᾞ" - : "ᾎ" - : "ᾎ" - : "ᾞ" - : "ᾞ" - : "ἆ" - : "Ἆ" - : "ἦ" - : "Ἦ" - : "ἶ" - : "Ἶ" - : "ὦ" - : "Ὦ" - : "ὖ" - : "Ἦ" - : "Ἆ" - : "Ἦ" - : "Ἶ" - : "̃" - : "ễ" - : "Ễ" - : "ẽ" - : "Ẽ" - : "≅" - : "≳" - : "ᾶ" - : "ῆ" - : "ῗ" - : "ῖ" - : "ῶ" - : "ῧ" - : "ῦ" - : "ĩ" - : "Ĩ" - : "↜" - : "≲" - : "ɫ" - : "Ɫ" - : "≃" - : "ẫ" - : "Ẫ" - : "ễ" - : "Ễ" - : "ỗ" - : "Ỗ" - : "ẵ" - : "Ẵ" - : "ἇ" - : "Ἇ" - : "ἧ" - : "Ἧ" - : "ἷ" - : "Ἷ" - : "ὧ" - : "Ὧ" - : "ὗ" - : "Ὗ" - : "ἆ" - : "Ἆ" - : "ἦ" - : "Ἦ" - : "ἶ" - : "Ἶ" - : "ὦ" - : "Ὦ" - : "ὖ" - : "ỡ" - : "Ỡ" - : "ữ" - : "Ữ" - : "ῗ" - : "ῧ" - : "ẵ" - : "Ẵ" - : "ñ" - : "Ñ" - : "˜" - : "ṍ" - : "Ṍ" - : "ỗ" - : "Ỗ" - : "ṏ" - : "Ṏ" - : "ỡ" - : "Ỡ" - : "ȭ" - : "Ȭ" - : "õ" - : "Õ" - : "⨤" - : "↝" - : "~" - : "Ɔ̃" - : "Ǝ̃" - : "Ɛ̃" - : "ǝ̃" - : "ɔ̃" - : "ɛ̃" - : "ỡ" - : "Ỡ" - : "ữ" - : "Ữ" - : "ἆ" - : "ἇ" - : "Ἆ" - : "Ἇ" - : "ἦ" - : "ἧ" - : "Ἦ" - : "Ἧ" - : "ἶ" - : "ἷ" - : "Ἶ" - : "Ἷ" - : "ὖ" - : "ὗ" - : "Ὗ" - : "ὦ" - : "ὧ" - : "Ὦ" - : "Ὧ" - : "↭" - : "↜" - : "ṹ" - : "Ṹ" - : "ữ" - : "Ữ" - : "ũ" - : "Ũ" - : "ṽ" - : "Ṽ" - : "ỹ" - : "Ỹ" - : "ヂ" - : "ブ" - : "バ" - : "ベ" - : "ビ" - : "ボ" - : "ガ" - : "ゲ" - : "ギ" - : "ゴ" - : "グ" - : "ザ" - : "ゼ" - : "ジ" - : "ゾ" - : "ズ" - : "ダ" - : "デ" - : "ド" - : "ヅ" - : "ヴ" - : "ヷ" - : "ヺ" - : "ゔ" - : "が" - : "ぎ" - : "ぐ" - : "げ" - : "ご" - : "ざ" - : "じ" - : "ず" - : "ぜ" - : "ぞ" - : "だ" - : "ぢ" - : "づ" - : "で" - : "ど" - : "ば" - : "び" - : "ぶ" - : "べ" - : "ぼ" - : "ゞ" - : "ヸ" - : "ヹ" - : "ヾ" - : "ΐ" - : "ΰ" - <0> <3> : "↉" - <0> : "⍬" - <0> : "°" - <0> : "∅" - <0> : "ʘ" - <1> <1> <0> : "⅒" - <1> <2> : "½" - <1> <3> : "⅓" - <1> <4> : "¼" - <1> <5> : "⅕" - <1> <6> : "⅙" - <1> <7> : "⅐" - <1> <8> : "⅛" - <1> <9> : "⅑" - <1> : "¹" - <1> : "1ᵉʳ" - <1> : "⸘" - <1> : "‽" - <1> : "⅟" - <1> : "⸘" - <1> : "‽" - <1> : "1ʳᵉ" - <1> : "⅟" - <1> : "1ˢᵗ" - <2> <3> : "⅔" - <2> <5> : "⅖" - <2> : "²" - <2> : "∷" - <2> : "2ᵉ" - <2> : "⩵" - <2> : "‼" - <2> : "≫" - <2> : "∬" - <2> : "≪" - <2> : "2ⁿᵈ" - <2> : "⁇" - <3> <3> : "ɜ" - <3> <4> : "¾" - <3> <5> : "⅗" - <3> <8> : "⅜" - <3> : "³" - <3> : "⩶" - <3> : "⋙" - <3> : "∭" - <3> : "⋘" - <3> : "∛" - <3> : "3ʳᵈ" - <4> <5> : "⅘" - <4> : "⨌" - <4> : "∜" - <4> : "4ᵗʰ" - <5> <6> : "⅚" - <5> <8> : "⅝" - <7> <7> : "⁊" - <7> <8> : "⅞" - <8> <8> : "∞" - <0> : "٠" - <1> : "١" - <2> : "٢" - <3> : "٣" - <4> : "٤" - <5> : "٥" - <6> : "٦" - <7> : "٧" - <8> : "٨" - <9> : "٩" - : "Å" - : "ɑ" - : "á" - : "Á" - : "á" - : "Á" - : "â" - : "Â" - : "ã" - : "Ã" - : "å" - : "Å" - : "ą" - : "Ą" - : "á" - : "Á" - : "ắ" - : "Ắ" - : "ấ" - : "Ấ" - : "ǽ" - : "Ǽ" - : "ǻ" - : "Ǻ" - : "ấ" - : "Ấ" - : "ế" - : "Ế" - : "ố" - : "Ố" - : "ṍ" - : "Ṍ" - : "ṹ" - : "Ṹ" - : "ắ" - : "Ắ" - : "ć" - : "Ć" - : "ḉ" - : "Ḉ" - : "ḉ" - : "Ḉ" - : "ḉ" - : "Ḉ" - : "а́" - : "А́" - : "р́" - : "Р́" - : "э́" - : "Э́" - : "ѓ" - : "Ѓ" - : "е́" - : "Е́" - : "и́" - : "И́" - : "ќ" - : "Ќ" - : "о́" - : "О́" - : "у́" - : "У́" - : "я́" - : "Я́" - : "ы́" - : "Ы́" - : "ю́" - : "Ю́́" - : "ǻ" - : "Ǻ" - : "ắ" - : "Ắ" - : "ḉ" - : "Ḉ" - : "ấ" - : "Ấ" - : "ế" - : "Ế" - : "ố" - : "Ố" - : "ἅ" - : "Ἅ" - : "ἕ" - : "Ἕ" - : "ἥ" - : "Ἥ" - : "ἵ" - : "Ἵ" - : "ὥ" - : "Ὥ" - : "ὅ" - : "Ὅ" - : "ὕ" - : "Ὕ" - : "ΐ" - : "ΰ" - : "ḯ" - : "Ḯ" - : "ǘ" - : "Ǘ" - : "ớ" - : "Ớ" - : "ứ" - : "Ứ" - : "ḗ" - : "Ḗ" - : "ṓ" - : "Ṓ" - : "ἄ" - : "Ἄ" - : "ἔ" - : "Ἔ" - : "ἤ" - : "Ἤ" - : "ἴ" - : "Ἴ" - : "ὤ" - : "Ὤ" - : "ὄ" - : "Ὄ" - : "ὔ" - : "ṍ" - : "Ṍ" - : "ṹ" - : "Ṹ" - : "ế" - : "Ế" - : "é" - : "É" - : "ḗ" - : "Ḗ" - : "ǵ" - : "Ǵ" - : "ά" - : "Ά" - : "έ" - : "Έ" - : "ή" - : "Ή" - : "ΐ" - : "ί" - : "Ί" - : "ώ" - : "Ώ" - : "ό" - : "Ό" - : "ΰ" - : "ύ" - : "Ύ" - : "ḯ" - : "Ḯ" - : "í" - : "Í" - : "j́" - : "J́" - : "ḱ" - : "Ḱ" - : "ǿ" - : "Ǿ" - : "ĺ" - : "Ĺ" - : "ḗ" - : "Ḗ" - : "ṓ" - : "Ṓ" - : "ḿ" - : "Ḿ" - : "ń" - : "Ń" - : "ố" - : "Ố" - : "ớ" - : "Ớ" - : "ṓ" - : "Ṓ" - : "ó" - : "Ó" - : "Ǿ" - : "ǿ" - : "ṍ" - : "Ṍ" - : "ἅ" - : "Ἅ" - : "ἕ" - : "Ἕ" - : "ἥ" - : "Ἥ" - : "ἵ" - : "Ἵ" - : "ὥ" - : "Ὥ" - : "ὅ" - : "Ὅ" - : "ὕ" - : "Ὕ" - : "ἄ" - : "Ἄ" - : "ἔ" - : "Ἔ" - : "ἤ" - : "Ἤ" - : "ἴ" - : "Ἴ" - : "ὤ" - : "Ὤ" - : "ὄ" - : "Ὄ" - : "ὔ" - : "ớ" - : "Ớ" - : "ứ" - : "Ứ" -

: "ṕ" -

: "Ṕ" - : "ΐ" - : "ΰ" - : "ḯ" - : "Ḯ" - : "ǘ" - : "Ǘ" - : "ŕ" - : "Ŕ" - : "ǿ" - : "Ǿ" - : "ś" - : "Ś" - : "ἄ" - : "ἅ" - : "Ἄ" - : "Ἅ" - : "ἔ" - : "ἕ" - : "Ἔ" - : "Ἕ" - : "ἤ" - : "ἥ" - : "Ἤ" - : "Ἥ" - : "ἴ" - : "ἵ" - : "Ἴ" - : "Ἵ" - : "ὄ" - : "ὅ" - : "Ὄ" - : "Ὅ" - : "ὔ" - : "ὕ" - : "Ὕ" - : "ὤ" - : "ὥ" - : "Ὤ" - : "Ὥ" - : "ǘ" - : "Ǘ" - : "ứ" - : "Ứ" - : "ḗ" - : "Ḗ" - : "ṓ" - : "Ṓ" - : "ṹ" - : "Ṹ" - : "ú" - : "Ú" - : "ẃ" - : "Ẃ" - : "ý" - : "Ý" - : "ź" - : "Ź" - : "ä" - : "Ä" - : "æ" - : "Æ" - : "à" - : "À" - : "â" - : "Â" - : "٠" - : "١" - : "٢" - : "٣" - : "٤" - : "٥" - : "٦" - : "٧" - : "٨" - : "٩" - : "ā" - : "Ā" - : "ă" - : "Ă" - : "á" - : "Á" - : "ắ" - : "Ắ" - : "ấ" - : "Ấ" - : "ǽ" - : "Ǽ" - : "ˈ" - : "ǻ" - : "Ǻ" - : "ấ" - : "Ấ" - : "ế" - : "Ế" - : "ố" - : "Ố" - : "ṍ" - : "Ṍ" - : "ṹ" - : "Ṹ" - : "ắ" - : "Ắ" - : "ć" - : "Ć" - : "ḉ" - : "Ḉ" - : "ḉ" - : "Ḉ" - : "‚" - : "а́" - : "А́" - : "р́" - : "Р́" - : "э́" - : "Э́" - : "ѓ" - : "Ѓ" - : "е́" - : "Е́" - : "и́" - : "И́" - : "ќ" - : "Ќ" - : "о́" - : "О́" - : "у́" - : "У́" - : "я́" - : "Я́" - : "ы́" - : "Ы́" - : "ю́" - : "Ю́́" - : "ǻ" - : "Ǻ" - : "ắ" - : "Ắ" - : "ḉ" - : "Ḉ" - : "ấ" - : "Ấ" - : "ế" - : "Ế" - : "ố" - : "Ố" - : "ἅ" - : "Ἅ" - : "ἕ" - : "Ἕ" - : "ἥ" - : "Ἥ" - : "ἵ" - : "Ἵ" - : "ὥ" - : "Ὥ" - : "ὅ" - : "Ὅ" - : "ὕ" - : "Ὕ" - : "ΐ" - : "ΰ" - : "ḯ" - : "Ḯ" - : "ǘ" - : "Ǘ" - : "ớ" - : "Ớ" - : "ứ" - : "Ứ" - : "ḗ" - : "Ḗ" - : "ṓ" - : "Ṓ" - : "ἄ" - : "Ἄ" - : "ἔ" - : "Ἔ" - : "ἤ" - : "Ἤ" - : "ἴ" - : "Ἴ" - : "ὤ" - : "Ὤ" - : "ὄ" - : "Ὄ" - : "ὔ" - : "ṍ" - : "Ṍ" - : "ṹ" - : "Ṹ" - : "ế" - : "Ế" - : "é" - : "É" - : "ḗ" - : "Ḗ" - : "ǵ" - : "Ǵ" - : "’" - : "ά" - : "Ά" - : "έ" - : "Έ" - : "ή" - : "Ή" - : "ΐ" - : "ί" - : "Ί" - : "ώ" - : "Ώ" - : "ό" - : "Ό" - : "ΰ" - : "ύ" - : "Ύ" - : "ḯ" - : "Ḯ" - : "í" - : "Í" - : "j́" - : "J́" - : "ḱ" - : "Ḱ" - : "ǿ" - : "Ǿ" - : "‘" - : "ĺ" - : "Ĺ" - : "ḗ" - : "Ḗ" - : "ṓ" - : "Ṓ" - : "ḿ" - : "Ḿ" - : "ń" - : "Ń" - : "ố" - : "Ố" - : "ớ" - : "Ớ" - : "ṓ" - : "Ṓ" - : "ó" - : "Ó" - : "Ǿ" - : "ǿ" - : "ṍ" - : "Ṍ" - : "ἅ" - : "Ἅ" - : "ἕ" - : "Ἕ" - : "ἥ" - : "Ἥ" - : "ἵ" - : "Ἵ" - : "ὥ" - : "Ὥ" - : "ὅ" - : "Ὅ" - : "ὕ" - : "Ὕ" - : "ἄ" - : "Ἄ" - : "ἔ" - : "Ἔ" - : "ἤ" - : "Ἤ" - : "ἴ" - : "Ἴ" - : "ὤ" - : "Ὤ" - : "ὄ" - : "Ὄ" - : "ὔ" - : "ớ" - : "Ớ" - : "ứ" - : "Ứ" -

: "ṕ" -

: "Ṕ" - : "ΐ" - : "ΰ" - : "ḯ" - : "Ḯ" - : "΅" - : "ǘ" - : "Ǘ" - : "ŕ" - : "Ŕ" - : "ǿ" - : "Ǿ" - : "'" - : "ś" - : "Ś" - : "ἄ" - : "ἅ" - : "Ἄ" - : "Ἅ" - : "ἔ" - : "ἕ" - : "Ἔ" - : "Ἕ" - : "ἤ" - : "ἥ" - : "Ἤ" - : "Ἥ" - : "ἴ" - : "ἵ" - : "Ἴ" - : "Ἵ" - : "ὄ" - : "ὅ" - : "Ὄ" - : "Ὅ" - : "ὔ" - : "ὕ" - : "Ὕ" - : "ὤ" - : "ὥ" - : "Ὤ" - : "Ὥ" - : "⍞" - : "ǘ" - : "Ǘ" - : "ứ" - : "Ứ" - : "ḗ" - : "Ḗ" - : "ṓ" - : "Ṓ" - : "ṹ" - : "Ṹ" - : "ú" - : "Ú" - : "ẃ" - : "Ẃ" - : "ý" - : "Ý" - : "ź" - : "Ź" - : "≇" - : "ä" - : "Ä" - <0> : "⁰" - <1> : "¹" - <2> : "²" - <3> : "³" - <4> : "⁴" - <5> : "⁵" - <6> : "⁶" - <7> : "⁷" - <8> : "⁸" - <9> : "⁹" - : "ᵃ" - : "ᴬ" - : "⤡" - : "↕" - : "ᵇ" - : "ᴮ" - : "⌈" - : "⌉" - : "ᶜ" - : "Ĉ" - : "а̂" - : "А̂" - : "р̂" - : "Р̂" - : "е̂" - : "Е̂" - : "и̂" - : "И̂" - : "о̂" - : "О̂" - : "у̂" - : "У̂" - : "ᵈ" - : "ᴰ" - : "ậ" - : "Ậ" - : "ệ" - : "Ệ" - : "ộ" - : "Ộ" - : "ᵉ" - : "ᴱ" - : "⁼" - : "ậ" - : "Ậ" - : "ệ" - : "Ệ" - : "ộ" - : "Ộ" - : "ᶠ" - : "ᵍ" - : "ᴳ" - : "⃗" - : "ᵅ" - : "ᵝ" - : "ᵡ" - : "ᵟ" - : "ᵋ" - : "ᵞ" - : "ᵠ" - : "ᶿ" - : "ᶷ" - : "ʰ" - : "ᴴ" - : "ⁱ" - : "ᴵ" - : "ʲ" - : "ᴶ" - : "ᵏ" - : "ᴷ" - : "⁰" - : "¹" - : "²" - : "³" - : "⁴" - : "⁵" - : "⁶" - : "⁷" - : "⁸" - : "⁹" - : "⁺" - : "⁼" - : "²" - : "⁻" - : "⃖" - : "⃖" - : "ˡ" - : "ᴸ" - : "⁻" - : "ᵐ" - : "ᴹ" - : "̽" - : "ⁿ" - : "ᴺ" - : "ᵒ" - : "ᴼ" - : "⁽" - : "⁾" - : "·" - : "⁺" -

: "ᵖ" -

: "ᴾ" - : "⃗" - : "ʳ" - : "ᴿ" - : "|" - : "^" - : "ˢ" - : "Ŝ" - : "ᵗ" - : "ᵀ" - : "ᶲ" - : "Ậ" - : "ậ" - : "Ệ" - : "ệ" - : "Ộ" - : "ộ" - : "⃖" - : "⁻" - : "㆒" - : "㆜" - : "㆔" - : "㆖" - : "㆘" - : "㆛" - : "㆗" - : "㆚" - : "㆓" - : "㆟" - : "㆕" - : "㆞" - : "㆝" - : "㆙" - : "ª" - : "ʰ" - : "ⁱ" - : "ʲ" - : "ˡ" - : "ⁿ" - : "º" - : "ʳ" - : "ˢ" - : "ˠ" - : "ʱ" - : "ʴ" - : "ʵ" - : "ʶ" - : "ˤ" - : "ʷ" - : "ˣ" - : "ʸ" - : "ª" - : "ʰ" - : "ⁱ" - : "ʲ" - : "ˡ" - : "ⁿ" - : "º" - : "ʳ" - : "ˢ" - : "ˠ" - : "ʱ" - : "ʴ" - : "ʵ" - : "ʶ" - : "ˤ" - : "ʷ" - : "ˣ" - : "ʸ" - : "ᵘ" - : "ᵁ" - : "ᵛ" - : "ⱽ" - : "ʷ" - : "ᵂ" - : "ˣ" - : "ʸ" - : "Ŷ" - : "ᶻ" - : "Ẑ" - <0> : "⍬" - : "ã" - : "Ã" - : "ẵ" - : "Ẵ" - : "ẫ" - : "Ẫ" - : "ẫ" - : "Ẫ" - : "ễ" - : "Ễ" - : "ỗ" - : "Ỗ" - : "≈" - : "ẵ" - : "Ẵ" - : "⍭" - : "ẵ" - : "Ẵ" - : "ẫ" - : "Ẫ" - : "ễ" - : "Ễ" - : "ỗ" - : "Ỗ" - : "ἇ" - : "Ἇ" - : "ἧ" - : "Ἧ" - : "ἷ" - : "Ἷ" - : "ὧ" - : "Ὧ" - : "ὗ" - : "Ὗ" - : "ῗ" - : "ῧ" - : "ỡ" - : "Ỡ" - : "ữ" - : "Ữ" - : "ἆ" - : "Ἆ" - : "ἦ" - : "Ἦ" - : "ἶ" - : "Ἶ" - : "ὦ" - : "Ὦ" - : "ὖ" - : "≁" - : "⍨" - : "ễ" - : "Ễ" - : "ẽ" - : "Ẽ" - : "≅" - : "ᾶ" - : "ῆ" - : "ῗ" - : "ῖ" - : "ῶ" - : "ῧ" - : "ῦ" - : "ĩ" - : "Ĩ" - : "ñ" - : "Ñ" - : "ỗ" - : "Ỗ" - : "ỡ" - : "Ỡ" - : "õ" - : "Õ" - : "ἇ" - : "Ἇ" - : "ἧ" - : "Ἧ" - : "ἷ" - : "Ἷ" - : "ὧ" - : "Ὧ" - : "ὗ" - : "Ὗ" - : "ἆ" - : "Ἆ" - : "ἦ" - : "Ἦ" - : "ἶ" - : "Ἶ" - : "ὦ" - : "Ὦ" - : "ὖ" - : "ỡ" - : "Ỡ" - : "ữ" - : "Ữ" - : "ῗ" - : "ῧ" - : "~" - : "ἆ" - : "ἇ" - : "Ἆ" - : "Ἇ" - : "ἦ" - : "ἧ" - : "Ἦ" - : "Ἧ" - : "ἶ" - : "ἷ" - : "Ἶ" - : "Ἷ" - : "ὖ" - : "ὗ" - : "Ὗ" - : "ὦ" - : "ὧ" - : "Ὦ" - : "Ὧ" - : "⍫" - : "⍲" - : "⍱" - : "ữ" - : "Ữ" - : "ũ" - : "Ũ" - : "ṽ" - : "Ṽ" - : "ỹ" - : "Ỹ" - : "ą" - : "Ą" - <0> : "°" - : "å" - : "Å" - : "ǻ" - : "Ǻ" - : "∗" - : "⍣" - : "⍟" - : "ů" - : "Ů" - : "@" - : "ā" - : "Ā" - : "∝" - : "ă" - : "Ă" - : "↖" - : "∖" - : "⍀" - : "🙌" - : "⍂" - : "⍉" - : "↘" - <0> : "𝟘" - <1> : "𝟙" - <2> : "𝟚" - <3> : "𝟛" - <4> : "𝟜" - <5> : "𝟝" - <6> : "𝟞" - <7> : "𝟟" - <8> : "𝟠" - <9> : "𝟡" - : "𝕒" - : "𝔸" - : "↑" - : "⍭" - : "⇖" - : "⇘" - : "‖" - : "𝕓" - : "𝔹" - : "⦃" - : "⦄" - : "⟦" - : "⟧" - : "𝕔" - : "ℂ" - : "ҹ" - : "Ҹ" - : "ҝ" - : "Ҝ" - : "𝕕" - : "𝔻" - : "∤" - : "⇓" - : "𝕖" - : "𝔼" - : "⊨" - : "𝕗" - : "𝔽" - : "𝕘" - : "𝔾" - : "⊳" - : "ℽ" - : "ℾ" - : "ℼ" - : "ℿ" - : "⅀" - : "↡" - : "𝕙" - : "ℍ" - : "𝕚" - : "𝕀" - : "𝕛" - : "𝕁" - : "𝕜" - : "𝕂" - : "𝟘" - : "𝟙" - : "𝟚" - : "𝟛" - : "𝟜" - : "𝟝" - : "𝟞" - : "𝟟" - : "𝟠" - : "𝟡" - : "⊨" - : "⇤" - : "⊲" - : "𝕝" - : "𝕃" - : "⊢" - : "𝕞" - : "𝕄" - : "⋈" - : "⋉" - : "𝕟" - : "ℕ" - : "⫬" - : "𝕠" - : "𝕆" - : "⦅" - : "⦆" -

: "𝕡" -

: "ℙ" - : "𝕢" - : "ℚ" - : "↦" - : "𝕣" - : "ℝ" - : "⇗" - : "⇙" - : "∣" - : "𝕤" - : "𝕊" - : "𝕥" - : "𝕋" - : "⍅" - : "⍆" - : "⇤" - : "⤇" - : "⍋" - : "⍒" - : "⍦" - : "⍧" - : "⌽" - : "⇑" - : "𝕦" - : "𝕌" - : "𝕧" - : "𝕍" - : "𝕨" - : "𝕎" - : "𝕩" - : "𝕏" - : "𝕪" - : "𝕐" - : "𝕫" - : "ℤ" - : "ʙ" - : "ḝ" - : "Ḝ" - : "ḝ" - : "Ḝ" - : "ӑ" - : "Ӑ" - : "ӗ" - : "Ӗ" - : "й" - : "Й" - : "ў" - : "Ў" - : "ӂ" - : "Ӂ" - <0> : "𝟎" - <1> : "𝟏" - <2> : "𝟐" - <3> : "𝟑" - <4> : "𝟒" - <5> : "𝟓" - <6> : "𝟔" - <7> : "𝟕" - <8> : "𝟖" - <9> : "𝟗" - : "𝐚" - : "𝐀" - : "𝐀" - : "𝐛" - : "𝐁" - : "𝐁" - : "𝐜" - : "𝐂" - : "𝐂" - : "𝐝" - : "𝐃" - : "𝐃" - : "ặ" - : "Ặ" - : "ḝ" - : "Ḝ" - : "𝐞" - : "𝐄" - : "𝐄" - : "𝐟" - : "𝐅" - : "𝐅" - : "𝐠" - : "𝐆" - : "𝐆" - : "𝛂" - : "𝚨" - : "𝛃" - : "𝚩" - : "𝛘" - : "𝚾" - : "𝛅" - : "𝚫" - : "𝛆" - : "𝚬" - : "𝛈" - : "𝚮" - : "𝛓" - : "𝛄" - : "𝚪" - : "𝛊" - : "𝚰" - : "𝛋" - : "𝚱" - : "𝛌" - : "𝚲" - : "𝛍" - : "𝚳" - : "𝛎" - : "𝚴" - : "𝛚" - : "𝛀" - : "𝛐" - : "𝚶" - : "𝛗" - : "𝚽" - : "𝛑" - : "𝚷" - : "𝛙" - : "𝚿" - : "𝛒" - : "𝚸" - : "𝛔" - : "𝚺" - : "𝛕" - : "𝚻" - : "𝛉" - : "𝚯" - : "𝛖" - : "𝚼" - : "𝛏" - : "𝚵" - : "𝛇" - : "𝚭" - : "𝐡" - : "𝐇" - : "𝐇" - : "𝐢" - : "𝐈" - : "𝐈" - : "𝐣" - : "𝐉" - : "𝐉" - : "𝐤" - : "𝐊" - : "𝐊" - : "𝟎" - : "𝟏" - : "𝟐" - : "𝟑" - : "𝟒" - : "𝟓" - : "𝟔" - : "𝟕" - : "𝟖" - : "𝟗" - : "𝐥" - : "𝐋" - : "𝐋" - : "𝐦" - : "𝐌" - : "𝐌" - : "𝛁" - : "𝐧" - : "𝐍" - : "𝐍" - : "𝐨" - : "𝐎" - : "𝐎" - : "𝛛" -

: "𝐩" -

: "𝐏" -

: "𝐏" - : "𝐪" - : "𝐐" - : "𝐐" - : "𝐫" - : "𝐑" - : "𝐑" - : "𝐬" - : "𝐒" - : "𝐒" - : "𝐭" - : "𝐓" - : "𝐓" - : "𝛝" - : "𝛟" - : "𝛡" - : "𝛞" - : "𝛠" - : "𝛜" - : "𝐮" - : "𝐔" - : "𝐔" - : "𝐯" - : "𝐕" - : "𝐕" - : "𝐰" - : "𝐖" - : "𝐖" - : "𝐱" - : "𝐗" - : "𝐗" - : "𝐲" - : "𝐘" - : "𝐘" - : "𝐳" - : "𝐙" - : "𝐙" - : "ĕ" - : "Ĕ" - : "ặ" - : "Ặ" - : "𝖆" - : "𝕬" - : "𝕬" - : "𝖇" - : "𝕭" - : "𝕭" - : "𝖈" - : "𝕮" - : "𝕮" - : "𝖉" - : "𝕯" - : "𝕯" - : "𝖊" - : "𝕰" - : "𝕰" - : "𝖋" - : "𝕱" - : "𝕱" - : "𝖌" - : "𝕲" - : "𝕲" - : "𝖍" - : "𝕳" - : "𝕳" - : "𝖎" - : "𝕴" - : "𝕴" - : "𝖏" - : "𝕵" - : "𝕵" - : "𝖐" - : "𝕶" - : "𝕶" - : "𝖑" - : "𝕷" - : "𝕷" - : "𝖒" - : "𝕸" - : "𝕸" - : "𝖓" - : "𝕹" - : "𝕹" - : "𝖔" - : "𝕺" - : "𝕺" -

: "𝖕" -

: "𝕻" -

: "𝕻" - : "𝖖" - : "𝕼" - : "𝕼" - : "𝖗" - : "𝕽" - : "𝕽" - : "𝖘" - : "𝕾" - : "𝕾" - : "𝖙" - : "𝕿" - : "𝕿" - : "𝖚" - : "𝖀" - : "𝖀" - : "𝖛" - : "𝖁" - : "𝖁" - : "𝖜" - : "𝖂" - : "𝖂" - : "𝖝" - : "𝖃" - : "𝖃" - : "𝖞" - : "𝖄" - : "𝖄" - : "𝖟" - : "𝖅" - : "𝖅" - : "ğ" - : "Ğ" - : "ᾰ" - : "Ᾰ" - : "ῐ" - : "Ῐ" - : "ῠ" - : "Ῠ" - : "ĭ" - : "Ĭ" - : "ŏ" - : "Ŏ" - : "ḃ" - : "Ḃ" - : "⦃" - : "∅" - : "⦄" - : "⟦" - : "□" - : "⌷" - : "⟧" - : "ğ" - : "Ğ" - : "𝓪" - : "𝓐" - : "𝓐" - : "𝓫" - : "𝓑" - : "𝓑" - : "𝓬" - : "𝓒" - : "𝓒" - : "𝓭" - : "𝓓" - : "𝓓" - : "𝓮" - : "𝓔" - : "𝓔" - : "𝓯" - : "𝓕" - : "𝓕" - : "𝓰" - : "𝓖" - : "𝓖" - : "𝓱" - : "𝓗" - : "𝓗" - : "𝓲" - : "𝓘" - : "𝓘" - : "𝓳" - : "𝓙" - : "𝓙" - : "𝓴" - : "𝓚" - : "𝓚" - : "𝓵" - : "𝓛" - : "𝓛" - : "𝓶" - : "𝓜" - : "𝓜" - : "𝓷" - : "𝓝" - : "𝓝" - : "𝓸" - : "𝓞" - : "𝓞" -

: "𝓹" -

: "𝓟" -

: "𝓟" - : "𝓺" - : "𝓠" - : "𝓠" - : "𝓻" - : "𝓡" - : "𝓡" - : "𝓼" - : "𝓢" - : "𝓢" - : "𝓽" - : "𝓣" - : "𝓣" - : "𝓾" - : "𝓤" - : "𝓤" - : "𝓿" - : "𝓥" - : "𝓥" - : "𝔀" - : "𝓦" - : "𝓦" - : "𝔁" - : "𝓧" - : "𝓧" - : "𝔂" - : "𝓨" - : "𝓨" - : "𝔃" - : "𝓩" - : "𝓩" - : "Ḝ" - : "ḝ" - : "Ặ" - : "ặ" - : "ŭ" - : "Ŭ" - : "ǎ" - : "Ǎ" - : "ć" - : "Ć" - : "¢" - : "Ɑ" - : "č" - : "Č" -

: "☭" - : "ç" - : "Ç" - : "ď" - : "Ď" - : "ǚ" - : "Ǚ" - : "₠" - : "ç" - : "Ç" - : "ḑ" - : "Ḑ" - : "ȩ" - : "Ȩ" - : "ģ" - : "Ģ" - : "ḩ" - : "Ḩ" - : "ķ" - : "Ķ" - : "ļ" - : "Ļ" - : "ņ" - : "Ņ" - : "ŗ" - : "Ŗ" - : "ş" - : "Ş" - : "ţ" - : "Ţ" - : "ě" - : "Ě" - : "€" - : "€" - : "ǯ" - : "Ǯ" - : "ǧ" - : "Ǧ" - : "ȟ" - : "Ȟ" - : "ǐ" - : "Ǐ" - : "ǰ" - : "ǩ" - : "Ǩ" - : "℅" - : "č" - : "Č" - : "ľ" - : "Ľ" - : "☮" - : "ň" - : "Ň" - : "©" - : "©" - : "ː" - : "≔" - : "÷" - : "☹" - : "☺" - : "∴" - : "⧴" - : "⍠" - : "ą" - : "Ą" - : "‚" - : "ç" - : "Ç" - : "¸" - : "ӌ" - : "Ӌ" - : "ḑ" - : "Ḑ" - : "ę" - : "Ę" - : "ģ" - : "Ģ" - : "ḩ" - : "Ḩ" - : "į" - : "Į" - : "ķ" - : "Ķ" - : "ļ" - : "Ļ" - : "¬" - : "ņ" - : "Ņ" - : "ǫ" - : "Ǫ" - : "„" - : "ŗ" - : "Ŗ" - : "¸" - : "ş" - : "Ş" - : "ţ" - : "Ţ" - : "ų" - : "Ų" - : "ǒ" - : "Ǒ" - : "ċ" - : "Ċ" - : "ǚ" - : "Ǚ" - : "₢" - : "ř" - : "Ř" - : "¢" - : "₡" - : "š" - : "Š" - : "ť" - : "Ť" - : "ǚ" - : "Ǚ" - : "ǔ" - : "Ǔ" - : "ӕ" - : "Ӕ" - : "ҽ" - : "Ҽ" - : "ӆ" - : "Ӆ" - : "ԕ" - : "Ԕ" - : "ӎ" - : "Ӎ" - : "ӊ" - : "Ӊ" - : "ҥ" - : "Ҥ" - : "№" - : "№" - : "ԗ" - : "Ԗ" - : "€" - : "ґ" - : "Ґ" - : "ә" - : "Ә" - : "€" - <2> : "∯" - <3> : "∰" - : "⊛" - : "ҩ" - : "Ҩ" - : "⊚" - : "⊜" - : "∮" - : "⊚" - : "∯" - : "∰" - : "⊕" - : "⊘" - : "⊜" - : "⊖" - : "⊖" - : "⊗" - : "⊙" - : "⊕" - : "⊘" - : "◌" - : "§" - : "ԝ" - : "Ԝ" - : "ҵ" - : "Ҵ" - : "ү" - : "Ү" - : "ӡ" - : "Ӡ" - : "₽" - : "₽" - : "ԛ" - : "Ԛ" - : "ž" - : "Ž" - : "†" - : "‡" - : "ḑ" - : "Ḑ" - : "ẛ" - : "᷉" - : "᷇" - : "ԙ" - : "Ԙ" - : "᷈" - : "᷅" - : "᷄" - : "᷆" - : "℃" - : "≗" - : "℉" - : "₫" - : "ð" - : "Ð" - : "⌀" - : "ä" - : "Ä" - : "΅" - : "΅" - : "῁" - : "⍣" - : "΅" - : "῭" - : "῁" - : "ë" - : "Ë" - : "῭" - : "⍩" - : "ï" - : "Ï" - : "ö" - : "Ö" - : "⍢" - : "⍤" - : "⍡" - : "⍥" - : "ü" - : "Ü" - : "ÿ" - : "Ÿ" - : "⌹" - : "ɖ" - : "Ɖ" - : "Ɖ" - : "ď" - : "Ď" - : "đ" - : "Đ" - : "↧" - : "⇊" - : "⇵" - : "ḋ" - : "Ḋ" - : "dz" - : "Dz" - : "DZ" - : "é" - : "É" - : "é" - : "É" - : "ê" - : "Ê" - : "ę" - : "Ę" - : "ë" - : "Ë" - : "ə" - : "Ə" - : "€" - : "€" - : "è" - : "È" - : "ê" - : "Ê" - : "∉" - : "∋" - : "ě" - : "Ě" - : "⋱" - : "⇡" - : "⇣" - : "[…]" - : "⋯" - : "⋯" - : "⇠" - : "⇠" - : "∴" - : "∵" - : "⇢" - : "◌" - : "⇢" - : "⋰" - : "⇠" - : "⇡" - : "⇣" - : "ℓ" - : "ē" - : "Ē" - : "‣" - : "ė" - : "Ė" - : "≙" - : "≅" - : "⊵" - : "⊴" - : "€" - : "€" - : "≕" - : "€" - : "€" - : "ӳ" - : "Ӳ" - : "₽" - : "₽" - : "₫" - : "≠" - : "≗" - : "⇟" - : "€" - : "€" - : "≡" - : "≥" - : "≜" - : "⊆" - : "⨎" - : "≤" - : "ⱡ" - : "Ⱡ" - : "₦" - : "ő" - : "Ő" -

: "₽" -

: "₽" - : "≟" - : "₹" - : "₹" - : "≠" - : "≠" - : "⟹" - : "⌸" - : "≡" - : "⇞" - : "ű" - : "Ű" - : "₩" - : "¥" - : "¥" - : "ë" - : "Ë" - : "ę" - : "Ę" - : "ē" - : "Ē" - <2> : "‼" - : "ạ" - : "Ạ" - : "¦" - : "ḅ" - : "Ḅ" - : "ḍ" - : "Ḍ" - : "ợ" - : "Ợ" - : "ự" - : "Ự" - : "ẹ" - : "Ẹ" - : "¡" - : "⚠" - : "ḥ" - : "Ḥ" - : "ị" - : "Ị" - : "ḳ" - : "Ḳ" - : "‼" - : "ḷ" - : "Ḷ" - : "ṃ" - : "Ṃ" - : "ṇ" - : "Ṇ" - : "ợ" - : "Ợ" - : "ọ" - : "Ọ" - : "ợ" - : "Ợ" - : "ự" - : "Ự" - : "⁉" - : "ṛ" - : "Ṛ" - : "ṣ" - : "Ṣ" - : "ṭ" - : "Ṭ" - : "ự" - : "Ự" - : "ụ" - : "Ụ" - : "ṿ" - : "Ṿ" - : "ẉ" - : "Ẉ" - : "ỵ" - : "Ỵ" - : "ẓ" - : "Ẓ" - : "⚢" - : "⚤" - : "ff" - : "ffi" - : "fi" - : "ffl" - : "fl" - : "ḟ" - : "Ḟ" - : "₣" - : "𝔞" - : "𝔄" - : "𝔄" - : "𝔟" - : "𝔅" - : "𝔅" - : "𝔠" - : "ℭ" - : "ℭ" - : "𝔡" - : "𝔇" - : "𝔇" - : "𝔢" - : "𝔈" - : "𝔈" - : "𝔣" - : "𝔉" - : "𝔉" - : "𝔤" - : "𝔊" - : "𝔊" - : "𝔥" - : "ℌ" - : "ℌ" - : "𝔦" - : "ℑ" - : "ℑ" - : "𝔧" - : "𝔍" - : "𝔍" - : "𝔨" - : "𝔎" - : "𝔎" - : "𝔩" - : "𝔏" - : "𝔏" - : "𝔪" - : "𝔐" - : "𝔐" - : "𝔫" - : "𝔑" - : "𝔑" - : "𝔬" - : "𝔒" - : "𝔒" -

: "𝔭" -

: "𝔓" -

: "𝔓" - : "𝔮" - : "𝔔" - : "𝔔" - : "𝔯" - : "ℜ" - : "ℜ" - : "𝔰" - : "𝔖" - : "𝔖" - : "𝔱" - : "𝔗" - : "𝔗" - : "𝔲" - : "𝔘" - : "𝔘" - : "𝔳" - : "𝔙" - : "𝔙" - : "𝔴" - : "𝔚" - : "𝔚" - : "𝔵" - : "𝔛" - : "𝔛" - : "𝔶" - : "𝔜" - : "𝔜" - : "𝔷" - : "ℨ" - : "ℨ" - : "ſ" - : "ſ" - : "🖕" - : "Η" - : "Η" - : "Α" - : "Α" - : "𝚮" - : "𝚮" - : "𝚨" - : "𝚨" - : "𝚩" - : "𝚩" - : "𝚬" - : "𝚬" - : "𝟋" - : "𝟊" - : "𝟊" - : "𝚮" - : "𝚮" - : "𝚰" - : "𝚰" - : "𝚱" - : "𝚱" - : "𝚳" - : "𝚳" - : "𝚴" - : "𝚴" - : "𝚶" - : "𝚶" -

: "𝚸" -

: "𝚸" - : "ğ" - : "Ğ" - : "𝚸" - : "𝚸" - : "𝚻" - : "𝚻" - : "𝚾" - : "𝚾" - : "𝚼" - : "𝚼" - : "𝚭" - : "𝚭" - : "Β" - : "ģ" - : "Ģ" - : "ϲ" - : "Ϲ" - : "Ϲ" - : "Ε" - : "Ε" - : "ϝ" - : "Ϝ" - : "Ϝ" - : "ɡ" - : "ɢ" - : "Η" - : "Η" - : "Ι" - : "Ι" - : "ϳ" - : "Κ" - : "Κ" - : "Μ" - : "Μ" - : "Ν" - : "Ν" - : "Ο" - : "Ο" - : "ğ" - : "Ğ" - : "ġ" - : "Ġ" -

: "Ρ" -

: "Ρ" - : "ϙ" - : "Ϙ" - : "Ϙ" - : "à" - : "À" - : "ằ" - : "Ằ" - : "ầ" - : "Ầ" - : "ầ" - : "Ầ" - : "ề" - : "Ề" - : "ồ" - : "Ồ" - : "ằ" - : "Ằ" - : "а̀" - : "А̀" - : "р̀" - : "Р̀" - : "ѐ" - : "Ѐ" - : "ѝ" - : "Ѝ" - : "о̀" - : "О̀" - : "у̀" - : "У̀" - : "ằ" - : "Ằ" - : "ầ" - : "Ầ" - : "ề" - : "Ề" - : "ồ" - : "Ồ" - : "ἃ" - : "Ἃ" - : "ἓ" - : "Ἓ" - : "ἣ" - : "Ἣ" - : "ἳ" - : "Ἳ" - : "ὣ" - : "Ὣ" - : "ὃ" - : "Ὃ" - : "ὓ" - : "Ὓ" - : "ῒ" - : "ῢ" - : "ǜ" - : "Ǜ" - : "ờ" - : "Ờ" - : "ừ" - : "Ừ" - : "ḕ" - : "Ḕ" - : "ṑ" - : "Ṑ" - : "ἂ" - : "Ἂ" - : "ἒ" - : "Ἒ" - : "ἢ" - : "Ἢ" - : "ἲ" - : "Ἲ" - : "ὢ" - : "Ὢ" - : "ὂ" - : "Ὂ" - : "ὒ" - : "ề" - : "Ề" - : "è" - : "È" - : "ḕ" - : "Ḕ" - : "а̏" - : "А̏" - : "р̏" - : "Р̏" - : "е̏" - : "Е̏" - : "и̏" - : "И̏" - : "о̏" - : "О̏" - : "у̏" - : "У̏" - : "ὰ" - : "Ὰ" - : "ὲ" - : "Ὲ" - : "ὴ" - : "Ὴ" - : "ῒ" - : "ὶ" - : "Ὶ" - : "ὼ" - : "Ὼ" - : "ὸ" - : "Ὸ" - : "ῢ" - : "ὺ" - : "Ὺ" - : "ì" - : "Ì" - : "ḕ" - : "Ḕ" - : "ṑ" - : "Ṑ" - : "ǹ" - : "Ǹ" - : "ồ" - : "Ồ" - : "ờ" - : "Ờ" - : "ṑ" - : "Ṑ" - : "ò" - : "Ò" - : "ἃ" - : "Ἃ" - : "ἓ" - : "Ἓ" - : "ἣ" - : "Ἣ" - : "ἳ" - : "Ἳ" - : "ὣ" - : "Ὣ" - : "ὃ" - : "Ὃ" - : "ὓ" - : "Ὓ" - : "ἂ" - : "Ἂ" - : "ἒ" - : "Ἒ" - : "ἢ" - : "Ἢ" - : "ἲ" - : "Ἲ" - : "ὢ" - : "Ὢ" - : "ὂ" - : "Ὂ" - : "ὒ" - : "ờ" - : "Ờ" - : "ừ" - : "Ừ" - : "ῒ" - : "ῢ" - : "ǜ" - : "Ǜ" - : "`" - : "ἂ" - : "ἃ" - : "Ἂ" - : "Ἃ" - : "ἒ" - : "ἓ" - : "Ἒ" - : "Ἓ" - : "ἢ" - : "ἣ" - : "Ἢ" - : "Ἣ" - : "ἲ" - : "ἳ" - : "Ἲ" - : "Ἳ" - : "ὂ" - : "ὃ" - : "Ὂ" - : "Ὃ" - : "ὒ" - : "ὓ" - : "Ὓ" - : "ὢ" - : "ὣ" - : "Ὢ" - : "Ὣ" - : "ǜ" - : "Ǜ" - : "ừ" - : "Ừ" - : "ḕ" - : "Ḕ" - : "ṑ" - : "Ṑ" - : "ù" - : "Ù" - : "ẁ" - : "Ẁ" - : "ỳ" - : "Ỳ" - : "â" - : "Â" - : "’" - : "≯" - : "⍩" - : "ê" - : "Ê" - : "≥" - : "≫" - : "î" - : "Î" - : "⋄" - : "⤚" - : "ô" - : "Ô" - : "∴" - : "⩼" - : "”" - : "↣" - : "^" - : "≱" - : "≱" - : "≯" - : "⍄" - : "≥" - : "û" - : "Û" - : "ά" - : "Ά" - : "ɑ" - : "ϐ" - : "≜" - : "⚠" - : "⨺" - : "⨻" - : "⨹" - : "έ" - : "Έ" - : "ɛ" - : "ή" - : "Ή" - : "ɣ" - : "ᾅ" - : "ᾍ" - : "ᾕ" - : "ᾝ" - : "ᾥ" - : "ᾭ" - : "ᾄ" - : "ᾌ" - : "ᾔ" - : "ᾜ" - : "ᾤ" - : "ᾬ" - : "ᾴ" - : "ῄ" - : "ῴ" - : "ᾅ" - : "ᾍ" - : "ᾕ" - : "ᾝ" - : "ᾥ" - : "ᾭ" - : "ᾄ" - : "ᾌ" - : "ᾔ" - : "ᾜ" - : "ᾤ" - : "ᾬ" - : "ᾄ" - : "ᾅ" - : "ᾌ" - : "ᾍ" - : "ᾔ" - : "ᾕ" - : "ᾜ" - : "ᾝ" - : "ᾤ" - : "ᾥ" - : "ᾬ" - : "ᾭ" - : "ᾅ" - : "ᾍ" - : "ᾕ" - : "ᾝ" - : "ᾥ" - : "ᾭ" - : "ᾄ" - : "ᾌ" - : "ᾔ" - : "ᾜ" - : "ᾤ" - : "ᾬ" - : "ᾴ" - : "ῄ" - : "ῴ" - : "ᾅ" - : "ᾍ" - : "ᾕ" - : "ᾝ" - : "ᾥ" - : "ᾭ" - : "ᾄ" - : "ᾌ" - : "ᾔ" - : "ᾜ" - : "ᾤ" - : "ᾬ" - : "ᾄ" - : "ᾅ" - : "ᾌ" - : "ᾍ" - : "ᾔ" - : "ᾕ" - : "ᾜ" - : "ᾝ" - : "ᾤ" - : "ᾥ" - : "ᾬ" - : "ᾭ" - : "Ί" - : "ᾇ" - : "ᾏ" - : "ᾗ" - : "ᾟ" - : "ᾧ" - : "ᾯ" - : "ᾆ" - : "ᾎ" - : "ᾖ" - : "ᾞ" - : "ᾦ" - : "ᾮ" - : "ᾷ" - : "ῇ" - : "ῷ" - : "ᾇ" - : "ᾏ" - : "ᾗ" - : "ᾟ" - : "ᾧ" - : "ᾯ" - : "ᾆ" - : "ᾎ" - : "ᾖ" - : "ᾞ" - : "ᾦ" - : "ᾮ" - : "ᾆ" - : "ᾇ" - : "ᾎ" - : "ᾏ" - : "ᾖ" - : "ᾗ" - : "ᾞ" - : "ᾟ" - : "ᾦ" - : "ᾧ" - : "ᾮ" - : "ᾯ" - : "ᾅ" - : "ᾍ" - : "ᾕ" - : "ᾝ" - : "ᾥ" - : "ᾭ" - : "ᾄ" - : "ᾌ" - : "ᾔ" - : "ᾜ" - : "ᾤ" - : "ᾬ" - : "ᾴ" - : "ῄ" - : "ῴ" - : "ᾅ" - : "ᾍ" - : "ᾕ" - : "ᾝ" - : "ᾥ" - : "ᾭ" - : "ᾄ" - : "ᾌ" - : "ᾔ" - : "ᾜ" - : "ᾤ" - : "ᾬ" - : "ᾄ" - : "ᾅ" - : "ᾌ" - : "ᾍ" - : "ᾔ" - : "ᾕ" - : "ᾜ" - : "ᾝ" - : "ᾤ" - : "ᾥ" - : "ᾬ" - : "ᾭ" - : "ᾁ" - : "ᾉ" - : "ᾑ" - : "ᾙ" - : "ᾡ" - : "ᾩ" - : "ᾃ" - : "ᾋ" - : "ᾓ" - : "ᾛ" - : "ᾣ" - : "ᾫ" - : "ᾂ" - : "ᾊ" - : "ᾒ" - : "ᾚ" - : "ᾢ" - : "ᾪ" - : "ᾲ" - : "ῂ" - : "ῲ" - : "ᾃ" - : "ᾋ" - : "ᾓ" - : "ᾛ" - : "ᾣ" - : "ᾫ" - : "ᾂ" - : "ᾊ" - : "ᾒ" - : "ᾚ" - : "ᾢ" - : "ᾪ" - : "ᾂ" - : "ᾃ" - : "ᾊ" - : "ᾋ" - : "ᾒ" - : "ᾓ" - : "ᾚ" - : "ᾛ" - : "ᾢ" - : "ᾣ" - : "ᾪ" - : "ᾫ" - : "ᾀ" - : "ᾈ" - : "ᾐ" - : "ᾘ" - : "ᾠ" - : "ᾨ" - : "ᾇ" - : "ᾏ" - : "ᾗ" - : "ᾟ" - : "ᾧ" - : "ᾯ" - : "ᾆ" - : "ᾎ" - : "ᾖ" - : "ᾞ" - : "ᾦ" - : "ᾮ" - : "ᾷ" - : "ῇ" - : "ῷ" - : "ᾇ" - : "ᾏ" - : "ᾗ" - : "ᾟ" - : "ᾧ" - : "ᾯ" - : "ᾆ" - : "ᾎ" - : "ᾖ" - : "ᾞ" - : "ᾦ" - : "ᾮ" - : "ᾆ" - : "ᾇ" - : "ᾎ" - : "ᾏ" - : "ᾖ" - : "ᾗ" - : "ᾞ" - : "ᾟ" - : "ᾦ" - : "ᾧ" - : "ᾮ" - : "ᾯ" - : "ᾃ" - : "ᾋ" - : "ᾓ" - : "ᾛ" - : "ᾣ" - : "ᾫ" - : "ᾂ" - : "ᾊ" - : "ᾒ" - : "ᾚ" - : "ᾢ" - : "ᾪ" - : "ᾲ" - : "ῂ" - : "ῲ" - : "ᾃ" - : "ᾋ" - : "ᾓ" - : "ᾛ" - : "ᾣ" - : "ᾫ" - : "ᾂ" - : "ᾊ" - : "ᾒ" - : "ᾚ" - : "ᾢ" - : "ᾪ" - : "ᾂ" - : "ᾃ" - : "ᾊ" - : "ᾋ" - : "ᾒ" - : "ᾓ" - : "ᾚ" - : "ᾛ" - : "ᾢ" - : "ᾣ" - : "ᾪ" - : "ᾫ" - : "ᾴ" - : "ᾳ" - : "ᾼ" - : "ῄ" - : "ῃ" - : "ῌ" - : "ῴ" - : "ῳ" - : "ῼ" - : "ᾁ" - : "ᾉ" - : "ᾑ" - : "ᾙ" - : "ᾡ" - : "ᾩ" - : "ᾀ" - : "ᾈ" - : "ᾐ" - : "ᾘ" - : "ᾠ" - : "ᾨ" - : "ϊ" - : "Ϊ" - : "ᾀ" - : "ᾁ" - : "ᾂ" - : "ᾃ" - : "ᾄ" - : "ᾅ" - : "ᾆ" - : "ᾇ" - : "ᾈ" - : "ᾉ" - : "ᾊ" - : "ᾋ" - : "ᾌ" - : "ᾍ" - : "ᾎ" - : "ᾏ" - : "ᾐ" - : "ᾑ" - : "ᾒ" - : "ᾓ" - : "ᾔ" - : "ᾕ" - : "ᾖ" - : "ᾗ" - : "ᾘ" - : "ᾙ" - : "ᾚ" - : "ᾛ" - : "ᾜ" - : "ᾝ" - : "ᾞ" - : "ᾟ" - : "ᾠ" - : "ᾡ" - : "ᾢ" - : "ᾣ" - : "ᾤ" - : "ᾥ" - : "ᾦ" - : "ᾧ" - : "ᾨ" - : "ᾩ" - : "ᾪ" - : "ᾫ" - : "ᾬ" - : "ᾭ" - : "ᾮ" - : "ᾯ" - : "ᾲ" - : "ῂ" - : "ῲ" - : "ᾷ" - : "ῇ" - : "ῷ" - : "µ" - : "ώ" - : "Ώ" - : "ϖ" - : "ό" - : "Ό" - : "ȣ" - : "Ȣ" - : "ɸ" - : "ϖ" - : "∏" - : "∑" - : "ϛ" - : "Ϛ" - : "Ϛ" - : "ύ" - : "Ύ" - : "ʊ" - : "ϋ" - : "Ϋ" - : "Ρ" - : "Ρ" - : ">" - : "Τ" - : "Τ" - : "Ğ" - : "↟" - : "↞" - : "⤜" - : "ȣ" - : "Ȣ" - : "Ȣ" - : "Χ" - : "Χ" - : "Υ" - : "Υ" - : "Ζ" - : "Ζ" - : "ℵ" - : "ℶ" - : "ḩ" - : "Ḩ" - : "ℸ" - : "ℷ" - : "ʜ" - : "ƕ" - : "Ƕ" - : "Ƕ" - : "í" - : "Í" - : "í" - : "Í" - : "î" - : "Î" - : "ĩ" - : "Ĩ" - : "ǁ" - : "ǀ" - : "į" - : "Į" - : "≢" - : "ï" - : "Ï" - : "ǃ" - : "ì" - : "Ì" - : "î" - : "Î" - : "ı" - : "ɪ" - : "ij" - : "IJ" - : "IJ" - : "ℑ" - : "ℑ" - : "̠" - : "Ī" - : "⊄" - : "⊆" - : "⊄" - : "⊅" - : "⊅" - : "∫" - <2> : "∬" - <3> : "∭" - <4> : "⨌" - : "⨎" - : "∬" - : "⨙" - : "∬" - : "∭" - : "⨌" - : "⨘" - : "⨚" - : "⨙" - : "⋂" - : "İ" - : "ı" - : "̟" - : "ʔ" - : "ï" - : "Ï" - : "į" - : "Į" - : "ⅆ" - : "ⅅ" - : "ⅇ" - : "ⅈ" - : "ⅉ" - : "𝚤" - : "𝚥" - : "ℎ" - : "ī" - : "Ī" - : "j́" - : "J́" - : "j́" - : "J́" - : "ʄ" - : "ɲ" - : "Ɲ" - : "Ɲ" - <2> : "∯" - <3> : "∰" - : "∮" - : "∯" - : "∰" - : "ķ" - : "Ķ" - : "ĸ" - : "ʘ" - : "1ᵉʳ" - : "⸘" - : "‽" - : "½" - : "⅓" - : "¼" - : "⅕" - : "⅙" - : "⅛" - : "⅟" - : "⸘" - : "‽" - : "1ʳᵉ" - : "⅟" - : "1ˢᵗ" - : "∷" - : "2ᵉ" - : "⩵" - : "‼" - : "≫" - : "∬" - : "⅔" - : "⅖" - : "≪" - : "2ⁿᵈ" - : "⁇" - : "⩶" - : "⋙" - : "∭" - : "ɜ" - : "¾" - : "⅗" - : "⅜" - : "⋘" - : "∛" - : "3ʳᵈ" - : "⨌" - : "⅘" - : "∜" - : "4ᵗʰ" - : "⅚" - : "⅝" - : "⁊" - : "⅞" - : "±" - : "ⱥ" - : "Ⱥ" - : "ƀ" - : "ȼ" - : "Ȼ" - : "ғ" - : "Ғ" - : "ҟ" - : "Ҟ" - : "đ" - : "Đ" - : "ɇ" - : "Ɇ" - : "ǥ" - : "Ǥ" - : "ƛ" - : "ħ" - : "Ħ" - : "ɨ" - : "Ɨ" - : "≠" - : "↚" - : "ł" - : "Ł" - : "ø" - : "Ø" - : "↛" - : "ⱦ" - : "Ⱦ" - : "ʡ" - : "Ұ" - : "ұ" - : "↮" - : "ƶ" - : "Ƶ" - : "⊵" - : "⊴" - : "≕" - : "≠" - : "≠" - : "∗" - : "∓" - : "ĺ" - : "Ĺ" - : "ļ" - : "Ļ" - : "↤" - : "↔" - : "⇇" - : "↢" - : "⟵" - : "⇆" - : "≮" - : "⊄" - : "₤" - <3> : "♥" - : "‘" - : "⊲" - : "č" - : "Č" - : "ď" - : "Ď" - : "≮" - : "ě" - : "Ě" - : "≤" - : "≠" - : "♥" - : "≪" - : "ľ" - : "Ľ" - : "←" - : "ň" - : "Ň" - : "⪦" - : "∵" - : "⩻" - : "“" - : "↔" - : "ř" - : "Ř" - : "\\" - : "ˇ" - : "š" - : "Š" - : "≰" - : "≰" - : "ť" - : "Ť" - : "≮" - : "⍃" - : "≤" - : "ž" - : "Ž" - : "lj" - : "Lj" - : "LJ" - : "ľ" - : "Ľ" - : "ʟ" - : "ɭ" - : "£" - : "£" - : "⋀" - : "⩟" - : "⩟" - : "⋁" - : "⊻" - : "⊻" - : "ŀ" - : "Ŀ" - : "ł" - : "Ł" - : "<" - : "<" - : "|" - : "|" - : "ɮ" - <1> : "˥˥" - <2> : "˧˥" - <3> : "˨˩˦" - <4> : "˥˩" - : "ā" - : "Ā" - : "ǟ" - : "Ǟ" - : "ǣ" - : "Ǣ" - : "ȭ" - : "Ȭ" - : "а̄" - : "А̄" - : "р̄" - : "Р̄" - : "е̄" - : "Е̄" - : "ӣ" - : "Ӣ" - : "о̄" - : "О̄" - : "ӯ" - : "Ӯ" - : "ǡ" - : "Ǡ" - : "ȱ" - : "Ȱ" - : "ḹ" - : "Ḹ" - : "ṝ" - : "Ṝ" - : "ǟ" - : "Ǟ" - : "ȫ" - : "Ȫ" - : "ǖ" - : "Ǖ" - : "ǭ" - : "Ǭ" - : "ȭ" - : "Ȭ" - : "ē" - : "Ē" - : "ḹ" - : "Ḹ" - : "ṝ" - : "Ṝ" - : "ḡ" - : "Ḡ" - : "ᾱ" - : "Ᾱ" - : "ῑ" - : "Ῑ" - : "ῡ" - : "Ῡ" - : "ī" - : "Ī" - : "ȫ" - : "Ȫ" - : "ō" - : "Ō" - : "ȭ" - : "Ȭ" - : "ǡ" - : "Ǡ" - : "ȱ" - : "Ȱ" - : "ǟ" - : "Ǟ" - : "ȫ" - : "Ȫ" - : "ǖ" - : "Ǖ" - : "ǭ" - : "Ǭ" - : "Ǭ" - : "ǭ" - : "Ǡ" - : "ǡ" - : "Ȱ" - : "ȱ" - : "Ḹ" - : "ḹ" - : "Ṝ" - : "ṝ" - : "⍑" - : "ǖ" - : "Ǖ" - : "ū" - : "Ū" - : "ȳ" - : "Ȳ" - : "⚤" - : "⚣" - : "µ" - <2> : "ƻ" - : "ā" - : "Ā" - : "¯" - : "⍀" - : "⊣" - : "Ƀ" - : "∹" - : "¬" - : "ғ" - : "Ғ" - : "ӿ" - : "Ӿ" - : "ҟ" - : "Ҟ" - : "ө" - : "Ө" - : "ҍ" - : "Ҍ" - : "ұ" - : "Ұ" - : "đ" - : "Đ" - : "ē" - : "Ē" - : "→" - : "⨺" - : "ᵼ" - : "ᵿ" - : "⤛" - : "↠" - : "ħ" - : "Ħ" - : "ī" - : "Ɨ" - : "⨍" - : "ɉ" - : "Ɉ" - : "⤙" - : "ƚ" - : "Ƚ" - : "—" - : "–" - : "­" - : "ɵ" - : "Ɵ" - : "{" - : "}" - : "∓" -

: "ᵽ" -

: "Ᵽ" - : "⟶" - : "ɍ" - : "Ɍ" - : "⌿" - : "~" - : "₤" - : "⍏" - : "⍖" - : "⊖" - : "ʉ" - : "Ʉ" - : "ɏ" - : "Ɏ" - : "ṁ" - : "Ṁ" - : "₥" - : "♫" - : "⋊" - : "⨻" - : "⨘" - : "⨯" - : "µ" - : "ń" - : "Ń" - : "ñ" - : "Ñ" - : "ƞ" - : "Ƞ" - : "ņ" - : "Ņ" - : "ǝ" - : "Ǝ" - : "₦" - : "ŋ" - : "Ŋ" - : "nj" - : "Nj" - : "NJ" - : "ň" - : "Ň" - : "ɳ" - : "ɴ" - : "-" - : "№" - : "№" - : "♭" - : "♪" - : "♫" - : "♮" - : "♯" - : "♩" - : "♬" - <2> : "∯" - <3> : "∰" - : "Ⓐ" - : "å" - : "Å" - : "ó" - : "Ó" - : "ó" - : "Ó" - : "ô" - : "Ô" - : "õ" - : "Õ" - : "⊛" - : "©" - : "©" - : "©" - : "©" - : "ǫ" - : "Ǫ" - : "⊚" - : "ö" - : "Ö" - : "œ" - : "Œ" - : "⊜" - : "ò" - : "Ò" - : "⧁" - : "Ô" - : "∮" - : "⊚" - : "∯" - : "∰" - : "⊕" - : "⊘" - : "⊜" - : "⊖" - : "⧀" - : "⊖" - : "Ō" - : "⊗" - : "°" - : "ɶ" - : "ⱺ" - : "⊙" - : "⊕" -

: "⌥" - : "ö" - : "Ö" - : "®" - : "®" - : "®" - : "®" - : "§" - : "§" - : "ǫ" - : "Ǫ" - : "⊘" - : "Ø" - : "◌" - : "⦷" - : "⦹" - : "ō" - : "Ō" - : "Ȣ" - : "ů" - : "Ů" - : "ẘ" - : "¤" - : "¤" - : "¤" - : "¤" - : "ẙ" - <0> : "⓪" - <1> <0> : "⑩" - <1> <1> : "⑪" - <1> <2> : "⑫" - <1> <3> : "⑬" - <1> <4> : "⑭" - <1> <5> : "⑮" - <1> <6> : "⑯" - <1> <7> : "⑰" - <1> <8> : "⑱" - <1> <9> : "⑲" - <1> : "⑩" - <1> : "⑪" - <1> : "⑫" - <1> : "⑬" - <1> : "⑭" - <1> : "⑮" - <1> : "⑯" - <1> : "⑰" - <1> : "⑱" - <1> : "⑲" - <1> : "⑫" - <1> : "①" - <2> <0> : "⑳" - <2> <1> : "㉑" - <2> <2> : "㉒" - <2> <3> : "㉓" - <2> <4> : "㉔" - <2> <5> : "㉕" - <2> <6> : "㉖" - <2> <7> : "㉗" - <2> <8> : "㉘" - <2> <9> : "㉙" - <2> : "⑳" - <2> : "㉑" - <2> : "㉒" - <2> : "㉓" - <2> : "㉔" - <2> : "㉕" - <2> : "㉖" - <2> : "㉗" - <2> : "㉘" - <2> : "㉙" - <2> : "㉒" - <2> : "②" - <3> <0> : "㉚" - <3> <1> : "㉛" - <3> <2> : "㉜" - <3> <3> : "㉝" - <3> <4> : "㉞" - <3> <5> : "㉟" - <3> <6> : "㊱" - <3> <7> : "㊲" - <3> <8> : "㊳" - <3> <9> : "㊴" - <3> : "㉚" - <3> : "㉛" - <3> : "㉜" - <3> : "㉝" - <3> : "㉞" - <3> : "㉟" - <3> : "㊱" - <3> : "㊲" - <3> : "㊳" - <3> : "㊴" - <3> : "㉜" - <3> : "③" - <3> : "ɞ" - <4> <0> : "㊵" - <4> <1> : "㊶" - <4> <2> : "㊷" - <4> <3> : "㊸" - <4> <4> : "㊹" - <4> <5> : "㊺" - <4> <6> : "㊻" - <4> <7> : "㊼" - <4> <8> : "㊽" - <4> <9> : "㊾" - <4> : "㊵" - <4> : "㊶" - <4> : "㊷" - <4> : "㊸" - <4> : "㊹" - <4> : "㊺" - <4> : "㊻" - <4> : "㊼" - <4> : "㊽" - <4> : "㊾" - <4> : "㊷" - <4> : "④" - <5> <0> : "㊿" - <5> : "㊿" - <5> : "⑤" - <6> : "⑥" - <7> : "⑦" - <8> : "⑧" - <9> : "⑨" - : "ⓐ" - : "Ⓐ" - : "ⓑ" - : "Ⓑ" - : "ⓒ" - : "Ⓒ" - : "ⓓ" - : "Ⓓ" - : "ⓔ" - : "Ⓔ" - : "ⓕ" - : "Ⓕ" - : "ⓖ" - : "Ⓖ" - : "⪧" - : "ἁ" - : "Ἁ" - : "ἑ" - : "Ἑ" - : "ἡ" - : "Ἡ" - : "ἱ" - : "Ἱ" - : "ὡ" - : "Ὡ" - : "ὁ" - : "Ὁ" - : "ῥ" - : "Ῥ" - : "ὑ" - : "Ὑ" - : "ⓗ" - : "Ⓗ" - : "ⓘ" - : "Ⓘ" - : "ⓙ" - : "Ⓙ" - : "㋐" - : "㋠" - : "㋓" - : "㋫" - : "㋩" - : "㋬" - : "㋪" - : "㋭" - : "㋑" - : "㋕" - : "㋘" - : "㋖" - : "㋙" - : "㋗" - : "㋮" - : "㋱" - : "㋯" - : "㋲" - : "㋰" - : "㋤" - : "㋧" - : "㋥" - : "㋨" - : "㋦" - : "㋔" - : "㋶" - : "㋹" - : "㋷" - : "㋺" - : "㋸" - : "㋚" - : "㋝" - : "㋛" - : "㋞" - : "㋜" - : "㋟" - : "㋢" - : "㋣" - : "㋡" - : "㋒" - : "㋻" - : "㋾" - : "㋳" - : "㋵" - : "㋴" - : "⓪" - <0> : "⑩" - <1> : "⑪" - <2> : "⑫" - <3> : "⑬" - <4> : "⑭" - <5> : "⑮" - <6> : "⑯" - <7> : "⑰" - <8> : "⑱" - <9> : "⑲" - : "⑩" - : "⑪" - : "⑫" - : "⑬" - : "⑭" - : "⑮" - : "⑯" - : "⑰" - : "⑱" - : "⑲" - : "⑫" - : "①" - <0> : "⑳" - <1> : "㉑" - <2> : "㉒" - <3> : "㉓" - <4> : "㉔" - <5> : "㉕" - <6> : "㉖" - <7> : "㉗" - <8> : "㉘" - <9> : "㉙" - : "⑳" - : "㉑" - : "㉒" - : "㉓" - : "㉔" - : "㉕" - : "㉖" - : "㉗" - : "㉘" - : "㉙" - : "㉒" - : "②" - <0> : "㉚" - <1> : "㉛" - <2> : "㉜" - <3> : "㉝" - <4> : "㉞" - <5> : "㉟" - <6> : "㊱" - <7> : "㊲" - <8> : "㊳" - <9> : "㊴" - : "㉚" - : "㉛" - : "㉜" - : "㉝" - : "㉞" - : "㉟" - : "㊱" - : "㊲" - : "㊳" - : "㊴" - : "㉜" - : "③" - : "ɞ" - <0> : "㊵" - <1> : "㊶" - <2> : "㊷" - <3> : "㊸" - <4> : "㊹" - <5> : "㊺" - <6> : "㊻" - <7> : "㊼" - <8> : "㊽" - <9> : "㊾" - : "㊵" - : "㊶" - : "㊷" - : "㊸" - : "㊹" - : "㊺" - : "㊻" - : "㊼" - : "㊽" - : "㊾" - : "㊷" - : "④" - <0> : "㊿" - : "㊿" - : "⑤" - : "⑥" - : "⑦" - : "⑧" - : "⑨" - : "ⓚ" - : "Ⓚ" - <0> : "⑳" - <1> : "㉑" - <2> : "㉒" - <3> : "㉓" - <4> : "㉔" - <5> : "㉕" - <6> : "㉖" - <7> : "㉗" - <8> : "㉘" - <9> : "㉙" - : "⑳" - : "㉑" - : "㉒" - : "㉓" - : "㉔" - : "㉕" - : "㉖" - : "㉗" - : "㉘" - : "㉙" - : "㉒" - : "②" - : "ⓛ" - : "Ⓛ" - : "{" - : "ⓜ" - : "Ⓜ" - : "ⓝ" - : "Ⓝ" - : "ⓞ" - : "Ⓞ" - : "⦅" -

: "ⓟ" -

: "Ⓟ" - : "ⓠ" - : "Ⓠ" - : "ⓡ" - : "Ⓡ" - : "˘" - : "ⓢ" - : "Ⓢ" - : "ⓣ" - : "Ⓣ" - : "㉠" - : "㉮" - : "㉡" - : "㉯" - : "㉢" - : "㉰" - : "㉣" - : "㉱" - : "㉤" - : "㉲" - : "㉥" - : "㉳" - : "㉦" - : "㉴" - : "㉧" - : "㉵" - : "㉨" - : "㉶" - : "㉩" - : "㉷" - : "㉪" - : "㉸" - : "㉫" - : "㉹" - : "㉬" - : "㉺" - : "㉭" - : "㉻" - : "㋼" - : "㋽" - : "㊀" - : "㊆" - : "㊂" - : "㊤" - : "㊦" - : "㊥" - : "㊈" - : "㊁" - : "㊄" - : "㊭" - : "㊡" - : "㊝" - : "㊇" - : "㊅" - : "㊢" - : "㊘" - : "㊩" - : "㊉" - : "㊯" - : "㊞" - : "㊨" - : "㊔" - : "㊃" - : "㊏" - : "㊰" - : "㊛" - : "㊫" - : "㊪" - : "㊧" - : "㊐" - : "㊊" - : "㊒" - : "㊍" - : "㊑" - : "㊣" - : "㊌" - : "㊟" - : "㊋" - : "㊕" - : "㊚" - : "㊬" - : "㊓" - : "㊗" - : "㊙" - : "㊖" - : "㊮" - : "㊜" - : "㊎" - : "㊠" - : "ⓤ" - : "Ⓤ" - : "ⓥ" - : "Ⓥ" - : "ⓦ" - : "Ⓦ" - : "ⓧ" - : "Ⓧ" - : "ⓨ" - : "Ⓨ" - : "ⓩ" - : "Ⓩ" - : "ἀ" - : "Ἀ" - : "ἐ" - : "Ἐ" - : "ἠ" - : "Ἠ" - : "ἰ" - : "Ἰ" - : "ὠ" - : "Ὠ" - : "ὀ" - : "Ὀ" - : "ῤ" - : "ὐ" - : "}" - : "⦆" -

: "₽" -

: "₽" - : "‰" - <0> : "ʘ" - : "ȧ" - : "Ȧ" - : "ṥ" - : "Ṥ" - : "ṥ" - : "Ṥ" - : "·" - : "ḃ" - : "Ḃ" - : "ċ" - : "Ċ" - : "ˑ" - : "∵" - : "ḋ" - : "Ḋ" - : "ṥ" - : "Ṥ" - : "ṩ" - : "Ṩ" - : "ṧ" - : "Ṧ" - : "ė" - : "Ė" - : "•" - : "ṩ" - : "Ṩ" - : "ḟ" - : "Ḟ" - : "ġ" - : "Ġ" - : "›" - : "ḣ" - : "Ḣ" - : "İ" - : "ı" - : "ʘ" - : "⁒" - : "‹" - : "·" - : "ṁ" - : "Ṁ" - : "ṅ" - : "Ṅ" - : "ȯ" - : "Ȯ" - : "…" -

: "ṗ" -

: "Ṗ" - : "ṙ" - : "Ṙ" - : "ṥ" - : "Ṥ" - : "ṧ" - : "Ṧ" - : "⁒" - : "ṡ" - : "Ṡ" - : "ṫ" - : "Ṫ" - : "ẛ" - : "Ṩ" - : "ṩ" - : "⊙" - : "ẇ" - : "Ẇ" - : "ẋ" - : "Ẋ" - : "ẏ" - : "Ẏ" - : "ż" - : "Ż" -

: "¶" -

: "¶" -

: "₰" -

: "ℏ" -

: "ℏ" -

: "ℏ" -

: "ℎ" - : "⨹" - : "±" - : "ơ" - : "Ơ" - : "#" - : "ư" - : "Ư" -

: "⌘" -

: "💩" -

: "¶" -

: "ṗ" -

: "Ṗ" -

: "∏" -

: "∝" -

: "₧" - <2> : "⁇" - : "ả" - : "Ả" - : "ẳ" - : "Ẳ" - : "ẩ" - : "Ẩ" - : "ẩ" - : "Ẩ" - : "ể" - : "Ể" - : "ổ" - : "Ổ" - : "ẳ" - : "Ẳ" - : "ẳ" - : "Ẳ" - : "ẩ" - : "Ẩ" - : "ể" - : "Ể" - : "ổ" - : "Ổ" - : "ở" - : "Ở" - : "ử" - : "Ử" - : "ể" - : "Ể" - : "ẻ" - : "Ẻ" - : "≟" - : "⁈" - : "⩼" - : "ỉ" - : "Ỉ" - : "⁇" - : "⩻" - : "ổ" - : "Ổ" - : "ở" - : "Ở" - : "ỏ" - : "Ỏ" - : "ở" - : "Ở" - : "ử" - : "Ử" - : "¿" - : "⍰" - : "ử" - : "Ử" - : "ủ" - : "Ủ" - : "ỷ" - : "Ỷ" - : "ä" - : "Ä" - : "̈́" - : "̈́" - : "ṏ" - : "Ṏ" - : "„" - : "ӓ" - : "Ӓ" - : "ӵ" - : "Ӵ" - : "ӭ" - : "Ӭ" - : "ё" - : "Ё" - : "ӥ" - : "Ӥ" - : "ӧ" - : "Ӧ" - : "ӱ" - : "Ӱ" - : "ӹ" - : "Ӹ" - : "ӟ" - : "Ӟ" - : "ӝ" - : "Ӝ" - : "̈́" - : "ṻ" - : "Ṻ" - : "ṏ" - : "Ṏ" - : "ë" - : "Ë" - : "”" - : "ϊ" - : "Ϊ" - : "ϋ" - : "Ϋ" - : "ḧ" - : "Ḧ" - : "ï" - : "Ï" - : "“" - : "ṻ" - : "Ṻ" - : "ö" - : "Ö" - : "ṏ" - : "Ṏ" - : "¨" - : "ẗ" - : "ϔ" - : "Ӛ" - : "ӛ" - : "Ӫ" - : "ӫ" - : "ї" - : "Ї" - : "ṻ" - : "Ṻ" - : "ṻ" - : "Ṻ" - : "ü" - : "Ü" - : "ẅ" - : "Ẅ" - : "ẍ" - : "Ẍ" - : "ÿ" - : "Ÿ" - <1> <0> : "ⅹ" - <1> <0> : "Ⅹ" - <1> <1> : "ⅺ" - <1> <1> : "Ⅺ" - <1> <2> : "ⅻ" - <1> <2> : "Ⅻ" - <1> : "ⅰ)" - <1> : "ⅰ." - <1> : "ⅰ" - <1> : "Ⅰ" - <2> : "ⅱ" - <2> : "Ⅱ" - <3> : "ⅲ" - <3> : "Ⅲ" - <4> : "ⅳ" - <4> : "Ⅳ" - <5> : "ⅴ" - <5> : "Ⅴ" - <6> : "ⅵ" - <6> : "Ⅵ" - <7> : "ⅶ" - <7> : "Ⅶ" - <8> : "ⅷ" - <8> : "Ⅷ" - <9> : "ⅸ" - <9> : "Ⅸ" - <3> : "∛" - <4> : "∜" - : "∛" - : "∜" - : "ŕ" - : "Ŕ" - : "ŗ" - : "Ŗ" - : "₹" - : "₹" - : "ℜ" - : "ℜ" - : "⇥" - : "⇄" - : "⇉" - : "≯" - : "⊅" - : "ʼn" - : "ʼ" - : "⊬" - : "ⅹ" - : "Ⅹ" - : "ⅺ" - : "Ⅺ" - : "ⅻ" - : "Ⅻ" - : "ⅰ" - : "Ⅰ" - : "ⅱ" - : "Ⅱ" - : "ⅲ" - : "Ⅲ" - : "ⅳ" - : "Ⅳ" - : "ⅴ" - : "Ⅴ" - : "ⅵ" - : "Ⅵ" - : "ⅶ" - : "Ⅶ" - : "ⅷ" - : "Ⅷ" - : "ⅸ" - : "Ⅸ" - : "ř" - : "Ř" - : "®" - : "®" - : "ʀ" - : "ɼ" - : "₨" - : "ɾ" - : "ś" - : "Ś" - <0> : "𝟬" - <1> : "𝟭" - <2> : "𝟮" - <3> : "𝟯" - <4> : "𝟰" - <5> : "𝟱" - <6> : "𝟲" - <7> : "𝟳" - <8> : "𝟴" - <9> : "𝟵" - : "𝗮" - : "𝗔" - : "𝗔" - : "𝗯" - : "𝗕" - : "𝗕" - : "𝗰" - : "𝗖" - : "𝗖" - : "𝗱" - : "𝗗" - : "𝗗" - : "𝗲" - : "𝗘" - : "𝗘" - : "𝗳" - : "𝗙" - : "𝗙" - : "𝗴" - : "𝗚" - : "𝗚" - : "𝝰" - : "𝝖" - : "𝝱" - : "𝝗" - : "𝞆" - : "𝝬" - : "𝝳" - : "𝝙" - : "𝝴" - : "𝝚" - : "𝝶" - : "𝝜" - : "𝞁" - : "𝝲" - : "𝝘" - : "𝝸" - : "𝝞" - : "𝝹" - : "𝝟" - : "𝝺" - : "𝝠" - : "𝝻" - : "𝝡" - : "𝝼" - : "𝝢" - : "𝞈" - : "𝝮" - : "𝝾" - : "𝝤" - : "𝞅" - : "𝝫" - : "𝝿" - : "𝝥" - : "𝞇" - : "𝝭" - : "𝞀" - : "𝝦" - : "𝞂" - : "𝝨" - : "𝞃" - : "𝝩" - : "𝝷" - : "𝝝" - : "𝞄" - : "𝝪" - : "𝝽" - : "𝝣" - : "𝝵" - : "𝝛" - : "𝗵" - : "𝗛" - : "𝗛" - : "𝗶" - : "𝗜" - : "𝗜" - : "𝗷" - : "𝗝" - : "𝗝" - : "𝗸" - : "𝗞" - : "𝗞" - : "𝟬" - : "𝟭" - : "𝟮" - : "𝟯" - : "𝟰" - : "𝟱" - : "𝟲" - : "𝟳" - : "𝟴" - : "𝟵" - : "𝗹" - : "𝗟" - : "𝗟" - : "𝗺" - : "𝗠" - : "𝗠" - : "𝝯" - : "𝗻" - : "𝗡" - : "𝗡" - : "𝗼" - : "𝗢" - : "𝗢" - : "𝞉" -

: "𝗽" -

: "𝗣" -

: "𝗣" - : "𝗾" - : "𝗤" - : "𝗤" - : "𝗿" - : "𝗥" - : "𝗥" - : "𝘀" - : "𝗦" - : "𝗦" - : "𝘁" - : "𝗧" - : "𝗧" - : "𝞋" - : "𝞍" - : "𝞏" - : "𝟊" - : "𝟋" - : "𝞌" - : "𝞎" - : "𝞊" - : "𝘂" - : "𝗨" - : "𝗨" - : "𝘃" - : "𝗩" - : "𝗩" - : "𝘄" - : "𝗪" - : "𝗪" - : "𝘅" - : "𝗫" - : "𝗫" - : "𝘆" - : "𝗬" - : "𝗬" - : "𝘇" - : "𝗭" - : "𝗭" - : "𝒶" - : "𝒜" - : "𝒜" - : "𝒷" - : "ℬ" - : "𝒸" - : "𝒞" - : "𝒞" - : "𝒹" - : "𝒟" - : "𝒟" - : "ş" - : "ℯ" - : "ℰ" - : "𝒻" - : "ℱ" - : "ℊ" - : "𝒢" - : "𝒢" - : "𝒽" - : "ℋ" - : "𝒾" - : "ℐ" - : "𝒿" - : "𝒥" - : "𝒥" - : "𝓀" - : "𝒦" - : "𝒦" - : "𝓁" - : "ℒ" - : "𝓂" - : "ℳ" - : "𝓃" - : "𝒩" - : "𝒩" - : "ș" - : "Ș" - : "ℴ" - : "𝒪" - : "𝒪" -

: "𝓅" -

: "𝒫" -

: "𝒫" - : "𝓆" - : "𝒬" - : "𝒬" - : "𝓇" - : "ℛ" - : "𝓈" - : "𝒮" - : "𝒮" - : "𝓉" - : "𝒯" - : "𝒯" - : "𝓊" - : "𝒰" - : "𝒰" - : "𝓋" - : "𝒱" - : "𝒱" - : "𝓌" - : "𝒲" - : "𝒲" - : "𝓍" - : "𝒳" - : "𝒳" - : "𝓎" - : "𝒴" - : "𝒴" - : "𝓏" - : "𝒵" - : "𝒵" - : "ą" - : "Ą" - : "ę" - : "Ę" - : "į" - : "Į" - : "ǫ" - : "Ǫ" - : "ș" - : "Ș" - : "ț" - : "Ț" - : "⍮" - : "ų" - : "Ų" - : "§" - : "§" - <0> : "𝟢" - <1> : "𝟣" - <2> : "𝟤" - <3> : "𝟥" - <4> : "𝟦" - <5> : "𝟧" - <6> : "𝟨" - <7> : "𝟩" - <8> : "𝟪" - <9> : "𝟫" - : "𝖺" - : "𝖠" - : "𝖠" - : "𝖻" - : "𝖡" - : "𝖡" - : "𝖼" - : "𝖢" - : "𝖢" - : "𝖽" - : "𝖣" - : "𝖣" - : "𝖾" - : "𝖤" - : "𝖤" - : "𝖿" - : "𝖥" - : "𝖥" - : "𝗀" - : "𝖦" - : "𝖦" - : "𝗁" - : "𝖧" - : "𝖧" - : "𝗂" - : "𝖨" - : "𝖨" - : "𝗃" - : "𝖩" - : "𝖩" - : "𝗄" - : "𝖪" - : "𝖪" - : "𝟢" - : "𝟣" - : "𝟤" - : "𝟥" - : "𝟦" - : "𝟧" - : "𝟨" - : "𝟩" - : "𝟪" - : "𝟫" - : "𝗅" - : "𝖫" - : "𝖫" - : "𝗆" - : "𝖬" - : "𝖬" - : "𝗇" - : "𝖭" - : "𝖭" - : "𝗈" - : "𝖮" - : "𝖮" -

: "𝗉" -

: "𝖯" -

: "𝖯" - : "𝗊" - : "𝖰" - : "𝖰" - : "𝗋" - : "𝖱" - : "𝖱" - : "𝗌" - : "𝖲" - : "𝖲" - : "𝗍" - : "𝖳" - : "𝖳" - : "𝗎" - : "𝖴" - : "𝖴" - : "𝗏" - : "𝖵" - : "𝖵" - : "𝗐" - : "𝖶" - : "𝖶" - : "𝗑" - : "𝖷" - : "𝖷" - : "𝗒" - : "𝖸" - : "𝖸" - : "𝗓" - : "𝖹" - : "𝖹" - : "ʃ" - : "Ʃ" - <0> : "∅" - : "ⱥ" - : "Ⱥ" - : "↗" - : "≁" - : "∤" - : "ƀ" - : "ȼ" - : "Ȼ" - : "ғ" - : "Ғ" - : "ҟ" - : "Ҟ" - : "đ" - : "Đ" - : "ɇ" - : "Ɇ" - : "∉" - : "≠" - : "ǥ" - : "Ǥ" - : "≯" - : "≱" - : "ƛ" - : "ħ" - : "Ħ" - : "⇎" - : "ɨ" - : "Ɨ" - : "⊄" - : "⊅" - : "⨏" - : "↚" - : "≮" - : "≰" - : "ł" - : "Ł" - : "₥" - : "⌿" - : "ø" - : "Ø" -

: "ℏ" - : "↛" - : "\\" - : "ⱦ" - : "Ⱦ" - : "ẜ" - : "ʡ" - : "Ұ" - : "ұ" - : "↮" - : "⇍" - : "⇏" - : "∄" - : "∤" - : "∦" - : "⍁" - : "µ" - : "↙" - : "ƶ" - : "Ƶ" - : "š" - : "Š" - : "℠" - : "℠" - : "℠" - : "℠" - : "§" - : "§" - : "'" - : "^" - : "~" - : "¸" - : "`" - : "^" - : "ˇ" - : "~" - : "˘" - : " " - : " " - : "ṡ" - : "Ṡ" - : "ș" - : "Ș" - : "ß" - : "ẞ" - : "st" - : "∑" - <1> : "˩" - <2> : "˨" - <3> : "˧" - <4> : "˦" - <5> : "˥" - : "♫" - : "ț" - : "Ț" - : "þ" - : "Þ" - : "ť" - : "Ť" - : "ʈ" - : "Ʈ" - : "Ʈ" - : "ŧ" - : "Ŧ" - : "™" - : "™" - : "™" - : "™" - : "ṫ" - : "Ṫ" - : "ț" - : "Ț" - : "ŧ" - : "Ŧ" - : "ſt" - : "ɧ" - : "ɧ" - : "ɸ" - : "Ͷ" - : "ͷ" - : "Ϙ" - : "ϙ" - : "Ͳ" - : "ͳ" - : "יִ" - : "אַ" - : "ײַ" - : "אָ" - : "וֹ" - : "אּ" - : "בּ" - : "בּ" - : "דּ" - : "דּ" - : "ךּ" - : "ףּ" - : "גּ" - : "גּ" - : "הּ" - : "כּ" - : "קּ" - : "לּ" - : "מּ" - : "נּ" - : "פּ" - : "קּ" - : "רּ" - : "סּ" - : "סּ" - : "שּ" - : "תּ" - : "תּ" - : "טּ" - : "טּ" - : "וּ" - : "יּ" - : "צּ" - : "צּ" - : "זּ" - : "זּ" - : "בֿ" - : "בֿ" - : "כֿ" - : "פֿ" - : "שׁ" - : "שּׁ" - : "שּׁ" - : "שׂ" - : "שּׂ" - : "שּׂ" - : "آ" - : "أ" - : "ؤ" - : "ئ" - : "ۂ" - : "ۓ" - : "ۀ" - : "إ" - : "क़" - : "ख़" - : "ग़" - : "ज़" - : "ड़" - : "ढ़" - : "ऩ" - : "फ़" - : "य़" - : "ऱ" - : "ऴ" - : "ড়" - : "ঢ়" - : "য়" - : "ো" - : "ৌ" - : "ਖ਼" - : "ਗ਼" - : "ਜ਼" - : "ਫ਼" - : "ਲ਼" - : "ਸ਼" - : "ଡ଼" - : "ଢ଼" - : "ୋ" - : "ୈ" - : "ୌ" - : "ொ" - : "ௌ" - : "ோ" - : "ஔ" - : "ై" - : "ೀ" - : "ೊ" - : "ೇ" - : "ೈ" - : "ೋ" - : "ൊ" - : "ൌ" - : "ോ" - : "ේ" - : "ො" - : "ෞ" - : "ෝ" - : "ཱི" - : "ཱུ" - : "ཱྀ" - : "ྐྵ" - : "ྒྷ" - : "ྜྷ" - : "ྡྷ" - : "ྦྷ" - : "ྫྷ" - : "ྲྀ" - : "ླྀ" - : "ཀྵ" - : "གྷ" - : "ཌྷ" - : "དྷ" - : "བྷ" - : "ཛྷ" - : "ဦ" - : "ᄁ" - : "ᄓ" - : "ᄔ" - : "ᄕ" - : "ᄖ" - : "ᄗ" - : "ᄄ" - : "ᄘ" - : "ᄙ" - : "ᄛ" - : "ᄚ" - : "ᄜ" - : "ᄝ" - : "ᄞ" - : "ᄟ" - : "ᄠ" - : "ᄈ" - : "ᄡ" - : "ᄥ" - : "ᄫ" - : "ᄧ" - : "ᄨ" - : "ᄩ" - : "ᄪ" - : "ᄬ" - : "ᄢ" - : "ᄣ" - : "ᄤ" - : "ᄦ" - : "ᄬ" - : "ᄭ" - : "ᄮ" - : "ᄯ" - : "ᄰ" - : "ᄱ" - : "ᄲ" - : "ᄊ" - : "ᄴ" - : "ᄵ" - : "ᄶ" - : "ᄷ" - : "ᄸ" - : "ᄹ" - : "ᄺ" - : "ᄻ" - : "ᄳ" - : "ᄴ" - : "ᅁ" - : "ᅂ" - : "ᅃ" - : "ᅄ" - : "ᅅ" - : "ᅇ" - : "ᅈ" - : "ᅉ" - : "ᅊ" - : "ᅋ" - : "ᅆ" - : "ᅍ" - : "ᄍ" - : "ᅒ" - : "ᅓ" - : "ᅖ" - : "ᅗ" - : "ᅘ" - : "ᄢ" - : "ᄣ" - : "ᄤ" - : "ᄥ" - : "ᄦ" - : "ᄳ" - : "ᄽ" - : "ᄿ" - : "ᅏ" - : "ᅑ" - : "ᅶ" - : "ᅷ" - : "ᅢ" - : "ᅸ" - : "ᅹ" - : "ᅤ" - : "ᅺ" - : "ᅻ" - : "ᅼ" - : "ᅦ" - : "ᅽ" - : "ᅾ" - : "ᅨ" - : "ᅪ" - : "ᅫ" - : "ᅿ" - : "ᆀ" - : "ᆁ" - : "ᆂ" - : "ᆃ" - : "ᅬ" - : "ᅫ" - : "ᆄ" - : "ᆅ" - : "ᆆ" - : "ᆇ" - : "ᆈ" - : "ᆉ" - : "ᆊ" - : "ᅯ" - : "ᅰ" - : "ᆌ" - : "ᆍ" - : "ᅱ" - : "ᆋ" - : "ᆋ" - : "ᅰ" - : "ᆎ" - : "ᆏ" - : "ᆐ" - : "ᆑ" - : "ᆒ" - : "ᆓ" - : "ᆔ" - : "ᆕ" - : "ᆖ" - : "ᅴ" - : "ᆗ" - : "ᆘ" - : "ᆙ" - : "ᆚ" - : "ᆛ" - : "ᆜ" - : "ᆝ" - : "ᆟ" - : "ᆠ" - : "ᆡ" - : "ᆢ" - : "ᆩ" - : "ᇃ" - : "ᆪ" - : "ᇄ" - : "ᇄ" - : "ᇅ" - : "ᇆ" - : "ᇇ" - : "ᆬ" - : "ᇉ" - : "ᆭ" - : "ᇈ" - : "ᇊ" - : "ᇋ" - : "ᆰ" - : "ᇌ" - : "ᇍ" - : "ᇎ" - : "ᇐ" - : "ᆱ" - : "ᆲ" - : "ᇓ" - : "ᆳ" - : "ᇖ" - : "ᇘ" - : "ᆴ" - : "ᆵ" - : "ᆶ" - : "ᇑ" - : "ᇒ" - : "ᇔ" - : "ᇕ" - : "ᇗ" - : "ᇙ" - : "ᇌ" - : "ᇑ" - : "ᇒ" - : "ᇓ" - : "ᇕ" - : "ᇔ" - : "ᇖ" - : "ᇚ" - : "ᇛ" - : "ᇜ" - : "ᇝ" - : "ᇞ" - : "ᇢ" - : "ᇠ" - : "ᇡ" - : "ᇟ" - : "ᇣ" - : "ᆹ" - : "ᇦ" - : "ᇤ" - : "ᇥ" - : "ᇧ" - : "ᇨ" - : "ᇩ" - : "ᇪ" - : "ᆻ" - : "ᇬ" - : "ᇭ" - : "ᇮ" - : "ᇯ" - : "ᇳ" - : "ᇴ" - : "ᇵ" - : "ᇶ" - : "ᇷ" - : "ᇸ" - : "ᇏ" - : "ᇞ" - : "ᇭ" - : "ᇱ" - : "ᇲ" - : "𝅗𝅥" - : "𝅘𝅥" - : "𝅘𝅥𝅮" - : "𝅘𝅥𝅯" - : "𝅘𝅥𝅰" - : "𝅘𝅥𝅱" - : "𝅘𝅥𝅲" - : "𝆹𝅥" - : "𝆺𝅥" - : "𝆹𝅥𝅮" - : "𝆹𝅥𝅯" - : "𝆺𝅥𝅮" - : "𝆺𝅥𝅯" - : "῎" - : "῎" - : "῏" - : "῎" - : "῍" - : "῏" - : "῍" - : "῞" - : "῞" - : "῟" - : "῞" - : "῝" - : "῟" - : "῝" - : "⍅" - : "⍇" - : "⍏" - : "⍐" - : "⍆" - : "⍈" - : "⍖" - : "⍗" - : "↨" - : "↢" - : "⟵" - : "⤆" - : "⟸" - : "⟺" - : "∄" - : "∄" - : "⍋" - : "⍍" - : "⍙" - : "⍫" - : "⍒" - : "⍢" - : "⍔" - : "∉" - : "⍷" - : "∌" - : "⍤" - : "⍝" - : "⍕" - : "⍎" - : "⌻" - : "⌾" - : "⍛" - : "∤" - : "∤" - : "∦" - : "∦" - : "⍲" - : "⩓" - : "⋄" - : "⍓" - : "⍱" - : "⋄" - : "⍌" - : "⍝" - : "⍦" - : "≁" - : "≄" - : "≉" - : "≭" - : "⍯" - : "≢" - : "≴" - : "≵" - : "≸" - : "≹" - : "⊀" - : "⊁" - : "⋠" - : "⋡" - : "⍧" - : "⊆" - : "⊇" - : "⊈" - : "⊉" - : "⋢" - : "⋣" - : "⨁" - : "⨂" - : "⨀" - : "⍡" - : "⍑" - : "⍕" - : "⌶" - : "⍎" - : "⌶" - : "⊤" - : "⍊" - : "⊭" - : "⊮" - : "⊯" - : "⋪" - : "⋫" - : "⋬" - : "⋭" - : "⌺" - : "⍚" - : "⍸" - : "⍹" - : "⍶" - : "⍞" - : "⍂" - : "⍠" - : "⌹" - : "⌸" - : "⍄" - : "⍃" - : "⍰" - : "⍁" - : "⍇" - : "⍐" - : "⍈" - : "⍗" - : "⍍" - : "⍔" - : "⌻" - : "⍓" - : "⍌" - : "⍯" - : "⌺" - : "⌼" - : "⍽" - : "☑" - : "☒" - : "⍟" - : "⍉" - : "⌽" - : "⍥" - : "⊖" - : "⊙" - : "⌾" - : "⌼" - : "⍜" - : "☑" - : "☒" - : "⫝̸" - : "ă" - : "Ă" - : "ă" - : "Ă" - : "ú" - : "Ú" - : "ú" - : "Ú" - : "û" - : "Û" - : "ũ" - : "Ũ" - : "ů" - : "Ů" - : "ḝ" - : "Ḝ" - : "ų" - : "Ų" - : "ӑ" - : "Ӑ" - : "ӗ" - : "Ӗ" - : "й" - : "Й" - : "ў" - : "Ў" - : "ӂ" - : "Ӂ" - : "ặ" - : "Ặ" - : "ḝ" - : "Ḝ" - : "ü" - : "Ü" - : "ĕ" - : "Ĕ" - : "ĕ" - : "Ĕ" - : "ặ" - : "Ặ" - : "ğ" - : "Ğ" - : "ğ" - : "Ğ" - : "ù" - : "Ù" - : "û" - : "Û" - : "ᾰ" - : "Ᾰ" - : "ῐ" - : "Ῐ" - : "ῠ" - : "Ῠ" - : "ĭ" - : "Ĭ" - : "ĭ" - : "Ĭ" - : "ю" - : "Ю" - : "ӏ" - : "Ӏ" - : "ū" - : "Ū" - <0> : "₀" - <1> : "₁" - <2> : "₂" - <3> : "₃" - <4> : "₄" - <5> : "₅" - <6> : "₆" - <7> : "₇" - <8> : "₈" - <9> : "₉" - : "ₐ" - : "ₑ" - : "₌" - : "ᵦ" - : "ᵪ" - : "ᵧ" - : "ᵩ" - : "ᵨ" - : "ₕ" - : "ᵢ" - : "⨜" - : "ⱼ" - : "ₖ" - : "₀" - : "₁" - : "₂" - : "₃" - : "₄" - : "₅" - : "₆" - : "₇" - : "₈" - : "₉" - : "₊" - : "₌" - : "₂" - : "₋" - : "ₗ" - : "₋" - : "ₘ" - : "⨱" - : "ₙ" - : "ₒ" - : "₍" - : "₎" - : "₊" -

: "ₚ" - : "ᵣ" - : "ₛ" - : "ₜ" - : "₋" - : "ᵤ" - : "ᵥ" - : "ₓ" - <0> : "₀" - <1> : "₁" - <2> : "₂" - <3> : "₃" - <4> : "₄" - <5> : "₅" - <6> : "₆" - <7> : "₇" - <8> : "₈" - <9> : "₉" - : "ₐ" - : "Ā" - : "ǟ" - : "Ǟ" - : "ǣ" - : "Ǣ" - : "ˌ" - : "¯" - : "ȭ" - : "Ȭ" - : "̩" - : "⌊" - : "⌋" - : "̜" - : "а̄" - : "А̄" - : "р̄" - : "Р̄" - : "е̄" - : "Е̄" - : "ӣ" - : "Ӣ" - : "о̄" - : "О̄" - : "ӯ" - : "Ӯ" - : "ǡ" - : "Ǡ" - : "ȱ" - : "Ȱ" - : "̥" - : "ḹ" - : "Ḹ" - : "ṝ" - : "Ṝ" - : "̯" - : "̬" - : "ḓ" - : "Ḓ" - : "̭" - : "ḙ" - : "Ḙ" - : "ḽ" - : "Ḽ" - : "ṋ" - : "Ṋ" - : "ṱ" - : "Ṱ" - : "ṷ" - : "Ṷ" - : "̤" - : "̱" - : "ǭ" - : "Ǭ" - : "̰" - : "ₑ" - : "Ē" - : "₌" - : "ḹ" - : "Ḹ" - : "ṝ" - : "Ṝ" - : "ḡ" - : "Ḡ" - : "≥" - : "ᾱ" - : "Ᾱ" - : "ᵦ" - : "ᵪ" - : "ᵧ" - : "ῑ" - : "Ῑ" - : "ᵩ" - : "ᵨ" - : "ῡ" - : "Ῡ" - : "ₕ" - : "ᵢ" - : "Ī" - : "⨜" - : "ⱼ" - : "ₖ" - : "₀" - : "₁" - : "₂" - : "₃" - : "₄" - : "₅" - : "₆" - : "₇" - : "₈" - : "₉" - : "₊" - : "₌" - : "₂" - : "₋" - : "≤" - : "ₗ" - : "₋" - : "ₘ" - : "⨱" - : "ₙ" - : "ȫ" - : "Ȫ" - : "ₒ" - : "Ō" - : "ȭ" - : "Ȭ" - : "₍" - : "₎" - : "ǡ" - : "Ǡ" - : "ȱ" - : "Ȱ" - : "₊" -

: "ₚ" - : "ǟ" - : "Ǟ" - : "ȫ" - : "Ȫ" - : "ǖ" - : "Ǖ" - : "ᵣ" - : "ǭ" - : "Ǭ" - : "ₛ" - : "ₜ" - : "Ǭ" - : "ǭ" - : "Ǡ" - : "ǡ" - : "Ȱ" - : "ȱ" - : "Ḹ" - : "ḹ" - : "Ṝ" - : "ṝ" - : "̪" - : "̺" - : "̹" - : "̞" - : "⍙" - : "⍷" - : "₋" - : "⍛" - : "≢" - : "⊆" - : "⊇" - : "⍊" - : "̝" - : "⍚" - : "⍸" - : "⍹" - : "⍶" - : "̻" - : "⍜" - : "ǖ" - : "Ǖ" - : "̲" - : "ᵤ" - : "Ū" - : "ᵥ" - : "ₓ" - : "ȳ" - : "Ȳ" - : "⨚" - : "⋃" - : "ŏ" - : "Ŏ" - : "ŏ" - : "Ŏ" - : "↥" - : "⇅" - : "⇈" - : "ü" - : "Ü" - : "ų" - : "Ų" - : "µ" - : "ḝ" - : "Ḝ" - : "Ḝ" - : "ḝ" - : "Ặ" - : "ặ" - : "ū" - : "Ū" - : "ŭ" - : "Ŭ" - : "ŭ" - : "Ŭ" - : "ǎ" - : "Ǎ" - : "↓" - : "č" - : "Č" - : "ď" - : "Ď" - : "ě" - : "Ě" - : "ǯ" - : "Ǯ" - : "ǧ" - : "Ǧ" - : "ȟ" - : "Ȟ" - : "ǐ" - : "Ǐ" - : "ǰ" - : "ǩ" - : "Ǩ" - : "|" - : "|" - : "ň" - : "Ň" - : "ǒ" - : "Ǒ" - : "ʋ" - : "Ʋ" - : "ř" - : "Ř" - : "⤢" - : "š" - : "Š" - : "ť" - : "Ť" - : "ǔ" - : "Ǔ" - : "ž" - : "Ž" - <3> : "‴" - <4> : "⁗" - : "′" - : "ŵ" - : "Ŵ" - : "°" - : "₩" - : "↯" - : "‴" - : "⁗" -

: "℘" - : "″" - : "ƿ" - : "Ƿ" - : "Ƿ" - <2> : "⎧⎫\n⎩⎭" - <3> : "⎧⎫\n⎨⎬\n⎩⎭" - <4> : "⎧⎫\n⎨⎬\n⎪⎪\n⎩⎭" - <5> : "⎧⎫\n⎪⎪\n⎨⎬\n⎪⎪\n⎩⎭" - <2> : "⎡⎤\n⎣⎦" - <3> : "⎡⎤\n⎢⎥\n⎣⎦" - <4> : "⎡⎤\n⎢⎥\n⎢⎥\n⎣⎦" - <5> : "⎡⎤\n⎢⎥\n⎢⎥\n⎢⎥\n⎣⎦" - : "¤" - : "¤" - : "¤" - : "¤" - <2> : "⎛⎞\n⎝⎠" - <3> : "⎛⎞\n⎜⎟\n⎝⎠" - <4> : "⎛⎞\n⎜⎟\n⎜⎟\n⎝⎠" - <5> : "⎛⎞\n⎜⎟\n⎜⎟\n⎜⎟\n⎝⎠" - : "ɂ" - : "Ɂ" - : "ɤ" - : "×" - : "ý" - : "Ý" - : "ý" - : "Ý" - : "ŷ" - : "Ŷ" - : "ÿ" - : "Ÿ" - : "¥" - : "¥" - : "ȝ" - : "Ȝ" - : "Ȝ" - : "¥" - : "¥" - : "ÿ" - : "Ÿ" - : "ʏ" - : "ź" - : "Ź" - : "ʒ" - : "Ʒ" - : "ž" - : "Ž" - : "ż" - : "Ż" - : "↯" - : "ʒ" - : "Ʒ" - <3> : "ɝ" - : "✔" - : "ɓ" - : "Ɓ" - : "ƈ" - : "Ƈ" - : "ԓ" - : "Ԓ" - : "ӈ" - : "Ӈ" - : "ӽ" - : "Ӽ" - : "ӄ" - : "Ӄ" - : "ꚍ" - : "Ꚍ" - : "ɗ" - : "Ɗ" - : "ӻ" - : "Ӻ" - : "ʄ" - : "ƒ" - : "Ƒ" - : "ɠ" - : "Ɠ" - : "ϗ" - : "Ϗ" - : "ɦ" - : "ɩ" - : "Ɩ" - : "ʝ" - : "ƙ" - : "Ƙ" - : "✔" - : "↩" - : "ɬ" - : "ɱ" - : "Ɱ" - : "⤣" - : "⤥" - : "ɚ" - : "ʛ" - : "Ϗ" - : "Ϗ" - : "ϒ" - : "ϒ" - : "↩" - : "↪" - : "⤤" - : "⤦" - : "ŋ" - : "Ŋ" - : "˞" - : "ơ" - : "Ơ" -

: "ƥ" -

: "Ƥ" - : "↪" - : "ɽ" - : "Ɽ" - : "ђ" - : "Ђ" - : "✔" - : "˞" - : "ʂ" - : "ƭ" - : "Ƭ" - : "˞" - : "ϗ" - : "ꚕ" - : "Ꚕ" - : "↩" - : "ɻ" - : "ư" - : "Ư" - : "ⱱ" - : "ⱳ" - : "Ⱳ" - : "ɣ" - : "Ɣ" - : "ƴ" - : "Ƴ" - : "ʐ" - : "ȁ" - : "Ȁ" - : "ȅ" - : "Ȅ" - : "ȉ" - : "Ȉ" - : "˵" - : "ȍ" - : "Ȍ" - : "ȑ" - : "Ȑ" - : "̏" - : "ȕ" - : "Ȕ" - : "ុះ" - : "ុំ" - : "េះ" - : "ោះ" - : "ាំ" - <3> : "Ɛ" - : "ɐ" - : "⅋" - : "≀" - : "␣" - : "‥" - : "ɔ" - : "Ɔ" - : "һ" - : "Һ" - : "є" - : "Є" - : "ә" - : "Ә" - : "џ" - : "Џ" - : "ԑ" - : "Ԑ" - : "ḁ" - : "Ḁ" - : "̥" - : "ȃ" - : "Ȃ" - : "̑" - : "ȇ" - : "Ȇ" - : "ȋ" - : "Ȋ" - : "ȏ" - : "Ȏ" - : "ȓ" - : "Ȓ" - : "ȗ" - : "Ȗ" - : "ӌ" - : "Ӌ" - : "ґ" - : "Ґ" - : "̨" - : "ȩ" - : "Ȩ" - : "˛" - : "˛" - : "̤" - : "ṳ" - : "Ṳ" - : "ȁ" - : "Ȁ" - : "̏" - : "ȅ" - : "Ȅ" - : "ȉ" - : "Ȉ" - : "˵" - : "ȍ" - : "Ȍ" - : "ȑ" - : "Ȑ" - : "ȕ" - : "Ȕ" - : "̰" - : "ḛ" - : "Ḛ" - : "ḭ" - : "Ḭ" - : "ṵ" - : "Ṵ" - : "ɘ" - : "∋" - : "⋮" - : "⦰" - : "♁" - : "ɒ" - : "ʎ" - : "Ʊ" - : "∐" - : "ɾ" - : "ɥ" - : "⇕" - : "⊃" - : "⊂" - : "ɒ" - : "ˌ" - : "ͻ" - : "Ͻ" - : "Ͻ" - : "ɒ" - : "ɰ" - : "ʕ" - : "ɺ" - : "ɿ" - : "ʅ" - <3> : "‷" - : "‵" - : "‷" - : "‶" - : "ƹ" - : "Ƹ" - : "ɯ" - : "↻" - : "⨳" - : "͡" - : "͜" - : "∓" - : "←" - : "ɹ" - : "ʁ" - : "↻" - : "Ƨ" - : "↩" - : "͵" - : "ͻ" - : "϶" - : "Ͻ" - : "‵" - : "‶" - : "⃖" - : "↤" - : "⇋" - : "±" - : "∢" - : "⊇" - : "⊆" - : "⊤" - : "ȣ" - : "ʌ" - : "Ʌ" - : "ʍ" - : "ʎ" - : "لآ" - : "لأ" - : "لإ" - : "لا" diff --git a/extra/.face.icon b/extra/.face.icon deleted file mode 100644 index 292c06f4..00000000 Binary files a/extra/.face.icon and /dev/null differ diff --git a/extra/emily-modifiers.json b/extra/emily-modifiers.json deleted file mode 100644 index 76c8d328..00000000 --- a/extra/emily-modifiers.json +++ /dev/null @@ -1 +0,0 @@ -{"^": "{#}", "^S": "{#s}", "^T": "{#t}", "^K": "{#k}", "^TK": "{#d}", "^P": "{#p}", "^TP": "{#f}", "^KP": "{#x}", "^W": "{#w}", "^KW": "{#q}", "^PW": "{#b}", "^TKPW": "{#g}", "^STKPW": "{#z}", "^H": "{#h}", "^PH": "{#m}", "^TPH": "{#n}", "^R": "{#r}", "^SR": "{#v}", "^KR": "{#c}", "^KWR": "{#y}", "^SKWR": "{#j}", "^HR": "{#l}", "^A": "{#a}", "^O": "{#o}", "^AO": "{#0}", "^SAO": "{#8}", "^TAO": "{#0}", "^STAO": "{#8}", "^KAO": "{#4}", "^TKAO": "{#4}", "^PAO": "{#0}", "^SPAO": "{#8}", "^TPAO": "{#F0}", "^STPAO": "{#F8}", "^KPAO": "{#4}", "^TKPAO": "{#F4}", "^STKPAO": "{#F12}", "^WAO": "{#2}", "^TWAO": "{#2}", "^KWAO": "{#6}", "^TKWAO": "{#6}", "^PWAO": "{#2}", "^TPWAO": "{#F2}", "^STPWAO": "{#F10}", "^KPWAO": "{#6}", "^TKPWAO": "{#F6}", "^HAO": "{#0}", "^SHAO": "{#8}", "^THAO": "{#0}", "^STHAO": "{#8}", "^KHAO": "{#4}", "^TKHAO": "{#4}", "^PHAO": "{#0}", "^SPHAO": "{#8}", "^TPHAO": "{#F0}", "^STPHAO": "{#F8}", "^KPHAO": "{#4}", "^TKPHAO": "{#F4}", "^STKPHAO": "{#F12}", "^WHAO": "{#2}", "^TWHAO": "{#2}", "^KWHAO": "{#6}", "^TKWHAO": "{#6}", "^PWHAO": "{#2}", "^TPWHAO": "{#F2}", "^STPWHAO": "{#F10}", "^KPWHAO": "{#6}", "^TKPWHAO": "{#F6}", "^RAO": "{#1}", "^SRAO": "{#9}", "^TRAO": "{#1}", "^STRAO": "{#9}", "^KRAO": "{#5}", "^TKRAO": "{#5}", "^PRAO": "{#1}", "^SPRAO": "{#9}", "^TPRAO": "{#F1}", "^STPRAO": "{#F9}", "^KPRAO": "{#5}", "^TKPRAO": "{#F5}", "^WRAO": "{#3}", "^TWRAO": "{#3}", "^KWRAO": "{#7}", "^TKWRAO": "{#7}", "^PWRAO": "{#3}", "^TPWRAO": "{#F3}", "^STPWRAO": "{#F11}", "^KPWRAO": "{#7}", "^TKPWRAO": "{#F7}", "^HRAO": "{#1}", "^SHRAO": "{#9}", "^THRAO": "{#1}", "^STHRAO": "{#9}", "^KHRAO": "{#5}", "^TKHRAO": "{#5}", "^PHRAO": "{#1}", "^SPHRAO": "{#9}", "^TPHRAO": "{#F1}", "^STPHRAO": "{#F9}", "^KPHRAO": "{#5}", "^TKPHRAO": "{#F5}", "^WHRAO": "{#3}", "^TWHRAO": "{#3}", "^KWHRAO": "{#7}", "^TKWHRAO": "{#7}", "^PWHRAO": "{#3}", "^TPWHRAO": "{#F3}", "^STPWHRAO": "{#F11}", "^KPWHRAO": "{#7}", "^TKPWHRAO": "{#F7}", "^*": "{#}", "^-E": "{#e}", "^-U": "{#u}", "^-EU": "{#i}", "^-F": "{#control()}", "^SF": "{#control(s)}", "^TF": "{#control(t)}", "^KF": "{#control(k)}", "^TKF": "{#control(d)}", "^PF": "{#control(p)}", "^TPF": "{#control(f)}", "^KPF": "{#control(x)}", "^WF": "{#control(w)}", "^KWF": "{#control(q)}", "^PWF": "{#control(b)}", "^TKPWF": "{#control(g)}", "^STKPWF": "{#control(z)}", "^HF": "{#control(h)}", "^PHF": "{#control(m)}", "^TPHF": "{#control(n)}", "^RF": "{#control(r)}", "^SRF": "{#control(v)}", "^KRF": "{#control(c)}", "^KWRF": "{#control(y)}", "^SKWRF": "{#control(j)}", "^HRF": "{#control(l)}", "^AF": "{#control(a)}", "^OF": "{#control(o)}", "^AOF": "{#control(0)}", "^SAOF": "{#control(8)}", "^TAOF": "{#control(0)}", "^STAOF": "{#control(8)}", "^KAOF": "{#control(4)}", "^TKAOF": "{#control(4)}", "^PAOF": "{#control(0)}", "^SPAOF": "{#control(8)}", "^TPAOF": "{#control(F0)}", "^STPAOF": "{#control(F8)}", "^KPAOF": "{#control(4)}", "^TKPAOF": "{#control(F4)}", "^STKPAOF": "{#control(F12)}", "^WAOF": "{#control(2)}", "^TWAOF": "{#control(2)}", "^KWAOF": "{#control(6)}", "^TKWAOF": "{#control(6)}", "^PWAOF": "{#control(2)}", "^TPWAOF": "{#control(F2)}", "^STPWAOF": "{#control(F10)}", "^KPWAOF": "{#control(6)}", "^TKPWAOF": "{#control(F6)}", "^HAOF": "{#control(0)}", "^SHAOF": "{#control(8)}", "^THAOF": "{#control(0)}", "^STHAOF": "{#control(8)}", "^KHAOF": "{#control(4)}", "^TKHAOF": "{#control(4)}", "^PHAOF": "{#control(0)}", "^SPHAOF": "{#control(8)}", "^TPHAOF": "{#control(F0)}", "^STPHAOF": "{#control(F8)}", "^KPHAOF": "{#control(4)}", "^TKPHAOF": "{#control(F4)}", "^STKPHAOF": "{#control(F12)}", "^WHAOF": "{#control(2)}", "^TWHAOF": "{#control(2)}", "^KWHAOF": "{#control(6)}", "^TKWHAOF": "{#control(6)}", "^PWHAOF": "{#control(2)}", "^TPWHAOF": "{#control(F2)}", "^STPWHAOF": "{#control(F10)}", "^KPWHAOF": "{#control(6)}", "^TKPWHAOF": "{#control(F6)}", "^RAOF": "{#control(1)}", "^SRAOF": "{#control(9)}", "^TRAOF": "{#control(1)}", "^STRAOF": "{#control(9)}", "^KRAOF": "{#control(5)}", "^TKRAOF": "{#control(5)}", "^PRAOF": "{#control(1)}", "^SPRAOF": "{#control(9)}", "^TPRAOF": "{#control(F1)}", "^STPRAOF": "{#control(F9)}", "^KPRAOF": "{#control(5)}", "^TKPRAOF": "{#control(F5)}", "^WRAOF": "{#control(3)}", "^TWRAOF": "{#control(3)}", "^KWRAOF": "{#control(7)}", "^TKWRAOF": "{#control(7)}", "^PWRAOF": "{#control(3)}", "^TPWRAOF": "{#control(F3)}", "^STPWRAOF": "{#control(F11)}", "^KPWRAOF": "{#control(7)}", "^TKPWRAOF": "{#control(F7)}", "^HRAOF": "{#control(1)}", "^SHRAOF": "{#control(9)}", "^THRAOF": "{#control(1)}", "^STHRAOF": "{#control(9)}", "^KHRAOF": "{#control(5)}", "^TKHRAOF": "{#control(5)}", "^PHRAOF": "{#control(1)}", "^SPHRAOF": "{#control(9)}", "^TPHRAOF": "{#control(F1)}", "^STPHRAOF": "{#control(F9)}", "^KPHRAOF": "{#control(5)}", "^TKPHRAOF": "{#control(F5)}", "^WHRAOF": "{#control(3)}", "^TWHRAOF": "{#control(3)}", "^KWHRAOF": "{#control(7)}", "^TKWHRAOF": "{#control(7)}", "^PWHRAOF": "{#control(3)}", "^TPWHRAOF": "{#control(F3)}", "^STPWHRAOF": "{#control(F11)}", "^KPWHRAOF": "{#control(7)}", "^TKPWHRAOF": "{#control(F7)}", "^*F": "{#control()}", "^-EF": "{#control(e)}", "^-UF": "{#control(u)}", "^-EUF": "{#control(i)}", "^-R": "{#shift()}", "^AR": "{#shift(a)}", "^OR": "{#shift(o)}", "^AOR": "{#shift(0)}", "^SAOR": "{#shift(8)}", "^TAOR": "{#shift(0)}", "^STAOR": "{#shift(8)}", "^KAOR": "{#shift(4)}", "^TKAOR": "{#shift(4)}", "^PAOR": "{#shift(0)}", "^SPAOR": "{#shift(8)}", "^TPAOR": "{#shift(F0)}", "^STPAOR": "{#shift(F8)}", "^KPAOR": "{#shift(4)}", "^TKPAOR": "{#shift(F4)}", "^STKPAOR": "{#shift(F12)}", "^WAOR": "{#shift(2)}", "^TWAOR": "{#shift(2)}", "^KWAOR": "{#shift(6)}", "^TKWAOR": "{#shift(6)}", "^PWAOR": "{#shift(2)}", "^TPWAOR": "{#shift(F2)}", "^STPWAOR": "{#shift(F10)}", "^KPWAOR": "{#shift(6)}", "^TKPWAOR": "{#shift(F6)}", "^HAOR": "{#shift(0)}", "^SHAOR": "{#shift(8)}", "^THAOR": "{#shift(0)}", "^STHAOR": "{#shift(8)}", "^KHAOR": "{#shift(4)}", "^TKHAOR": "{#shift(4)}", "^PHAOR": "{#shift(0)}", "^SPHAOR": "{#shift(8)}", "^TPHAOR": "{#shift(F0)}", "^STPHAOR": "{#shift(F8)}", "^KPHAOR": "{#shift(4)}", "^TKPHAOR": "{#shift(F4)}", "^STKPHAOR": "{#shift(F12)}", "^WHAOR": "{#shift(2)}", "^TWHAOR": "{#shift(2)}", "^KWHAOR": "{#shift(6)}", "^TKWHAOR": "{#shift(6)}", "^PWHAOR": "{#shift(2)}", "^TPWHAOR": "{#shift(F2)}", "^STPWHAOR": "{#shift(F10)}", "^KPWHAOR": "{#shift(6)}", "^TKPWHAOR": "{#shift(F6)}", "^RAOR": "{#shift(1)}", "^SRAOR": "{#shift(9)}", "^TRAOR": "{#shift(1)}", "^STRAOR": "{#shift(9)}", "^KRAOR": "{#shift(5)}", "^TKRAOR": "{#shift(5)}", "^PRAOR": "{#shift(1)}", "^SPRAOR": "{#shift(9)}", "^TPRAOR": "{#shift(F1)}", "^STPRAOR": "{#shift(F9)}", "^KPRAOR": "{#shift(5)}", "^TKPRAOR": "{#shift(F5)}", "^WRAOR": "{#shift(3)}", "^TWRAOR": "{#shift(3)}", "^KWRAOR": "{#shift(7)}", "^TKWRAOR": "{#shift(7)}", "^PWRAOR": "{#shift(3)}", "^TPWRAOR": "{#shift(F3)}", "^STPWRAOR": "{#shift(F11)}", "^KPWRAOR": "{#shift(7)}", "^TKPWRAOR": "{#shift(F7)}", "^HRAOR": "{#shift(1)}", "^SHRAOR": "{#shift(9)}", "^THRAOR": "{#shift(1)}", "^STHRAOR": "{#shift(9)}", "^KHRAOR": "{#shift(5)}", "^TKHRAOR": "{#shift(5)}", "^PHRAOR": "{#shift(1)}", "^SPHRAOR": "{#shift(9)}", "^TPHRAOR": "{#shift(F1)}", "^STPHRAOR": "{#shift(F9)}", "^KPHRAOR": "{#shift(5)}", "^TKPHRAOR": "{#shift(F5)}", "^WHRAOR": "{#shift(3)}", "^TWHRAOR": "{#shift(3)}", "^KWHRAOR": "{#shift(7)}", "^TKWHRAOR": "{#shift(7)}", "^PWHRAOR": "{#shift(3)}", "^TPWHRAOR": "{#shift(F3)}", "^STPWHRAOR": "{#shift(F11)}", "^KPWHRAOR": "{#shift(7)}", "^TKPWHRAOR": "{#shift(F7)}", "^*R": "{#shift()}", "^-ER": "{#shift(e)}", "^-UR": "{#shift(u)}", "^-EUR": "{#shift(i)}", "^-FR": "{#control(shift())}", "^SFR": "{#control(shift(s))}", "^TFR": "{#control(shift(t))}", "^KFR": "{#control(shift(k))}", "^TKFR": "{#control(shift(d))}", "^PFR": "{#control(shift(p))}", "^TPFR": "{#control(shift(f))}", "^KPFR": "{#control(shift(x))}", "^WFR": "{#control(shift(w))}", "^KWFR": "{#control(shift(q))}", "^PWFR": "{#control(shift(b))}", "^TKPWFR": "{#control(shift(g))}", "^STKPWFR": "{#control(shift(z))}", "^HFR": "{#control(shift(h))}", "^PHFR": "{#control(shift(m))}", "^TPHFR": "{#control(shift(n))}", "^RFR": "{#control(shift(r))}", "^SRFR": "{#control(shift(v))}", "^KRFR": "{#control(shift(c))}", "^KWRFR": "{#control(shift(y))}", "^SKWRFR": "{#control(shift(j))}", "^HRFR": "{#control(shift(l))}", "^AFR": "{#control(shift(a))}", "^OFR": "{#control(shift(o))}", "^AOFR": "{#control(shift(0))}", "^SAOFR": "{#control(shift(8))}", "^TAOFR": "{#control(shift(0))}", "^STAOFR": "{#control(shift(8))}", "^KAOFR": "{#control(shift(4))}", "^TKAOFR": "{#control(shift(4))}", "^PAOFR": "{#control(shift(0))}", "^SPAOFR": "{#control(shift(8))}", "^TPAOFR": "{#control(shift(F0))}", "^STPAOFR": "{#control(shift(F8))}", "^KPAOFR": "{#control(shift(4))}", "^TKPAOFR": "{#control(shift(F4))}", "^STKPAOFR": "{#control(shift(F12))}", "^WAOFR": "{#control(shift(2))}", "^TWAOFR": "{#control(shift(2))}", "^KWAOFR": "{#control(shift(6))}", "^TKWAOFR": "{#control(shift(6))}", "^PWAOFR": "{#control(shift(2))}", "^TPWAOFR": "{#control(shift(F2))}", "^STPWAOFR": "{#control(shift(F10))}", "^KPWAOFR": "{#control(shift(6))}", "^TKPWAOFR": "{#control(shift(F6))}", "^HAOFR": "{#control(shift(0))}", "^SHAOFR": "{#control(shift(8))}", "^THAOFR": "{#control(shift(0))}", "^STHAOFR": "{#control(shift(8))}", "^KHAOFR": "{#control(shift(4))}", "^TKHAOFR": "{#control(shift(4))}", "^PHAOFR": "{#control(shift(0))}", "^SPHAOFR": "{#control(shift(8))}", "^TPHAOFR": "{#control(shift(F0))}", "^STPHAOFR": "{#control(shift(F8))}", "^KPHAOFR": "{#control(shift(4))}", "^TKPHAOFR": "{#control(shift(F4))}", "^STKPHAOFR": "{#control(shift(F12))}", "^WHAOFR": "{#control(shift(2))}", "^TWHAOFR": "{#control(shift(2))}", "^KWHAOFR": "{#control(shift(6))}", "^TKWHAOFR": "{#control(shift(6))}", "^PWHAOFR": "{#control(shift(2))}", "^TPWHAOFR": "{#control(shift(F2))}", "^STPWHAOFR": "{#control(shift(F10))}", "^KPWHAOFR": "{#control(shift(6))}", "^TKPWHAOFR": "{#control(shift(F6))}", "^RAOFR": "{#control(shift(1))}", "^SRAOFR": "{#control(shift(9))}", "^TRAOFR": "{#control(shift(1))}", "^STRAOFR": "{#control(shift(9))}", "^KRAOFR": "{#control(shift(5))}", "^TKRAOFR": "{#control(shift(5))}", "^PRAOFR": "{#control(shift(1))}", "^SPRAOFR": "{#control(shift(9))}", "^TPRAOFR": "{#control(shift(F1))}", "^STPRAOFR": "{#control(shift(F9))}", "^KPRAOFR": "{#control(shift(5))}", "^TKPRAOFR": "{#control(shift(F5))}", "^WRAOFR": "{#control(shift(3))}", "^TWRAOFR": "{#control(shift(3))}", "^KWRAOFR": "{#control(shift(7))}", "^TKWRAOFR": "{#control(shift(7))}", "^PWRAOFR": "{#control(shift(3))}", "^TPWRAOFR": "{#control(shift(F3))}", "^STPWRAOFR": "{#control(shift(F11))}", "^KPWRAOFR": "{#control(shift(7))}", "^TKPWRAOFR": "{#control(shift(F7))}", "^HRAOFR": "{#control(shift(1))}", "^SHRAOFR": "{#control(shift(9))}", "^THRAOFR": "{#control(shift(1))}", "^STHRAOFR": "{#control(shift(9))}", "^KHRAOFR": "{#control(shift(5))}", "^TKHRAOFR": "{#control(shift(5))}", "^PHRAOFR": "{#control(shift(1))}", "^SPHRAOFR": "{#control(shift(9))}", "^TPHRAOFR": "{#control(shift(F1))}", "^STPHRAOFR": "{#control(shift(F9))}", "^KPHRAOFR": "{#control(shift(5))}", "^TKPHRAOFR": "{#control(shift(F5))}", "^WHRAOFR": "{#control(shift(3))}", "^TWHRAOFR": "{#control(shift(3))}", "^KWHRAOFR": "{#control(shift(7))}", "^TKWHRAOFR": "{#control(shift(7))}", "^PWHRAOFR": "{#control(shift(3))}", "^TPWHRAOFR": "{#control(shift(F3))}", "^STPWHRAOFR": "{#control(shift(F11))}", "^KPWHRAOFR": "{#control(shift(7))}", "^TKPWHRAOFR": "{#control(shift(F7))}", "^*FR": "{#control(shift())}", "^-EFR": "{#control(shift(e))}", "^-UFR": "{#control(shift(u))}", "^-EUFR": "{#control(shift(i))}", "^-P": "{#super()}", "^AP": "{#super(a)}", "^OP": "{#super(o)}", "^AOP": "{#super(0)}", "^SAOP": "{#super(8)}", "^TAOP": "{#super(0)}", "^STAOP": "{#super(8)}", "^KAOP": "{#super(4)}", "^TKAOP": "{#super(4)}", "^PAOP": "{#super(0)}", "^SPAOP": "{#super(8)}", "^TPAOP": "{#super(F0)}", "^STPAOP": "{#super(F8)}", "^KPAOP": "{#super(4)}", "^TKPAOP": "{#super(F4)}", "^STKPAOP": "{#super(F12)}", "^WAOP": "{#super(2)}", "^TWAOP": "{#super(2)}", "^KWAOP": "{#super(6)}", "^TKWAOP": "{#super(6)}", "^PWAOP": "{#super(2)}", "^TPWAOP": "{#super(F2)}", "^STPWAOP": "{#super(F10)}", "^KPWAOP": "{#super(6)}", "^TKPWAOP": "{#super(F6)}", "^HAOP": "{#super(0)}", "^SHAOP": "{#super(8)}", "^THAOP": "{#super(0)}", "^STHAOP": "{#super(8)}", "^KHAOP": "{#super(4)}", "^TKHAOP": "{#super(4)}", "^PHAOP": "{#super(0)}", "^SPHAOP": "{#super(8)}", "^TPHAOP": "{#super(F0)}", "^STPHAOP": "{#super(F8)}", "^KPHAOP": "{#super(4)}", "^TKPHAOP": "{#super(F4)}", "^STKPHAOP": "{#super(F12)}", "^WHAOP": "{#super(2)}", "^TWHAOP": "{#super(2)}", "^KWHAOP": "{#super(6)}", "^TKWHAOP": "{#super(6)}", "^PWHAOP": "{#super(2)}", "^TPWHAOP": "{#super(F2)}", "^STPWHAOP": "{#super(F10)}", "^KPWHAOP": "{#super(6)}", "^TKPWHAOP": "{#super(F6)}", "^RAOP": "{#super(1)}", "^SRAOP": "{#super(9)}", "^TRAOP": "{#super(1)}", "^STRAOP": "{#super(9)}", "^KRAOP": "{#super(5)}", "^TKRAOP": "{#super(5)}", "^PRAOP": "{#super(1)}", "^SPRAOP": "{#super(9)}", "^TPRAOP": "{#super(F1)}", "^STPRAOP": "{#super(F9)}", "^KPRAOP": "{#super(5)}", "^TKPRAOP": "{#super(F5)}", "^WRAOP": "{#super(3)}", "^TWRAOP": "{#super(3)}", "^KWRAOP": "{#super(7)}", "^TKWRAOP": "{#super(7)}", "^PWRAOP": "{#super(3)}", "^TPWRAOP": "{#super(F3)}", "^STPWRAOP": "{#super(F11)}", "^KPWRAOP": "{#super(7)}", "^TKPWRAOP": "{#super(F7)}", "^HRAOP": "{#super(1)}", "^SHRAOP": "{#super(9)}", "^THRAOP": "{#super(1)}", "^STHRAOP": "{#super(9)}", "^KHRAOP": "{#super(5)}", "^TKHRAOP": "{#super(5)}", "^PHRAOP": "{#super(1)}", "^SPHRAOP": "{#super(9)}", "^TPHRAOP": "{#super(F1)}", "^STPHRAOP": "{#super(F9)}", "^KPHRAOP": "{#super(5)}", "^TKPHRAOP": "{#super(F5)}", "^WHRAOP": "{#super(3)}", "^TWHRAOP": "{#super(3)}", "^KWHRAOP": "{#super(7)}", "^TKWHRAOP": "{#super(7)}", "^PWHRAOP": "{#super(3)}", "^TPWHRAOP": "{#super(F3)}", "^STPWHRAOP": "{#super(F11)}", "^KPWHRAOP": "{#super(7)}", "^TKPWHRAOP": "{#super(F7)}", "^*P": "{#super()}", "^-EP": "{#super(e)}", "^-UP": "{#super(u)}", "^-EUP": "{#super(i)}", "^-FP": "{#super(control())}", "^SFP": "{#super(control(s))}", "^TFP": "{#super(control(t))}", "^KFP": "{#super(control(k))}", "^TKFP": "{#super(control(d))}", "^PFP": "{#super(control(p))}", "^TPFP": "{#super(control(f))}", "^KPFP": "{#super(control(x))}", "^WFP": "{#super(control(w))}", "^KWFP": "{#super(control(q))}", "^PWFP": "{#super(control(b))}", "^TKPWFP": "{#super(control(g))}", "^STKPWFP": "{#super(control(z))}", "^HFP": "{#super(control(h))}", "^PHFP": "{#super(control(m))}", "^TPHFP": "{#super(control(n))}", "^RFP": "{#super(control(r))}", "^SRFP": "{#super(control(v))}", "^KRFP": "{#super(control(c))}", "^KWRFP": "{#super(control(y))}", "^SKWRFP": "{#super(control(j))}", "^HRFP": "{#super(control(l))}", "^AFP": "{#super(control(a))}", "^OFP": "{#super(control(o))}", "^AOFP": "{#super(control(0))}", "^SAOFP": "{#super(control(8))}", "^TAOFP": "{#super(control(0))}", "^STAOFP": "{#super(control(8))}", "^KAOFP": "{#super(control(4))}", "^TKAOFP": "{#super(control(4))}", "^PAOFP": "{#super(control(0))}", "^SPAOFP": "{#super(control(8))}", "^TPAOFP": "{#super(control(F0))}", "^STPAOFP": "{#super(control(F8))}", "^KPAOFP": "{#super(control(4))}", "^TKPAOFP": "{#super(control(F4))}", "^STKPAOFP": "{#super(control(F12))}", "^WAOFP": "{#super(control(2))}", "^TWAOFP": "{#super(control(2))}", "^KWAOFP": "{#super(control(6))}", "^TKWAOFP": "{#super(control(6))}", "^PWAOFP": "{#super(control(2))}", "^TPWAOFP": "{#super(control(F2))}", "^STPWAOFP": "{#super(control(F10))}", "^KPWAOFP": "{#super(control(6))}", "^TKPWAOFP": "{#super(control(F6))}", "^HAOFP": "{#super(control(0))}", "^SHAOFP": "{#super(control(8))}", "^THAOFP": "{#super(control(0))}", "^STHAOFP": "{#super(control(8))}", "^KHAOFP": "{#super(control(4))}", "^TKHAOFP": "{#super(control(4))}", "^PHAOFP": "{#super(control(0))}", "^SPHAOFP": "{#super(control(8))}", "^TPHAOFP": "{#super(control(F0))}", "^STPHAOFP": "{#super(control(F8))}", "^KPHAOFP": "{#super(control(4))}", "^TKPHAOFP": "{#super(control(F4))}", "^STKPHAOFP": "{#super(control(F12))}", "^WHAOFP": "{#super(control(2))}", "^TWHAOFP": "{#super(control(2))}", "^KWHAOFP": "{#super(control(6))}", "^TKWHAOFP": "{#super(control(6))}", "^PWHAOFP": "{#super(control(2))}", "^TPWHAOFP": "{#super(control(F2))}", "^STPWHAOFP": "{#super(control(F10))}", "^KPWHAOFP": "{#super(control(6))}", "^TKPWHAOFP": "{#super(control(F6))}", "^RAOFP": "{#super(control(1))}", "^SRAOFP": "{#super(control(9))}", "^TRAOFP": "{#super(control(1))}", "^STRAOFP": "{#super(control(9))}", "^KRAOFP": "{#super(control(5))}", "^TKRAOFP": "{#super(control(5))}", "^PRAOFP": "{#super(control(1))}", "^SPRAOFP": "{#super(control(9))}", "^TPRAOFP": "{#super(control(F1))}", "^STPRAOFP": "{#super(control(F9))}", "^KPRAOFP": "{#super(control(5))}", "^TKPRAOFP": "{#super(control(F5))}", "^WRAOFP": "{#super(control(3))}", "^TWRAOFP": "{#super(control(3))}", "^KWRAOFP": "{#super(control(7))}", "^TKWRAOFP": "{#super(control(7))}", "^PWRAOFP": "{#super(control(3))}", "^TPWRAOFP": "{#super(control(F3))}", "^STPWRAOFP": "{#super(control(F11))}", "^KPWRAOFP": "{#super(control(7))}", "^TKPWRAOFP": "{#super(control(F7))}", "^HRAOFP": "{#super(control(1))}", "^SHRAOFP": "{#super(control(9))}", "^THRAOFP": "{#super(control(1))}", "^STHRAOFP": "{#super(control(9))}", "^KHRAOFP": "{#super(control(5))}", "^TKHRAOFP": "{#super(control(5))}", "^PHRAOFP": "{#super(control(1))}", "^SPHRAOFP": "{#super(control(9))}", "^TPHRAOFP": "{#super(control(F1))}", "^STPHRAOFP": "{#super(control(F9))}", "^KPHRAOFP": "{#super(control(5))}", "^TKPHRAOFP": "{#super(control(F5))}", "^WHRAOFP": "{#super(control(3))}", "^TWHRAOFP": "{#super(control(3))}", "^KWHRAOFP": "{#super(control(7))}", "^TKWHRAOFP": "{#super(control(7))}", "^PWHRAOFP": "{#super(control(3))}", "^TPWHRAOFP": "{#super(control(F3))}", "^STPWHRAOFP": "{#super(control(F11))}", "^KPWHRAOFP": "{#super(control(7))}", "^TKPWHRAOFP": "{#super(control(F7))}", "^*FP": "{#super(control())}", "^-EFP": "{#super(control(e))}", "^-UFP": "{#super(control(u))}", "^-EUFP": "{#super(control(i))}", "^-RP": "{#super(shift())}", "^ARP": "{#super(shift(a))}", "^ORP": "{#super(shift(o))}", "^AORP": "{#super(shift(0))}", "^SAORP": "{#super(shift(8))}", "^TAORP": "{#super(shift(0))}", "^STAORP": "{#super(shift(8))}", "^KAORP": "{#super(shift(4))}", "^TKAORP": "{#super(shift(4))}", "^PAORP": "{#super(shift(0))}", "^SPAORP": "{#super(shift(8))}", "^TPAORP": "{#super(shift(F0))}", "^STPAORP": "{#super(shift(F8))}", "^KPAORP": "{#super(shift(4))}", "^TKPAORP": "{#super(shift(F4))}", "^STKPAORP": "{#super(shift(F12))}", "^WAORP": "{#super(shift(2))}", "^TWAORP": "{#super(shift(2))}", "^KWAORP": "{#super(shift(6))}", "^TKWAORP": "{#super(shift(6))}", "^PWAORP": "{#super(shift(2))}", "^TPWAORP": "{#super(shift(F2))}", "^STPWAORP": "{#super(shift(F10))}", "^KPWAORP": "{#super(shift(6))}", "^TKPWAORP": "{#super(shift(F6))}", "^HAORP": "{#super(shift(0))}", "^SHAORP": "{#super(shift(8))}", "^THAORP": "{#super(shift(0))}", "^STHAORP": "{#super(shift(8))}", "^KHAORP": "{#super(shift(4))}", "^TKHAORP": "{#super(shift(4))}", "^PHAORP": "{#super(shift(0))}", "^SPHAORP": "{#super(shift(8))}", "^TPHAORP": "{#super(shift(F0))}", "^STPHAORP": "{#super(shift(F8))}", "^KPHAORP": "{#super(shift(4))}", "^TKPHAORP": "{#super(shift(F4))}", "^STKPHAORP": "{#super(shift(F12))}", "^WHAORP": "{#super(shift(2))}", "^TWHAORP": "{#super(shift(2))}", "^KWHAORP": "{#super(shift(6))}", "^TKWHAORP": "{#super(shift(6))}", "^PWHAORP": "{#super(shift(2))}", "^TPWHAORP": "{#super(shift(F2))}", "^STPWHAORP": "{#super(shift(F10))}", "^KPWHAORP": "{#super(shift(6))}", "^TKPWHAORP": "{#super(shift(F6))}", "^RAORP": "{#super(shift(1))}", "^SRAORP": "{#super(shift(9))}", "^TRAORP": "{#super(shift(1))}", "^STRAORP": "{#super(shift(9))}", "^KRAORP": "{#super(shift(5))}", "^TKRAORP": "{#super(shift(5))}", "^PRAORP": "{#super(shift(1))}", "^SPRAORP": "{#super(shift(9))}", "^TPRAORP": "{#super(shift(F1))}", "^STPRAORP": "{#super(shift(F9))}", "^KPRAORP": "{#super(shift(5))}", "^TKPRAORP": "{#super(shift(F5))}", "^WRAORP": "{#super(shift(3))}", "^TWRAORP": "{#super(shift(3))}", "^KWRAORP": "{#super(shift(7))}", "^TKWRAORP": "{#super(shift(7))}", "^PWRAORP": "{#super(shift(3))}", "^TPWRAORP": "{#super(shift(F3))}", "^STPWRAORP": "{#super(shift(F11))}", "^KPWRAORP": "{#super(shift(7))}", "^TKPWRAORP": "{#super(shift(F7))}", "^HRAORP": "{#super(shift(1))}", "^SHRAORP": "{#super(shift(9))}", "^THRAORP": "{#super(shift(1))}", "^STHRAORP": "{#super(shift(9))}", "^KHRAORP": "{#super(shift(5))}", "^TKHRAORP": "{#super(shift(5))}", "^PHRAORP": "{#super(shift(1))}", "^SPHRAORP": "{#super(shift(9))}", "^TPHRAORP": "{#super(shift(F1))}", "^STPHRAORP": "{#super(shift(F9))}", "^KPHRAORP": "{#super(shift(5))}", "^TKPHRAORP": "{#super(shift(F5))}", "^WHRAORP": "{#super(shift(3))}", "^TWHRAORP": "{#super(shift(3))}", "^KWHRAORP": "{#super(shift(7))}", "^TKWHRAORP": "{#super(shift(7))}", "^PWHRAORP": "{#super(shift(3))}", "^TPWHRAORP": "{#super(shift(F3))}", "^STPWHRAORP": "{#super(shift(F11))}", "^KPWHRAORP": "{#super(shift(7))}", "^TKPWHRAORP": "{#super(shift(F7))}", "^*RP": "{#super(shift())}", "^-ERP": "{#super(shift(e))}", "^-URP": "{#super(shift(u))}", "^-EURP": "{#super(shift(i))}", "^-FRP": "{#super(control(shift()))}", "^SFRP": "{#super(control(shift(s)))}", "^TFRP": "{#super(control(shift(t)))}", "^KFRP": "{#super(control(shift(k)))}", "^TKFRP": "{#super(control(shift(d)))}", "^PFRP": "{#super(control(shift(p)))}", "^TPFRP": "{#super(control(shift(f)))}", "^KPFRP": "{#super(control(shift(x)))}", "^WFRP": "{#super(control(shift(w)))}", "^KWFRP": "{#super(control(shift(q)))}", "^PWFRP": "{#super(control(shift(b)))}", "^TKPWFRP": "{#super(control(shift(g)))}", "^STKPWFRP": "{#super(control(shift(z)))}", "^HFRP": "{#super(control(shift(h)))}", "^PHFRP": "{#super(control(shift(m)))}", "^TPHFRP": "{#super(control(shift(n)))}", "^RFRP": "{#super(control(shift(r)))}", "^SRFRP": "{#super(control(shift(v)))}", "^KRFRP": "{#super(control(shift(c)))}", "^KWRFRP": "{#super(control(shift(y)))}", "^SKWRFRP": "{#super(control(shift(j)))}", "^HRFRP": "{#super(control(shift(l)))}", "^AFRP": "{#super(control(shift(a)))}", "^OFRP": "{#super(control(shift(o)))}", "^AOFRP": "{#super(control(shift(0)))}", "^SAOFRP": "{#super(control(shift(8)))}", "^TAOFRP": "{#super(control(shift(0)))}", "^STAOFRP": "{#super(control(shift(8)))}", "^KAOFRP": "{#super(control(shift(4)))}", "^TKAOFRP": "{#super(control(shift(4)))}", "^PAOFRP": "{#super(control(shift(0)))}", "^SPAOFRP": "{#super(control(shift(8)))}", "^TPAOFRP": "{#super(control(shift(F0)))}", "^STPAOFRP": "{#super(control(shift(F8)))}", "^KPAOFRP": "{#super(control(shift(4)))}", "^TKPAOFRP": "{#super(control(shift(F4)))}", "^STKPAOFRP": "{#super(control(shift(F12)))}", "^WAOFRP": "{#super(control(shift(2)))}", "^TWAOFRP": "{#super(control(shift(2)))}", "^KWAOFRP": "{#super(control(shift(6)))}", "^TKWAOFRP": "{#super(control(shift(6)))}", "^PWAOFRP": "{#super(control(shift(2)))}", "^TPWAOFRP": "{#super(control(shift(F2)))}", "^STPWAOFRP": "{#super(control(shift(F10)))}", "^KPWAOFRP": "{#super(control(shift(6)))}", "^TKPWAOFRP": "{#super(control(shift(F6)))}", "^HAOFRP": "{#super(control(shift(0)))}", "^SHAOFRP": "{#super(control(shift(8)))}", "^THAOFRP": "{#super(control(shift(0)))}", "^STHAOFRP": "{#super(control(shift(8)))}", "^KHAOFRP": "{#super(control(shift(4)))}", "^TKHAOFRP": "{#super(control(shift(4)))}", "^PHAOFRP": "{#super(control(shift(0)))}", "^SPHAOFRP": "{#super(control(shift(8)))}", "^TPHAOFRP": "{#super(control(shift(F0)))}", "^STPHAOFRP": "{#super(control(shift(F8)))}", "^KPHAOFRP": "{#super(control(shift(4)))}", "^TKPHAOFRP": "{#super(control(shift(F4)))}", "^STKPHAOFRP": "{#super(control(shift(F12)))}", "^WHAOFRP": "{#super(control(shift(2)))}", "^TWHAOFRP": "{#super(control(shift(2)))}", "^KWHAOFRP": "{#super(control(shift(6)))}", "^TKWHAOFRP": "{#super(control(shift(6)))}", "^PWHAOFRP": "{#super(control(shift(2)))}", "^TPWHAOFRP": "{#super(control(shift(F2)))}", "^STPWHAOFRP": "{#super(control(shift(F10)))}", "^KPWHAOFRP": "{#super(control(shift(6)))}", "^TKPWHAOFRP": "{#super(control(shift(F6)))}", "^RAOFRP": "{#super(control(shift(1)))}", "^SRAOFRP": "{#super(control(shift(9)))}", "^TRAOFRP": "{#super(control(shift(1)))}", "^STRAOFRP": "{#super(control(shift(9)))}", "^KRAOFRP": "{#super(control(shift(5)))}", "^TKRAOFRP": "{#super(control(shift(5)))}", "^PRAOFRP": "{#super(control(shift(1)))}", "^SPRAOFRP": "{#super(control(shift(9)))}", "^TPRAOFRP": "{#super(control(shift(F1)))}", "^STPRAOFRP": "{#super(control(shift(F9)))}", "^KPRAOFRP": "{#super(control(shift(5)))}", "^TKPRAOFRP": "{#super(control(shift(F5)))}", "^WRAOFRP": "{#super(control(shift(3)))}", "^TWRAOFRP": "{#super(control(shift(3)))}", "^KWRAOFRP": "{#super(control(shift(7)))}", "^TKWRAOFRP": "{#super(control(shift(7)))}", "^PWRAOFRP": "{#super(control(shift(3)))}", "^TPWRAOFRP": "{#super(control(shift(F3)))}", "^STPWRAOFRP": "{#super(control(shift(F11)))}", "^KPWRAOFRP": "{#super(control(shift(7)))}", "^TKPWRAOFRP": "{#super(control(shift(F7)))}", "^HRAOFRP": "{#super(control(shift(1)))}", "^SHRAOFRP": "{#super(control(shift(9)))}", "^THRAOFRP": "{#super(control(shift(1)))}", "^STHRAOFRP": "{#super(control(shift(9)))}", "^KHRAOFRP": "{#super(control(shift(5)))}", "^TKHRAOFRP": "{#super(control(shift(5)))}", "^PHRAOFRP": "{#super(control(shift(1)))}", "^SPHRAOFRP": "{#super(control(shift(9)))}", "^TPHRAOFRP": "{#super(control(shift(F1)))}", "^STPHRAOFRP": "{#super(control(shift(F9)))}", "^KPHRAOFRP": "{#super(control(shift(5)))}", "^TKPHRAOFRP": "{#super(control(shift(F5)))}", "^WHRAOFRP": "{#super(control(shift(3)))}", "^TWHRAOFRP": "{#super(control(shift(3)))}", "^KWHRAOFRP": "{#super(control(shift(7)))}", "^TKWHRAOFRP": "{#super(control(shift(7)))}", "^PWHRAOFRP": "{#super(control(shift(3)))}", "^TPWHRAOFRP": "{#super(control(shift(F3)))}", "^STPWHRAOFRP": "{#super(control(shift(F11)))}", "^KPWHRAOFRP": "{#super(control(shift(7)))}", "^TKPWHRAOFRP": "{#super(control(shift(F7)))}", "^*FRP": "{#super(control(shift()))}", "^-EFRP": "{#super(control(shift(e)))}", "^-UFRP": "{#super(control(shift(u)))}", "^-EUFRP": "{#super(control(shift(i)))}", "^-B": "{#alt()}", "^SB": "{#alt(s)}", "^TB": "{#alt(t)}", "^KB": "{#alt(k)}", "^TKB": "{#alt(d)}", "^PB": "{#alt(p)}", "^TPB": "{#alt(f)}", "^KPB": "{#alt(x)}", "^WB": "{#alt(w)}", "^KWB": "{#alt(q)}", "^PWB": "{#alt(b)}", "^TKPWB": "{#alt(g)}", "^STKPWB": "{#alt(z)}", "^HB": "{#alt(h)}", "^PHB": "{#alt(m)}", "^TPHB": "{#alt(n)}", "^RB": "{#alt(r)}", "^SRB": "{#alt(v)}", "^KRB": "{#alt(c)}", "^KWRB": "{#alt(y)}", "^SKWRB": "{#alt(j)}", "^HRB": "{#alt(l)}", "^AB": "{#alt(a)}", "^OB": "{#alt(o)}", "^AOB": "{#alt(0)}", "^SAOB": "{#alt(8)}", "^TAOB": "{#alt(0)}", "^STAOB": "{#alt(8)}", "^KAOB": "{#alt(4)}", "^TKAOB": "{#alt(4)}", "^PAOB": "{#alt(0)}", "^SPAOB": "{#alt(8)}", "^TPAOB": "{#alt(F0)}", "^STPAOB": "{#alt(F8)}", "^KPAOB": "{#alt(4)}", "^TKPAOB": "{#alt(F4)}", "^STKPAOB": "{#alt(F12)}", "^WAOB": "{#alt(2)}", "^TWAOB": "{#alt(2)}", "^KWAOB": "{#alt(6)}", "^TKWAOB": "{#alt(6)}", "^PWAOB": "{#alt(2)}", "^TPWAOB": "{#alt(F2)}", "^STPWAOB": "{#alt(F10)}", "^KPWAOB": "{#alt(6)}", "^TKPWAOB": "{#alt(F6)}", "^HAOB": "{#alt(0)}", "^SHAOB": "{#alt(8)}", "^THAOB": "{#alt(0)}", "^STHAOB": "{#alt(8)}", "^KHAOB": "{#alt(4)}", "^TKHAOB": "{#alt(4)}", "^PHAOB": "{#alt(0)}", "^SPHAOB": "{#alt(8)}", "^TPHAOB": "{#alt(F0)}", "^STPHAOB": "{#alt(F8)}", "^KPHAOB": "{#alt(4)}", "^TKPHAOB": "{#alt(F4)}", "^STKPHAOB": "{#alt(F12)}", "^WHAOB": "{#alt(2)}", "^TWHAOB": "{#alt(2)}", "^KWHAOB": "{#alt(6)}", "^TKWHAOB": "{#alt(6)}", "^PWHAOB": "{#alt(2)}", "^TPWHAOB": "{#alt(F2)}", "^STPWHAOB": "{#alt(F10)}", "^KPWHAOB": "{#alt(6)}", "^TKPWHAOB": "{#alt(F6)}", "^RAOB": "{#alt(1)}", "^SRAOB": "{#alt(9)}", "^TRAOB": "{#alt(1)}", "^STRAOB": "{#alt(9)}", "^KRAOB": "{#alt(5)}", "^TKRAOB": "{#alt(5)}", "^PRAOB": "{#alt(1)}", "^SPRAOB": "{#alt(9)}", "^TPRAOB": "{#alt(F1)}", "^STPRAOB": "{#alt(F9)}", "^KPRAOB": "{#alt(5)}", "^TKPRAOB": "{#alt(F5)}", "^WRAOB": "{#alt(3)}", "^TWRAOB": "{#alt(3)}", "^KWRAOB": "{#alt(7)}", "^TKWRAOB": "{#alt(7)}", "^PWRAOB": "{#alt(3)}", "^TPWRAOB": "{#alt(F3)}", "^STPWRAOB": "{#alt(F11)}", "^KPWRAOB": "{#alt(7)}", "^TKPWRAOB": "{#alt(F7)}", "^HRAOB": "{#alt(1)}", "^SHRAOB": "{#alt(9)}", "^THRAOB": "{#alt(1)}", "^STHRAOB": "{#alt(9)}", "^KHRAOB": "{#alt(5)}", "^TKHRAOB": "{#alt(5)}", "^PHRAOB": "{#alt(1)}", "^SPHRAOB": "{#alt(9)}", "^TPHRAOB": "{#alt(F1)}", "^STPHRAOB": "{#alt(F9)}", "^KPHRAOB": "{#alt(5)}", "^TKPHRAOB": "{#alt(F5)}", "^WHRAOB": "{#alt(3)}", "^TWHRAOB": "{#alt(3)}", "^KWHRAOB": "{#alt(7)}", "^TKWHRAOB": "{#alt(7)}", "^PWHRAOB": "{#alt(3)}", "^TPWHRAOB": "{#alt(F3)}", "^STPWHRAOB": "{#alt(F11)}", "^KPWHRAOB": "{#alt(7)}", "^TKPWHRAOB": "{#alt(F7)}", "^*B": "{#alt()}", "^-EB": "{#alt(e)}", "^-UB": "{#alt(u)}", "^-EUB": "{#alt(i)}", "^-FB": "{#alt(control())}", "^SFB": "{#alt(control(s))}", "^TFB": "{#alt(control(t))}", "^KFB": "{#alt(control(k))}", "^TKFB": "{#alt(control(d))}", "^PFB": "{#alt(control(p))}", "^TPFB": "{#alt(control(f))}", "^KPFB": "{#alt(control(x))}", "^WFB": "{#alt(control(w))}", "^KWFB": "{#alt(control(q))}", "^PWFB": "{#alt(control(b))}", "^TKPWFB": "{#alt(control(g))}", "^STKPWFB": "{#alt(control(z))}", "^HFB": "{#alt(control(h))}", "^PHFB": "{#alt(control(m))}", "^TPHFB": "{#alt(control(n))}", "^RFB": "{#alt(control(r))}", "^SRFB": "{#alt(control(v))}", "^KRFB": "{#alt(control(c))}", "^KWRFB": "{#alt(control(y))}", "^SKWRFB": "{#alt(control(j))}", "^HRFB": "{#alt(control(l))}", "^AFB": "{#alt(control(a))}", "^OFB": "{#alt(control(o))}", "^AOFB": "{#alt(control(0))}", "^SAOFB": "{#alt(control(8))}", "^TAOFB": "{#alt(control(0))}", "^STAOFB": "{#alt(control(8))}", "^KAOFB": "{#alt(control(4))}", "^TKAOFB": "{#alt(control(4))}", "^PAOFB": "{#alt(control(0))}", "^SPAOFB": "{#alt(control(8))}", "^TPAOFB": "{#alt(control(F0))}", "^STPAOFB": "{#alt(control(F8))}", "^KPAOFB": "{#alt(control(4))}", "^TKPAOFB": "{#alt(control(F4))}", "^STKPAOFB": "{#alt(control(F12))}", "^WAOFB": "{#alt(control(2))}", "^TWAOFB": "{#alt(control(2))}", "^KWAOFB": "{#alt(control(6))}", "^TKWAOFB": "{#alt(control(6))}", "^PWAOFB": "{#alt(control(2))}", "^TPWAOFB": "{#alt(control(F2))}", "^STPWAOFB": "{#alt(control(F10))}", "^KPWAOFB": "{#alt(control(6))}", "^TKPWAOFB": "{#alt(control(F6))}", "^HAOFB": "{#alt(control(0))}", "^SHAOFB": "{#alt(control(8))}", "^THAOFB": "{#alt(control(0))}", "^STHAOFB": "{#alt(control(8))}", "^KHAOFB": "{#alt(control(4))}", "^TKHAOFB": "{#alt(control(4))}", "^PHAOFB": "{#alt(control(0))}", "^SPHAOFB": "{#alt(control(8))}", "^TPHAOFB": "{#alt(control(F0))}", "^STPHAOFB": "{#alt(control(F8))}", "^KPHAOFB": "{#alt(control(4))}", "^TKPHAOFB": "{#alt(control(F4))}", "^STKPHAOFB": "{#alt(control(F12))}", "^WHAOFB": "{#alt(control(2))}", "^TWHAOFB": "{#alt(control(2))}", "^KWHAOFB": "{#alt(control(6))}", "^TKWHAOFB": "{#alt(control(6))}", "^PWHAOFB": "{#alt(control(2))}", "^TPWHAOFB": "{#alt(control(F2))}", "^STPWHAOFB": "{#alt(control(F10))}", "^KPWHAOFB": "{#alt(control(6))}", "^TKPWHAOFB": "{#alt(control(F6))}", "^RAOFB": "{#alt(control(1))}", "^SRAOFB": "{#alt(control(9))}", "^TRAOFB": "{#alt(control(1))}", "^STRAOFB": "{#alt(control(9))}", "^KRAOFB": "{#alt(control(5))}", "^TKRAOFB": "{#alt(control(5))}", "^PRAOFB": "{#alt(control(1))}", "^SPRAOFB": "{#alt(control(9))}", "^TPRAOFB": "{#alt(control(F1))}", "^STPRAOFB": "{#alt(control(F9))}", "^KPRAOFB": "{#alt(control(5))}", "^TKPRAOFB": "{#alt(control(F5))}", "^WRAOFB": "{#alt(control(3))}", "^TWRAOFB": "{#alt(control(3))}", "^KWRAOFB": "{#alt(control(7))}", "^TKWRAOFB": "{#alt(control(7))}", "^PWRAOFB": "{#alt(control(3))}", "^TPWRAOFB": "{#alt(control(F3))}", "^STPWRAOFB": "{#alt(control(F11))}", "^KPWRAOFB": "{#alt(control(7))}", "^TKPWRAOFB": "{#alt(control(F7))}", "^HRAOFB": "{#alt(control(1))}", "^SHRAOFB": "{#alt(control(9))}", "^THRAOFB": "{#alt(control(1))}", "^STHRAOFB": "{#alt(control(9))}", "^KHRAOFB": "{#alt(control(5))}", "^TKHRAOFB": "{#alt(control(5))}", "^PHRAOFB": "{#alt(control(1))}", "^SPHRAOFB": "{#alt(control(9))}", "^TPHRAOFB": "{#alt(control(F1))}", "^STPHRAOFB": "{#alt(control(F9))}", "^KPHRAOFB": "{#alt(control(5))}", "^TKPHRAOFB": "{#alt(control(F5))}", "^WHRAOFB": "{#alt(control(3))}", "^TWHRAOFB": "{#alt(control(3))}", "^KWHRAOFB": "{#alt(control(7))}", "^TKWHRAOFB": "{#alt(control(7))}", "^PWHRAOFB": "{#alt(control(3))}", "^TPWHRAOFB": "{#alt(control(F3))}", "^STPWHRAOFB": "{#alt(control(F11))}", "^KPWHRAOFB": "{#alt(control(7))}", "^TKPWHRAOFB": "{#alt(control(F7))}", "^*FB": "{#alt(control())}", "^-EFB": "{#alt(control(e))}", "^-UFB": "{#alt(control(u))}", "^-EUFB": "{#alt(control(i))}", "^-RB": "{#alt(shift())}", "^ARB": "{#alt(shift(a))}", "^ORB": "{#alt(shift(o))}", "^AORB": "{#alt(shift(0))}", "^SAORB": "{#alt(shift(8))}", "^TAORB": "{#alt(shift(0))}", "^STAORB": "{#alt(shift(8))}", "^KAORB": "{#alt(shift(4))}", "^TKAORB": "{#alt(shift(4))}", "^PAORB": "{#alt(shift(0))}", "^SPAORB": "{#alt(shift(8))}", "^TPAORB": "{#alt(shift(F0))}", "^STPAORB": "{#alt(shift(F8))}", "^KPAORB": "{#alt(shift(4))}", "^TKPAORB": "{#alt(shift(F4))}", "^STKPAORB": "{#alt(shift(F12))}", "^WAORB": "{#alt(shift(2))}", "^TWAORB": "{#alt(shift(2))}", "^KWAORB": "{#alt(shift(6))}", "^TKWAORB": "{#alt(shift(6))}", "^PWAORB": "{#alt(shift(2))}", "^TPWAORB": "{#alt(shift(F2))}", "^STPWAORB": "{#alt(shift(F10))}", "^KPWAORB": "{#alt(shift(6))}", "^TKPWAORB": "{#alt(shift(F6))}", "^HAORB": "{#alt(shift(0))}", "^SHAORB": "{#alt(shift(8))}", "^THAORB": "{#alt(shift(0))}", "^STHAORB": "{#alt(shift(8))}", "^KHAORB": "{#alt(shift(4))}", "^TKHAORB": "{#alt(shift(4))}", "^PHAORB": "{#alt(shift(0))}", "^SPHAORB": "{#alt(shift(8))}", "^TPHAORB": "{#alt(shift(F0))}", "^STPHAORB": "{#alt(shift(F8))}", "^KPHAORB": "{#alt(shift(4))}", "^TKPHAORB": "{#alt(shift(F4))}", "^STKPHAORB": "{#alt(shift(F12))}", "^WHAORB": "{#alt(shift(2))}", "^TWHAORB": "{#alt(shift(2))}", "^KWHAORB": "{#alt(shift(6))}", "^TKWHAORB": "{#alt(shift(6))}", "^PWHAORB": "{#alt(shift(2))}", "^TPWHAORB": "{#alt(shift(F2))}", "^STPWHAORB": "{#alt(shift(F10))}", "^KPWHAORB": "{#alt(shift(6))}", "^TKPWHAORB": "{#alt(shift(F6))}", "^RAORB": "{#alt(shift(1))}", "^SRAORB": "{#alt(shift(9))}", "^TRAORB": "{#alt(shift(1))}", "^STRAORB": "{#alt(shift(9))}", "^KRAORB": "{#alt(shift(5))}", "^TKRAORB": "{#alt(shift(5))}", "^PRAORB": "{#alt(shift(1))}", "^SPRAORB": "{#alt(shift(9))}", "^TPRAORB": "{#alt(shift(F1))}", "^STPRAORB": "{#alt(shift(F9))}", "^KPRAORB": "{#alt(shift(5))}", "^TKPRAORB": "{#alt(shift(F5))}", "^WRAORB": "{#alt(shift(3))}", "^TWRAORB": "{#alt(shift(3))}", "^KWRAORB": "{#alt(shift(7))}", "^TKWRAORB": "{#alt(shift(7))}", "^PWRAORB": "{#alt(shift(3))}", "^TPWRAORB": "{#alt(shift(F3))}", "^STPWRAORB": "{#alt(shift(F11))}", "^KPWRAORB": "{#alt(shift(7))}", "^TKPWRAORB": "{#alt(shift(F7))}", "^HRAORB": "{#alt(shift(1))}", "^SHRAORB": "{#alt(shift(9))}", "^THRAORB": "{#alt(shift(1))}", "^STHRAORB": "{#alt(shift(9))}", "^KHRAORB": "{#alt(shift(5))}", "^TKHRAORB": "{#alt(shift(5))}", "^PHRAORB": "{#alt(shift(1))}", "^SPHRAORB": "{#alt(shift(9))}", "^TPHRAORB": "{#alt(shift(F1))}", "^STPHRAORB": "{#alt(shift(F9))}", "^KPHRAORB": "{#alt(shift(5))}", "^TKPHRAORB": "{#alt(shift(F5))}", "^WHRAORB": "{#alt(shift(3))}", "^TWHRAORB": "{#alt(shift(3))}", "^KWHRAORB": "{#alt(shift(7))}", "^TKWHRAORB": "{#alt(shift(7))}", "^PWHRAORB": "{#alt(shift(3))}", "^TPWHRAORB": "{#alt(shift(F3))}", "^STPWHRAORB": "{#alt(shift(F11))}", "^KPWHRAORB": "{#alt(shift(7))}", "^TKPWHRAORB": "{#alt(shift(F7))}", "^*RB": "{#alt(shift())}", "^-ERB": "{#alt(shift(e))}", "^-URB": "{#alt(shift(u))}", "^-EURB": "{#alt(shift(i))}", "^-FRB": "{#alt(control(shift()))}", "^SFRB": "{#alt(control(shift(s)))}", "^TFRB": "{#alt(control(shift(t)))}", "^KFRB": "{#alt(control(shift(k)))}", "^TKFRB": "{#alt(control(shift(d)))}", "^PFRB": "{#alt(control(shift(p)))}", "^TPFRB": "{#alt(control(shift(f)))}", "^KPFRB": "{#alt(control(shift(x)))}", "^WFRB": "{#alt(control(shift(w)))}", "^KWFRB": "{#alt(control(shift(q)))}", "^PWFRB": "{#alt(control(shift(b)))}", "^TKPWFRB": "{#alt(control(shift(g)))}", "^STKPWFRB": "{#alt(control(shift(z)))}", "^HFRB": "{#alt(control(shift(h)))}", "^PHFRB": "{#alt(control(shift(m)))}", "^TPHFRB": "{#alt(control(shift(n)))}", "^RFRB": "{#alt(control(shift(r)))}", "^SRFRB": "{#alt(control(shift(v)))}", "^KRFRB": "{#alt(control(shift(c)))}", "^KWRFRB": "{#alt(control(shift(y)))}", "^SKWRFRB": "{#alt(control(shift(j)))}", "^HRFRB": "{#alt(control(shift(l)))}", "^AFRB": "{#alt(control(shift(a)))}", "^OFRB": "{#alt(control(shift(o)))}", "^AOFRB": "{#alt(control(shift(0)))}", "^SAOFRB": "{#alt(control(shift(8)))}", "^TAOFRB": "{#alt(control(shift(0)))}", "^STAOFRB": "{#alt(control(shift(8)))}", "^KAOFRB": "{#alt(control(shift(4)))}", "^TKAOFRB": "{#alt(control(shift(4)))}", "^PAOFRB": "{#alt(control(shift(0)))}", "^SPAOFRB": "{#alt(control(shift(8)))}", "^TPAOFRB": "{#alt(control(shift(F0)))}", "^STPAOFRB": "{#alt(control(shift(F8)))}", "^KPAOFRB": "{#alt(control(shift(4)))}", "^TKPAOFRB": "{#alt(control(shift(F4)))}", "^STKPAOFRB": "{#alt(control(shift(F12)))}", "^WAOFRB": "{#alt(control(shift(2)))}", "^TWAOFRB": "{#alt(control(shift(2)))}", "^KWAOFRB": "{#alt(control(shift(6)))}", "^TKWAOFRB": "{#alt(control(shift(6)))}", "^PWAOFRB": "{#alt(control(shift(2)))}", "^TPWAOFRB": "{#alt(control(shift(F2)))}", "^STPWAOFRB": "{#alt(control(shift(F10)))}", "^KPWAOFRB": "{#alt(control(shift(6)))}", "^TKPWAOFRB": "{#alt(control(shift(F6)))}", "^HAOFRB": "{#alt(control(shift(0)))}", "^SHAOFRB": "{#alt(control(shift(8)))}", "^THAOFRB": "{#alt(control(shift(0)))}", "^STHAOFRB": "{#alt(control(shift(8)))}", "^KHAOFRB": "{#alt(control(shift(4)))}", "^TKHAOFRB": "{#alt(control(shift(4)))}", "^PHAOFRB": "{#alt(control(shift(0)))}", "^SPHAOFRB": "{#alt(control(shift(8)))}", "^TPHAOFRB": "{#alt(control(shift(F0)))}", "^STPHAOFRB": "{#alt(control(shift(F8)))}", "^KPHAOFRB": "{#alt(control(shift(4)))}", "^TKPHAOFRB": "{#alt(control(shift(F4)))}", "^STKPHAOFRB": "{#alt(control(shift(F12)))}", "^WHAOFRB": "{#alt(control(shift(2)))}", "^TWHAOFRB": "{#alt(control(shift(2)))}", "^KWHAOFRB": "{#alt(control(shift(6)))}", "^TKWHAOFRB": "{#alt(control(shift(6)))}", "^PWHAOFRB": "{#alt(control(shift(2)))}", "^TPWHAOFRB": "{#alt(control(shift(F2)))}", "^STPWHAOFRB": "{#alt(control(shift(F10)))}", "^KPWHAOFRB": "{#alt(control(shift(6)))}", "^TKPWHAOFRB": "{#alt(control(shift(F6)))}", "^RAOFRB": "{#alt(control(shift(1)))}", "^SRAOFRB": "{#alt(control(shift(9)))}", "^TRAOFRB": "{#alt(control(shift(1)))}", "^STRAOFRB": "{#alt(control(shift(9)))}", "^KRAOFRB": "{#alt(control(shift(5)))}", "^TKRAOFRB": "{#alt(control(shift(5)))}", "^PRAOFRB": "{#alt(control(shift(1)))}", "^SPRAOFRB": "{#alt(control(shift(9)))}", "^TPRAOFRB": "{#alt(control(shift(F1)))}", "^STPRAOFRB": "{#alt(control(shift(F9)))}", "^KPRAOFRB": "{#alt(control(shift(5)))}", "^TKPRAOFRB": "{#alt(control(shift(F5)))}", "^WRAOFRB": "{#alt(control(shift(3)))}", "^TWRAOFRB": "{#alt(control(shift(3)))}", "^KWRAOFRB": "{#alt(control(shift(7)))}", "^TKWRAOFRB": "{#alt(control(shift(7)))}", "^PWRAOFRB": "{#alt(control(shift(3)))}", "^TPWRAOFRB": "{#alt(control(shift(F3)))}", "^STPWRAOFRB": "{#alt(control(shift(F11)))}", "^KPWRAOFRB": "{#alt(control(shift(7)))}", "^TKPWRAOFRB": "{#alt(control(shift(F7)))}", "^HRAOFRB": "{#alt(control(shift(1)))}", "^SHRAOFRB": "{#alt(control(shift(9)))}", "^THRAOFRB": "{#alt(control(shift(1)))}", "^STHRAOFRB": "{#alt(control(shift(9)))}", "^KHRAOFRB": "{#alt(control(shift(5)))}", "^TKHRAOFRB": "{#alt(control(shift(5)))}", "^PHRAOFRB": "{#alt(control(shift(1)))}", "^SPHRAOFRB": "{#alt(control(shift(9)))}", "^TPHRAOFRB": "{#alt(control(shift(F1)))}", "^STPHRAOFRB": "{#alt(control(shift(F9)))}", "^KPHRAOFRB": "{#alt(control(shift(5)))}", "^TKPHRAOFRB": "{#alt(control(shift(F5)))}", "^WHRAOFRB": "{#alt(control(shift(3)))}", "^TWHRAOFRB": "{#alt(control(shift(3)))}", "^KWHRAOFRB": "{#alt(control(shift(7)))}", "^TKWHRAOFRB": "{#alt(control(shift(7)))}", "^PWHRAOFRB": "{#alt(control(shift(3)))}", "^TPWHRAOFRB": "{#alt(control(shift(F3)))}", "^STPWHRAOFRB": "{#alt(control(shift(F11)))}", "^KPWHRAOFRB": "{#alt(control(shift(7)))}", "^TKPWHRAOFRB": "{#alt(control(shift(F7)))}", "^*FRB": "{#alt(control(shift()))}", "^-EFRB": "{#alt(control(shift(e)))}", "^-UFRB": "{#alt(control(shift(u)))}", "^-EUFRB": "{#alt(control(shift(i)))}", "^-PB": "{#super(alt())}", "^APB": "{#super(alt(a))}", "^OPB": "{#super(alt(o))}", "^AOPB": "{#super(alt(0))}", "^SAOPB": "{#super(alt(8))}", "^TAOPB": "{#super(alt(0))}", "^STAOPB": "{#super(alt(8))}", "^KAOPB": "{#super(alt(4))}", "^TKAOPB": "{#super(alt(4))}", "^PAOPB": "{#super(alt(0))}", "^SPAOPB": "{#super(alt(8))}", "^TPAOPB": "{#super(alt(F0))}", "^STPAOPB": "{#super(alt(F8))}", "^KPAOPB": "{#super(alt(4))}", "^TKPAOPB": "{#super(alt(F4))}", "^STKPAOPB": "{#super(alt(F12))}", "^WAOPB": "{#super(alt(2))}", "^TWAOPB": "{#super(alt(2))}", "^KWAOPB": "{#super(alt(6))}", "^TKWAOPB": "{#super(alt(6))}", "^PWAOPB": "{#super(alt(2))}", "^TPWAOPB": "{#super(alt(F2))}", "^STPWAOPB": "{#super(alt(F10))}", "^KPWAOPB": "{#super(alt(6))}", "^TKPWAOPB": "{#super(alt(F6))}", "^HAOPB": "{#super(alt(0))}", "^SHAOPB": "{#super(alt(8))}", "^THAOPB": "{#super(alt(0))}", "^STHAOPB": "{#super(alt(8))}", "^KHAOPB": "{#super(alt(4))}", "^TKHAOPB": "{#super(alt(4))}", "^PHAOPB": "{#super(alt(0))}", "^SPHAOPB": "{#super(alt(8))}", "^TPHAOPB": "{#super(alt(F0))}", "^STPHAOPB": "{#super(alt(F8))}", "^KPHAOPB": "{#super(alt(4))}", "^TKPHAOPB": "{#super(alt(F4))}", "^STKPHAOPB": "{#super(alt(F12))}", "^WHAOPB": "{#super(alt(2))}", "^TWHAOPB": "{#super(alt(2))}", "^KWHAOPB": "{#super(alt(6))}", "^TKWHAOPB": "{#super(alt(6))}", "^PWHAOPB": "{#super(alt(2))}", "^TPWHAOPB": "{#super(alt(F2))}", "^STPWHAOPB": "{#super(alt(F10))}", "^KPWHAOPB": "{#super(alt(6))}", "^TKPWHAOPB": "{#super(alt(F6))}", "^RAOPB": "{#super(alt(1))}", "^SRAOPB": "{#super(alt(9))}", "^TRAOPB": "{#super(alt(1))}", "^STRAOPB": "{#super(alt(9))}", "^KRAOPB": "{#super(alt(5))}", "^TKRAOPB": "{#super(alt(5))}", "^PRAOPB": "{#super(alt(1))}", "^SPRAOPB": "{#super(alt(9))}", "^TPRAOPB": "{#super(alt(F1))}", "^STPRAOPB": "{#super(alt(F9))}", "^KPRAOPB": "{#super(alt(5))}", "^TKPRAOPB": "{#super(alt(F5))}", "^WRAOPB": "{#super(alt(3))}", "^TWRAOPB": "{#super(alt(3))}", "^KWRAOPB": "{#super(alt(7))}", "^TKWRAOPB": "{#super(alt(7))}", "^PWRAOPB": "{#super(alt(3))}", "^TPWRAOPB": "{#super(alt(F3))}", "^STPWRAOPB": "{#super(alt(F11))}", "^KPWRAOPB": "{#super(alt(7))}", "^TKPWRAOPB": "{#super(alt(F7))}", "^HRAOPB": "{#super(alt(1))}", "^SHRAOPB": "{#super(alt(9))}", "^THRAOPB": "{#super(alt(1))}", "^STHRAOPB": "{#super(alt(9))}", "^KHRAOPB": "{#super(alt(5))}", "^TKHRAOPB": "{#super(alt(5))}", "^PHRAOPB": "{#super(alt(1))}", "^SPHRAOPB": "{#super(alt(9))}", "^TPHRAOPB": "{#super(alt(F1))}", "^STPHRAOPB": "{#super(alt(F9))}", "^KPHRAOPB": "{#super(alt(5))}", "^TKPHRAOPB": "{#super(alt(F5))}", "^WHRAOPB": "{#super(alt(3))}", "^TWHRAOPB": "{#super(alt(3))}", "^KWHRAOPB": "{#super(alt(7))}", "^TKWHRAOPB": "{#super(alt(7))}", "^PWHRAOPB": "{#super(alt(3))}", "^TPWHRAOPB": "{#super(alt(F3))}", "^STPWHRAOPB": "{#super(alt(F11))}", "^KPWHRAOPB": "{#super(alt(7))}", "^TKPWHRAOPB": "{#super(alt(F7))}", "^*PB": "{#super(alt())}", "^-EPB": "{#super(alt(e))}", "^-UPB": "{#super(alt(u))}", "^-EUPB": "{#super(alt(i))}", "^-FPB": "{#super(alt(control()))}", "^SFPB": "{#super(alt(control(s)))}", "^TFPB": "{#super(alt(control(t)))}", "^KFPB": "{#super(alt(control(k)))}", "^TKFPB": "{#super(alt(control(d)))}", "^PFPB": "{#super(alt(control(p)))}", "^TPFPB": "{#super(alt(control(f)))}", "^KPFPB": "{#super(alt(control(x)))}", "^WFPB": "{#super(alt(control(w)))}", "^KWFPB": "{#super(alt(control(q)))}", "^PWFPB": "{#super(alt(control(b)))}", "^TKPWFPB": "{#super(alt(control(g)))}", "^STKPWFPB": "{#super(alt(control(z)))}", "^HFPB": "{#super(alt(control(h)))}", "^PHFPB": "{#super(alt(control(m)))}", "^TPHFPB": "{#super(alt(control(n)))}", "^RFPB": "{#super(alt(control(r)))}", "^SRFPB": "{#super(alt(control(v)))}", "^KRFPB": "{#super(alt(control(c)))}", "^KWRFPB": "{#super(alt(control(y)))}", "^SKWRFPB": "{#super(alt(control(j)))}", "^HRFPB": "{#super(alt(control(l)))}", "^AFPB": "{#super(alt(control(a)))}", "^OFPB": "{#super(alt(control(o)))}", "^AOFPB": "{#super(alt(control(0)))}", "^SAOFPB": "{#super(alt(control(8)))}", "^TAOFPB": "{#super(alt(control(0)))}", "^STAOFPB": "{#super(alt(control(8)))}", "^KAOFPB": "{#super(alt(control(4)))}", "^TKAOFPB": "{#super(alt(control(4)))}", "^PAOFPB": "{#super(alt(control(0)))}", "^SPAOFPB": "{#super(alt(control(8)))}", "^TPAOFPB": "{#super(alt(control(F0)))}", "^STPAOFPB": "{#super(alt(control(F8)))}", "^KPAOFPB": "{#super(alt(control(4)))}", "^TKPAOFPB": "{#super(alt(control(F4)))}", "^STKPAOFPB": "{#super(alt(control(F12)))}", "^WAOFPB": "{#super(alt(control(2)))}", "^TWAOFPB": "{#super(alt(control(2)))}", "^KWAOFPB": "{#super(alt(control(6)))}", "^TKWAOFPB": "{#super(alt(control(6)))}", "^PWAOFPB": "{#super(alt(control(2)))}", "^TPWAOFPB": "{#super(alt(control(F2)))}", "^STPWAOFPB": "{#super(alt(control(F10)))}", "^KPWAOFPB": "{#super(alt(control(6)))}", "^TKPWAOFPB": "{#super(alt(control(F6)))}", "^HAOFPB": "{#super(alt(control(0)))}", "^SHAOFPB": "{#super(alt(control(8)))}", "^THAOFPB": "{#super(alt(control(0)))}", "^STHAOFPB": "{#super(alt(control(8)))}", "^KHAOFPB": "{#super(alt(control(4)))}", "^TKHAOFPB": "{#super(alt(control(4)))}", "^PHAOFPB": "{#super(alt(control(0)))}", "^SPHAOFPB": "{#super(alt(control(8)))}", "^TPHAOFPB": "{#super(alt(control(F0)))}", "^STPHAOFPB": "{#super(alt(control(F8)))}", "^KPHAOFPB": "{#super(alt(control(4)))}", "^TKPHAOFPB": "{#super(alt(control(F4)))}", "^STKPHAOFPB": "{#super(alt(control(F12)))}", "^WHAOFPB": "{#super(alt(control(2)))}", "^TWHAOFPB": "{#super(alt(control(2)))}", "^KWHAOFPB": "{#super(alt(control(6)))}", "^TKWHAOFPB": "{#super(alt(control(6)))}", "^PWHAOFPB": "{#super(alt(control(2)))}", "^TPWHAOFPB": "{#super(alt(control(F2)))}", "^STPWHAOFPB": "{#super(alt(control(F10)))}", "^KPWHAOFPB": "{#super(alt(control(6)))}", "^TKPWHAOFPB": "{#super(alt(control(F6)))}", "^RAOFPB": "{#super(alt(control(1)))}", "^SRAOFPB": "{#super(alt(control(9)))}", "^TRAOFPB": "{#super(alt(control(1)))}", "^STRAOFPB": "{#super(alt(control(9)))}", "^KRAOFPB": "{#super(alt(control(5)))}", "^TKRAOFPB": "{#super(alt(control(5)))}", "^PRAOFPB": "{#super(alt(control(1)))}", "^SPRAOFPB": "{#super(alt(control(9)))}", "^TPRAOFPB": "{#super(alt(control(F1)))}", "^STPRAOFPB": "{#super(alt(control(F9)))}", "^KPRAOFPB": "{#super(alt(control(5)))}", "^TKPRAOFPB": "{#super(alt(control(F5)))}", "^WRAOFPB": "{#super(alt(control(3)))}", "^TWRAOFPB": "{#super(alt(control(3)))}", "^KWRAOFPB": "{#super(alt(control(7)))}", "^TKWRAOFPB": "{#super(alt(control(7)))}", "^PWRAOFPB": "{#super(alt(control(3)))}", "^TPWRAOFPB": "{#super(alt(control(F3)))}", "^STPWRAOFPB": "{#super(alt(control(F11)))}", "^KPWRAOFPB": "{#super(alt(control(7)))}", "^TKPWRAOFPB": "{#super(alt(control(F7)))}", "^HRAOFPB": "{#super(alt(control(1)))}", "^SHRAOFPB": "{#super(alt(control(9)))}", "^THRAOFPB": "{#super(alt(control(1)))}", "^STHRAOFPB": "{#super(alt(control(9)))}", "^KHRAOFPB": "{#super(alt(control(5)))}", "^TKHRAOFPB": "{#super(alt(control(5)))}", "^PHRAOFPB": "{#super(alt(control(1)))}", "^SPHRAOFPB": "{#super(alt(control(9)))}", "^TPHRAOFPB": "{#super(alt(control(F1)))}", "^STPHRAOFPB": "{#super(alt(control(F9)))}", "^KPHRAOFPB": "{#super(alt(control(5)))}", "^TKPHRAOFPB": "{#super(alt(control(F5)))}", "^WHRAOFPB": "{#super(alt(control(3)))}", "^TWHRAOFPB": "{#super(alt(control(3)))}", "^KWHRAOFPB": "{#super(alt(control(7)))}", "^TKWHRAOFPB": "{#super(alt(control(7)))}", "^PWHRAOFPB": "{#super(alt(control(3)))}", "^TPWHRAOFPB": "{#super(alt(control(F3)))}", "^STPWHRAOFPB": "{#super(alt(control(F11)))}", "^KPWHRAOFPB": "{#super(alt(control(7)))}", "^TKPWHRAOFPB": "{#super(alt(control(F7)))}", "^*FPB": "{#super(alt(control()))}", "^-EFPB": "{#super(alt(control(e)))}", "^-UFPB": "{#super(alt(control(u)))}", "^-EUFPB": "{#super(alt(control(i)))}", "^-RPB": "{#super(alt(shift()))}", "^ARPB": "{#super(alt(shift(a)))}", "^ORPB": "{#super(alt(shift(o)))}", "^AORPB": "{#super(alt(shift(0)))}", "^SAORPB": "{#super(alt(shift(8)))}", "^TAORPB": "{#super(alt(shift(0)))}", "^STAORPB": "{#super(alt(shift(8)))}", "^KAORPB": "{#super(alt(shift(4)))}", "^TKAORPB": "{#super(alt(shift(4)))}", "^PAORPB": "{#super(alt(shift(0)))}", "^SPAORPB": "{#super(alt(shift(8)))}", "^TPAORPB": "{#super(alt(shift(F0)))}", "^STPAORPB": "{#super(alt(shift(F8)))}", "^KPAORPB": "{#super(alt(shift(4)))}", "^TKPAORPB": "{#super(alt(shift(F4)))}", "^STKPAORPB": "{#super(alt(shift(F12)))}", "^WAORPB": "{#super(alt(shift(2)))}", "^TWAORPB": "{#super(alt(shift(2)))}", "^KWAORPB": "{#super(alt(shift(6)))}", "^TKWAORPB": "{#super(alt(shift(6)))}", "^PWAORPB": "{#super(alt(shift(2)))}", "^TPWAORPB": "{#super(alt(shift(F2)))}", "^STPWAORPB": "{#super(alt(shift(F10)))}", "^KPWAORPB": "{#super(alt(shift(6)))}", "^TKPWAORPB": "{#super(alt(shift(F6)))}", "^HAORPB": "{#super(alt(shift(0)))}", "^SHAORPB": "{#super(alt(shift(8)))}", "^THAORPB": "{#super(alt(shift(0)))}", "^STHAORPB": "{#super(alt(shift(8)))}", "^KHAORPB": "{#super(alt(shift(4)))}", "^TKHAORPB": "{#super(alt(shift(4)))}", "^PHAORPB": "{#super(alt(shift(0)))}", "^SPHAORPB": "{#super(alt(shift(8)))}", "^TPHAORPB": "{#super(alt(shift(F0)))}", "^STPHAORPB": "{#super(alt(shift(F8)))}", "^KPHAORPB": "{#super(alt(shift(4)))}", "^TKPHAORPB": "{#super(alt(shift(F4)))}", "^STKPHAORPB": "{#super(alt(shift(F12)))}", "^WHAORPB": "{#super(alt(shift(2)))}", "^TWHAORPB": "{#super(alt(shift(2)))}", "^KWHAORPB": "{#super(alt(shift(6)))}", "^TKWHAORPB": "{#super(alt(shift(6)))}", "^PWHAORPB": "{#super(alt(shift(2)))}", "^TPWHAORPB": "{#super(alt(shift(F2)))}", "^STPWHAORPB": "{#super(alt(shift(F10)))}", "^KPWHAORPB": "{#super(alt(shift(6)))}", "^TKPWHAORPB": "{#super(alt(shift(F6)))}", "^RAORPB": "{#super(alt(shift(1)))}", "^SRAORPB": "{#super(alt(shift(9)))}", "^TRAORPB": "{#super(alt(shift(1)))}", "^STRAORPB": "{#super(alt(shift(9)))}", "^KRAORPB": "{#super(alt(shift(5)))}", "^TKRAORPB": "{#super(alt(shift(5)))}", "^PRAORPB": "{#super(alt(shift(1)))}", "^SPRAORPB": "{#super(alt(shift(9)))}", "^TPRAORPB": "{#super(alt(shift(F1)))}", "^STPRAORPB": "{#super(alt(shift(F9)))}", "^KPRAORPB": "{#super(alt(shift(5)))}", "^TKPRAORPB": "{#super(alt(shift(F5)))}", "^WRAORPB": "{#super(alt(shift(3)))}", "^TWRAORPB": "{#super(alt(shift(3)))}", "^KWRAORPB": "{#super(alt(shift(7)))}", "^TKWRAORPB": "{#super(alt(shift(7)))}", "^PWRAORPB": "{#super(alt(shift(3)))}", "^TPWRAORPB": "{#super(alt(shift(F3)))}", "^STPWRAORPB": "{#super(alt(shift(F11)))}", "^KPWRAORPB": "{#super(alt(shift(7)))}", "^TKPWRAORPB": "{#super(alt(shift(F7)))}", "^HRAORPB": "{#super(alt(shift(1)))}", "^SHRAORPB": "{#super(alt(shift(9)))}", "^THRAORPB": "{#super(alt(shift(1)))}", "^STHRAORPB": "{#super(alt(shift(9)))}", "^KHRAORPB": "{#super(alt(shift(5)))}", "^TKHRAORPB": "{#super(alt(shift(5)))}", "^PHRAORPB": "{#super(alt(shift(1)))}", "^SPHRAORPB": "{#super(alt(shift(9)))}", "^TPHRAORPB": "{#super(alt(shift(F1)))}", "^STPHRAORPB": "{#super(alt(shift(F9)))}", "^KPHRAORPB": "{#super(alt(shift(5)))}", "^TKPHRAORPB": "{#super(alt(shift(F5)))}", "^WHRAORPB": "{#super(alt(shift(3)))}", "^TWHRAORPB": "{#super(alt(shift(3)))}", "^KWHRAORPB": "{#super(alt(shift(7)))}", "^TKWHRAORPB": "{#super(alt(shift(7)))}", "^PWHRAORPB": "{#super(alt(shift(3)))}", "^TPWHRAORPB": "{#super(alt(shift(F3)))}", "^STPWHRAORPB": "{#super(alt(shift(F11)))}", "^KPWHRAORPB": "{#super(alt(shift(7)))}", "^TKPWHRAORPB": "{#super(alt(shift(F7)))}", "^*RPB": "{#super(alt(shift()))}", "^-ERPB": "{#super(alt(shift(e)))}", "^-URPB": "{#super(alt(shift(u)))}", "^-EURPB": "{#super(alt(shift(i)))}", "^-FRPB": "{#super(alt(control(shift())))}", "^SFRPB": "{#super(alt(control(shift(s))))}", "^TFRPB": "{#super(alt(control(shift(t))))}", "^KFRPB": "{#super(alt(control(shift(k))))}", "^TKFRPB": "{#super(alt(control(shift(d))))}", "^PFRPB": "{#super(alt(control(shift(p))))}", "^TPFRPB": "{#super(alt(control(shift(f))))}", "^KPFRPB": "{#super(alt(control(shift(x))))}", "^WFRPB": "{#super(alt(control(shift(w))))}", "^KWFRPB": "{#super(alt(control(shift(q))))}", "^PWFRPB": "{#super(alt(control(shift(b))))}", "^TKPWFRPB": "{#super(alt(control(shift(g))))}", "^STKPWFRPB": "{#super(alt(control(shift(z))))}", "^HFRPB": "{#super(alt(control(shift(h))))}", "^PHFRPB": "{#super(alt(control(shift(m))))}", "^TPHFRPB": "{#super(alt(control(shift(n))))}", "^RFRPB": "{#super(alt(control(shift(r))))}", "^SRFRPB": "{#super(alt(control(shift(v))))}", "^KRFRPB": "{#super(alt(control(shift(c))))}", "^KWRFRPB": "{#super(alt(control(shift(y))))}", "^SKWRFRPB": "{#super(alt(control(shift(j))))}", "^HRFRPB": "{#super(alt(control(shift(l))))}", "^AFRPB": "{#super(alt(control(shift(a))))}", "^OFRPB": "{#super(alt(control(shift(o))))}", "^AOFRPB": "{#super(alt(control(shift(0))))}", "^SAOFRPB": "{#super(alt(control(shift(8))))}", "^TAOFRPB": "{#super(alt(control(shift(0))))}", "^STAOFRPB": "{#super(alt(control(shift(8))))}", "^KAOFRPB": "{#super(alt(control(shift(4))))}", "^TKAOFRPB": "{#super(alt(control(shift(4))))}", "^PAOFRPB": "{#super(alt(control(shift(0))))}", "^SPAOFRPB": "{#super(alt(control(shift(8))))}", "^TPAOFRPB": "{#super(alt(control(shift(F0))))}", "^STPAOFRPB": "{#super(alt(control(shift(F8))))}", "^KPAOFRPB": "{#super(alt(control(shift(4))))}", "^TKPAOFRPB": "{#super(alt(control(shift(F4))))}", "^STKPAOFRPB": "{#super(alt(control(shift(F12))))}", "^WAOFRPB": "{#super(alt(control(shift(2))))}", "^TWAOFRPB": "{#super(alt(control(shift(2))))}", "^KWAOFRPB": "{#super(alt(control(shift(6))))}", "^TKWAOFRPB": "{#super(alt(control(shift(6))))}", "^PWAOFRPB": "{#super(alt(control(shift(2))))}", "^TPWAOFRPB": "{#super(alt(control(shift(F2))))}", "^STPWAOFRPB": "{#super(alt(control(shift(F10))))}", "^KPWAOFRPB": "{#super(alt(control(shift(6))))}", "^TKPWAOFRPB": "{#super(alt(control(shift(F6))))}", "^HAOFRPB": "{#super(alt(control(shift(0))))}", "^SHAOFRPB": "{#super(alt(control(shift(8))))}", "^THAOFRPB": "{#super(alt(control(shift(0))))}", "^STHAOFRPB": "{#super(alt(control(shift(8))))}", "^KHAOFRPB": "{#super(alt(control(shift(4))))}", "^TKHAOFRPB": "{#super(alt(control(shift(4))))}", "^PHAOFRPB": "{#super(alt(control(shift(0))))}", "^SPHAOFRPB": "{#super(alt(control(shift(8))))}", "^TPHAOFRPB": "{#super(alt(control(shift(F0))))}", "^STPHAOFRPB": "{#super(alt(control(shift(F8))))}", "^KPHAOFRPB": "{#super(alt(control(shift(4))))}", "^TKPHAOFRPB": "{#super(alt(control(shift(F4))))}", "^STKPHAOFRPB": "{#super(alt(control(shift(F12))))}", "^WHAOFRPB": "{#super(alt(control(shift(2))))}", "^TWHAOFRPB": "{#super(alt(control(shift(2))))}", "^KWHAOFRPB": "{#super(alt(control(shift(6))))}", "^TKWHAOFRPB": "{#super(alt(control(shift(6))))}", "^PWHAOFRPB": "{#super(alt(control(shift(2))))}", "^TPWHAOFRPB": "{#super(alt(control(shift(F2))))}", "^STPWHAOFRPB": "{#super(alt(control(shift(F10))))}", "^KPWHAOFRPB": "{#super(alt(control(shift(6))))}", "^TKPWHAOFRPB": "{#super(alt(control(shift(F6))))}", "^RAOFRPB": "{#super(alt(control(shift(1))))}", "^SRAOFRPB": "{#super(alt(control(shift(9))))}", "^TRAOFRPB": "{#super(alt(control(shift(1))))}", "^STRAOFRPB": "{#super(alt(control(shift(9))))}", "^KRAOFRPB": "{#super(alt(control(shift(5))))}", "^TKRAOFRPB": "{#super(alt(control(shift(5))))}", "^PRAOFRPB": "{#super(alt(control(shift(1))))}", "^SPRAOFRPB": "{#super(alt(control(shift(9))))}", "^TPRAOFRPB": "{#super(alt(control(shift(F1))))}", "^STPRAOFRPB": "{#super(alt(control(shift(F9))))}", "^KPRAOFRPB": "{#super(alt(control(shift(5))))}", "^TKPRAOFRPB": "{#super(alt(control(shift(F5))))}", "^WRAOFRPB": "{#super(alt(control(shift(3))))}", "^TWRAOFRPB": "{#super(alt(control(shift(3))))}", "^KWRAOFRPB": "{#super(alt(control(shift(7))))}", "^TKWRAOFRPB": "{#super(alt(control(shift(7))))}", "^PWRAOFRPB": "{#super(alt(control(shift(3))))}", "^TPWRAOFRPB": "{#super(alt(control(shift(F3))))}", "^STPWRAOFRPB": "{#super(alt(control(shift(F11))))}", "^KPWRAOFRPB": "{#super(alt(control(shift(7))))}", "^TKPWRAOFRPB": "{#super(alt(control(shift(F7))))}", "^HRAOFRPB": "{#super(alt(control(shift(1))))}", "^SHRAOFRPB": "{#super(alt(control(shift(9))))}", "^THRAOFRPB": "{#super(alt(control(shift(1))))}", "^STHRAOFRPB": "{#super(alt(control(shift(9))))}", "^KHRAOFRPB": "{#super(alt(control(shift(5))))}", "^TKHRAOFRPB": "{#super(alt(control(shift(5))))}", "^PHRAOFRPB": "{#super(alt(control(shift(1))))}", "^SPHRAOFRPB": "{#super(alt(control(shift(9))))}", "^TPHRAOFRPB": "{#super(alt(control(shift(F1))))}", "^STPHRAOFRPB": "{#super(alt(control(shift(F9))))}", "^KPHRAOFRPB": "{#super(alt(control(shift(5))))}", "^TKPHRAOFRPB": "{#super(alt(control(shift(F5))))}", "^WHRAOFRPB": "{#super(alt(control(shift(3))))}", "^TWHRAOFRPB": "{#super(alt(control(shift(3))))}", "^KWHRAOFRPB": "{#super(alt(control(shift(7))))}", "^TKWHRAOFRPB": "{#super(alt(control(shift(7))))}", "^PWHRAOFRPB": "{#super(alt(control(shift(3))))}", "^TPWHRAOFRPB": "{#super(alt(control(shift(F3))))}", "^STPWHRAOFRPB": "{#super(alt(control(shift(F11))))}", "^KPWHRAOFRPB": "{#super(alt(control(shift(7))))}", "^TKPWHRAOFRPB": "{#super(alt(control(shift(F7))))}", "^*FRPB": "{#super(alt(control(shift())))}", "^-EFRPB": "{#super(alt(control(shift(e))))}", "^-UFRPB": "{#super(alt(control(shift(u))))}", "^-EUFRPB": "{#super(alt(control(shift(i))))}"} \ No newline at end of file diff --git a/extra/emily-symbols.json b/extra/emily-symbols.json deleted file mode 100644 index e2f23d50..00000000 --- a/extra/emily-symbols.json +++ /dev/null @@ -1 +0,0 @@ -{"+": "{^} {^}", "+A": "{} {^}", "+O": "{^} {}", "+AO": "{} {}", "+*": "{^} {^}{-|}", "+A*": "{} {^}{-|}", "+O*": "{^} {}{-|}", "+AO*": "{} {}{-|}", "+E": "{*!}", "+AE": "{}{*!}", "+OE": "{*!}{}", "+AOE": "{}{*!}{}", "+*E": "{*!}{-|}", "+A*E": "{}{*!}{-|}", "+O*E": "{*!}{}{-|}", "+AO*E": "{}{*!}{}{-|}", "+U": "{*?}", "+AU": "{}{*?}", "+OU": "{*?}{}", "+AOU": "{}{*?}{}", "+*U": "{*?}{-|}", "+A*U": "{}{*?}{-|}", "+O*U": "{*?}{}{-|}", "+AO*U": "{}{*?}{}{-|}", "+EU": "{^} {#Space} {^}", "+AEU": "{} {#Space} {^}", "+OEU": "{^} {#Space} {}", "+AOEU": "{} {#Space} {}", "+*EU": "{^} {#Space} {^}{-|}", "+A*EU": "{} {#Space} {^}{-|}", "+O*EU": "{^} {#Space} {}{-|}", "+AO*EU": "{} {#Space} {}{-|}", "+F": "{^} ' {^}", "+AF": "{} ' {^}", "+OF": "{^} ' {}", "+AOF": "{} ' {}", "+*F": "{^} ' {^}{-|}", "+A*F": "{} ' {^}{-|}", "+O*F": "{^} ' {}{-|}", "+AO*F": "{} ' {}{-|}", "+EF": "{^} \u2018 {^}", "+AEF": "{} \u2018 {^}", "+OEF": "{^} \u2018 {}", "+AOEF": "{} \u2018 {}", "+*EF": "{^} \u2018 {^}{-|}", "+A*EF": "{} \u2018 {^}{-|}", "+O*EF": "{^} \u2018 {}{-|}", "+AO*EF": "{} \u2018 {}{-|}", "+UF": "{^} \u2019 {^}", "+AUF": "{} \u2019 {^}", "+OUF": "{^} \u2019 {}", "+AOUF": "{} \u2019 {}", "+*UF": "{^} \u2019 {^}{-|}", "+A*UF": "{} \u2019 {^}{-|}", "+O*UF": "{^} \u2019 {}{-|}", "+AO*UF": "{} \u2019 {}{-|}", "+EUF": "{^} \u201a {^}", "+AEUF": "{} \u201a {^}", "+OEUF": "{^} \u201a {}", "+AOEUF": "{} \u201a {}", "+*EUF": "{^} \u201a {^}{-|}", "+A*EUF": "{} \u201a {^}{-|}", "+O*EUF": "{^} \u201a {}{-|}", "+AO*EUF": "{} \u201a {}{-|}", "+AR": "{} . {^}", "+OR": "{^} . {}", "+AOR": "{} . {}", "+*R": "{^} . {^}{-|}", "+A*R": "{} . {^}{-|}", "+O*R": "{^} . {}{-|}", "+AO*R": "{} . {}{-|}", "+ER": "{^} \u2022 {^}", "+AER": "{} \u2022 {^}", "+OER": "{^} \u2022 {}", "+AOER": "{} \u2022 {}", "+*ER": "{^} \u2022 {^}{-|}", "+A*ER": "{} \u2022 {^}{-|}", "+O*ER": "{^} \u2022 {}{-|}", "+AO*ER": "{} \u2022 {}{-|}", "+UR": "{^} \u00b7 {^}", "+AUR": "{} \u00b7 {^}", "+OUR": "{^} \u00b7 {}", "+AOUR": "{} \u00b7 {}", "+*UR": "{^} \u00b7 {^}{-|}", "+A*UR": "{} \u00b7 {^}{-|}", "+O*UR": "{^} \u00b7 {}{-|}", "+AO*UR": "{} \u00b7 {}{-|}", "+EUR": "{^} \u2026 {^}", "+AEUR": "{} \u2026 {^}", "+OEUR": "{^} \u2026 {}", "+AOEUR": "{} \u2026 {}", "+*EUR": "{^} \u2026 {^}{-|}", "+A*EUR": "{} \u2026 {^}{-|}", "+O*EUR": "{^} \u2026 {}{-|}", "+AO*EUR": "{} \u2026 {}{-|}", "+FR": "{^} ! {^}", "+AFR": "{} ! {^}", "+OFR": "{^} ! {}", "+AOFR": "{} ! {}", "+*FR": "{^} ! {^}{-|}", "+A*FR": "{} ! {^}{-|}", "+O*FR": "{^} ! {}{-|}", "+AO*FR": "{} ! {}{-|}", "+EFR": "{^} \u00ac {^}", "+AEFR": "{} \u00ac {^}", "+OEFR": "{^} \u00ac {}", "+AOEFR": "{} \u00ac {}", "+*EFR": "{^} \u00ac {^}{-|}", "+A*EFR": "{} \u00ac {^}{-|}", "+O*EFR": "{^} \u00ac {}{-|}", "+AO*EFR": "{} \u00ac {}{-|}", "+UFR": "{^} \u21a6 {^}", "+AUFR": "{} \u21a6 {^}", "+OUFR": "{^} \u21a6 {}", "+AOUFR": "{} \u21a6 {}", "+*UFR": "{^} \u21a6 {^}{-|}", "+A*UFR": "{} \u21a6 {^}{-|}", "+O*UFR": "{^} \u21a6 {}{-|}", "+AO*UFR": "{} \u21a6 {}{-|}", "+EUFR": "{^} \u00a1 {^}", "+AEUFR": "{} \u00a1 {^}", "+OEUFR": "{^} \u00a1 {}", "+AOEUFR": "{} \u00a1 {}", "+*EUFR": "{^} \u00a1 {^}{-|}", "+A*EUFR": "{} \u00a1 {^}{-|}", "+O*EUFR": "{^} \u00a1 {}{-|}", "+AO*EUFR": "{} \u00a1 {}{-|}", "+AP": "{} ` {^}", "+OP": "{^} ` {}", "+AOP": "{} ` {}", "+*P": "{^} ` {^}{-|}", "+A*P": "{} ` {^}{-|}", "+O*P": "{^} ` {}{-|}", "+AO*P": "{} ` {}{-|}", "+EP": "{^} \u2282 {^}", "+AEP": "{} \u2282 {^}", "+OEP": "{^} \u2282 {}", "+AOEP": "{} \u2282 {}", "+*EP": "{^} \u2282 {^}{-|}", "+A*EP": "{} \u2282 {^}{-|}", "+O*EP": "{^} \u2282 {}{-|}", "+AO*EP": "{} \u2282 {}{-|}", "+UP": "{^} \u2283 {^}", "+AUP": "{} \u2283 {^}", "+OUP": "{^} \u2283 {}", "+AOUP": "{} \u2283 {}", "+*UP": "{^} \u2283 {^}{-|}", "+A*UP": "{} \u2283 {^}{-|}", "+O*UP": "{^} \u2283 {}{-|}", "+AO*UP": "{} \u2283 {}{-|}", "+EUP": "{^} \u03c0 {^}", "+AEUP": "{} \u03c0 {^}", "+OEUP": "{^} \u03c0 {}", "+AOEUP": "{} \u03c0 {}", "+*EUP": "{^} \u03c0 {^}{-|}", "+A*EUP": "{} \u03c0 {^}{-|}", "+O*EUP": "{^} \u03c0 {}{-|}", "+AO*EUP": "{} \u03c0 {}{-|}", "+FP": "{^} \" {^}", "+AFP": "{} \" {^}", "+OFP": "{^} \" {}", "+AOFP": "{} \" {}", "+*FP": "{^} \" {^}{-|}", "+A*FP": "{} \" {^}{-|}", "+O*FP": "{^} \" {}{-|}", "+AO*FP": "{} \" {}{-|}", "+EFP": "{^} \u201c {^}", "+AEFP": "{} \u201c {^}", "+OEFP": "{^} \u201c {}", "+AOEFP": "{} \u201c {}", "+*EFP": "{^} \u201c {^}{-|}", "+A*EFP": "{} \u201c {^}{-|}", "+O*EFP": "{^} \u201c {}{-|}", "+AO*EFP": "{} \u201c {}{-|}", "+UFP": "{^} \u201d {^}", "+AUFP": "{} \u201d {^}", "+OUFP": "{^} \u201d {}", "+AOUFP": "{} \u201d {}", "+*UFP": "{^} \u201d {^}{-|}", "+A*UFP": "{} \u201d {^}{-|}", "+O*UFP": "{^} \u201d {}{-|}", "+AO*UFP": "{} \u201d {}{-|}", "+EUFP": "{^} \u201e {^}", "+AEUFP": "{} \u201e {^}", "+OEUFP": "{^} \u201e {}", "+AOEUFP": "{} \u201e {}", "+*EUFP": "{^} \u201e {^}{-|}", "+A*EUFP": "{} \u201e {^}{-|}", "+O*EUFP": "{^} \u201e {}{-|}", "+AO*EUFP": "{} \u201e {}{-|}", "+ARP": "{} / {^}", "+ORP": "{^} / {}", "+AORP": "{} / {}", "+*RP": "{^} / {^}{-|}", "+A*RP": "{} / {^}{-|}", "+O*RP": "{^} / {}{-|}", "+AO*RP": "{} / {}{-|}", "+ERP": "{^} \u21d2 {^}", "+AERP": "{} \u21d2 {^}", "+OERP": "{^} \u21d2 {}", "+AOERP": "{} \u21d2 {}", "+*ERP": "{^} \u21d2 {^}{-|}", "+A*ERP": "{} \u21d2 {^}{-|}", "+O*ERP": "{^} \u21d2 {}{-|}", "+AO*ERP": "{} \u21d2 {}{-|}", "+URP": "{^} \u21d4 {^}", "+AURP": "{} \u21d4 {^}", "+OURP": "{^} \u21d4 {}", "+AOURP": "{} \u21d4 {}", "+*URP": "{^} \u21d4 {^}{-|}", "+A*URP": "{} \u21d4 {^}{-|}", "+O*URP": "{^} \u21d4 {}{-|}", "+AO*URP": "{} \u21d4 {}{-|}", "+EURP": "{^} \u00f7 {^}", "+AEURP": "{} \u00f7 {^}", "+OEURP": "{^} \u00f7 {}", "+AOEURP": "{} \u00f7 {}", "+*EURP": "{^} \u00f7 {^}{-|}", "+A*EURP": "{} \u00f7 {^}{-|}", "+O*EURP": "{^} \u00f7 {}{-|}", "+AO*EURP": "{} \u00f7 {}{-|}", "+B": "{^} , {^}", "+AB": "{} , {^}", "+OB": "{^} , {}", "+AOB": "{} , {}", "+*B": "{^} , {^}{-|}", "+A*B": "{} , {^}{-|}", "+O*B": "{^} , {}{-|}", "+AO*B": "{} , {}{-|}", "+EB": "{^} \u222a {^}", "+AEB": "{} \u222a {^}", "+OEB": "{^} \u222a {}", "+AOEB": "{} \u222a {}", "+*EB": "{^} \u222a {^}{-|}", "+A*EB": "{} \u222a {^}{-|}", "+O*EB": "{^} \u222a {}{-|}", "+AO*EB": "{} \u222a {}{-|}", "+UB": "{^} \u2228 {^}", "+AUB": "{} \u2228 {^}", "+OUB": "{^} \u2228 {}", "+AOUB": "{} \u2228 {}", "+*UB": "{^} \u2228 {^}{-|}", "+A*UB": "{} \u2228 {^}{-|}", "+O*UB": "{^} \u2228 {}{-|}", "+AO*UB": "{} \u2228 {}{-|}", "+EUB": "{^} \u2209 {^}", "+AEUB": "{} \u2209 {^}", "+OEUB": "{^} \u2209 {}", "+AOEUB": "{} \u2209 {}", "+*EUB": "{^} \u2209 {^}{-|}", "+A*EUB": "{} \u2209 {^}{-|}", "+O*EUB": "{^} \u2209 {}{-|}", "+AO*EUB": "{} \u2209 {}{-|}", "+FB": "{^} \\ {^}", "+AFB": "{} \\ {^}", "+OFB": "{^} \\ {}", "+AOFB": "{} \\ {}", "+*FB": "{^} \\ {^}{-|}", "+A*FB": "{} \\ {^}{-|}", "+O*FB": "{^} \\ {}{-|}", "+AO*FB": "{} \\ {}{-|}", "+EFB": "{^} \u0394 {^}", "+AEFB": "{} \u0394 {^}", "+OEFB": "{^} \u0394 {}", "+AOEFB": "{} \u0394 {}", "+*EFB": "{^} \u0394 {^}{-|}", "+A*EFB": "{} \u0394 {^}{-|}", "+O*EFB": "{^} \u0394 {}{-|}", "+AO*EFB": "{} \u0394 {}{-|}", "+UFB": "{^} \u221a {^}", "+AUFB": "{} \u221a {^}", "+OUFB": "{^} \u221a {}", "+AOUFB": "{} \u221a {}", "+*UFB": "{^} \u221a {^}{-|}", "+A*UFB": "{} \u221a {^}{-|}", "+O*UFB": "{^} \u221a {}{-|}", "+AO*UFB": "{} \u221a {}{-|}", "+EUFB": "{^} \u221e {^}", "+AEUFB": "{} \u221e {^}", "+OEUFB": "{^} \u221e {}", "+AOEUFB": "{} \u221e {}", "+*EUFB": "{^} \u221e {^}{-|}", "+A*EUFB": "{} \u221e {^}{-|}", "+O*EUFB": "{^} \u221e {}{-|}", "+AO*EUFB": "{} \u221e {}{-|}", "+ARB": "{} ; {^}", "+ORB": "{^} ; {}", "+AORB": "{} ; {}", "+*RB": "{^} ; {^}{-|}", "+A*RB": "{} ; {^}{-|}", "+O*RB": "{^} ; {}{-|}", "+AO*RB": "{} ; {}{-|}", "+ERB": "{^} \u2200 {^}", "+AERB": "{} \u2200 {^}", "+OERB": "{^} \u2200 {}", "+AOERB": "{} \u2200 {}", "+*ERB": "{^} \u2200 {^}{-|}", "+A*ERB": "{} \u2200 {^}{-|}", "+O*ERB": "{^} \u2200 {}{-|}", "+AO*ERB": "{} \u2200 {}{-|}", "+URB": "{^} \u2203 {^}", "+AURB": "{} \u2203 {^}", "+OURB": "{^} \u2203 {}", "+AOURB": "{} \u2203 {}", "+*URB": "{^} \u2203 {^}{-|}", "+A*URB": "{} \u2203 {^}{-|}", "+O*URB": "{^} \u2203 {}{-|}", "+AO*URB": "{} \u2203 {}{-|}", "+EURB": "{^} \u2204 {^}", "+AEURB": "{} \u2204 {^}", "+OEURB": "{^} \u2204 {}", "+AOEURB": "{} \u2204 {}", "+*EURB": "{^} \u2204 {^}{-|}", "+A*EURB": "{} \u2204 {^}{-|}", "+O*EURB": "{^} \u2204 {}{-|}", "+AO*EURB": "{} \u2204 {}{-|}", "+FRB": "{^} {#AudioMute} {^}", "+AFRB": "{} {#AudioMute} {^}", "+OFRB": "{^} {#AudioMute} {}", "+AOFRB": "{} {#AudioMute} {}", "+*FRB": "{^} {#AudioMute} {^}{-|}", "+A*FRB": "{} {#AudioMute} {^}{-|}", "+O*FRB": "{^} {#AudioMute} {}{-|}", "+AO*FRB": "{} {#AudioMute} {}{-|}", "+EFRB": "{^} {#AudioLowerVolume} {^}", "+AEFRB": "{} {#AudioLowerVolume} {^}", "+OEFRB": "{^} {#AudioLowerVolume} {}", "+AOEFRB": "{} {#AudioLowerVolume} {}", "+*EFRB": "{^} {#AudioLowerVolume} {^}{-|}", "+A*EFRB": "{} {#AudioLowerVolume} {^}{-|}", "+O*EFRB": "{^} {#AudioLowerVolume} {}{-|}", "+AO*EFRB": "{} {#AudioLowerVolume} {}{-|}", "+UFRB": "{^} {#AudioRaiseVolume} {^}", "+AUFRB": "{} {#AudioRaiseVolume} {^}", "+OUFRB": "{^} {#AudioRaiseVolume} {}", "+AOUFRB": "{} {#AudioRaiseVolume} {}", "+*UFRB": "{^} {#AudioRaiseVolume} {^}{-|}", "+A*UFRB": "{} {#AudioRaiseVolume} {^}{-|}", "+O*UFRB": "{^} {#AudioRaiseVolume} {}{-|}", "+AO*UFRB": "{} {#AudioRaiseVolume} {}{-|}", "+EUFRB": "{^} {#Eject} {^}", "+AEUFRB": "{} {#Eject} {^}", "+OEUFRB": "{^} {#Eject} {}", "+AOEUFRB": "{} {#Eject} {}", "+*EUFRB": "{^} {#Eject} {^}{-|}", "+A*EUFRB": "{} {#Eject} {^}{-|}", "+O*EUFRB": "{^} {#Eject} {}{-|}", "+AO*EUFRB": "{} {#Eject} {}{-|}", "+APB": "{} | {^}", "+OPB": "{^} | {}", "+AOPB": "{} | {}", "+*PB": "{^} | {^}{-|}", "+A*PB": "{} | {^}{-|}", "+O*PB": "{^} | {}{-|}", "+AO*PB": "{} | {}{-|}", "+EPB": "{^} \u22a4 {^}", "+AEPB": "{} \u22a4 {^}", "+OEPB": "{^} \u22a4 {}", "+AOEPB": "{} \u22a4 {}", "+*EPB": "{^} \u22a4 {^}{-|}", "+A*EPB": "{} \u22a4 {^}{-|}", "+O*EPB": "{^} \u22a4 {}{-|}", "+AO*EPB": "{} \u22a4 {}{-|}", "+UPB": "{^} \u22a5 {^}", "+AUPB": "{} \u22a5 {^}", "+OUPB": "{^} \u22a5 {}", "+AOUPB": "{} \u22a5 {}", "+*UPB": "{^} \u22a5 {^}{-|}", "+A*UPB": "{} \u22a5 {^}{-|}", "+O*UPB": "{^} \u22a5 {}{-|}", "+AO*UPB": "{} \u22a5 {}{-|}", "+EUPB": "{^} \u00a6 {^}", "+AEUPB": "{} \u00a6 {^}", "+OEUPB": "{^} \u00a6 {}", "+AOEUPB": "{} \u00a6 {}", "+*EUPB": "{^} \u00a6 {^}{-|}", "+A*EUPB": "{} \u00a6 {^}{-|}", "+O*EUPB": "{^} \u00a6 {}{-|}", "+AO*EUPB": "{} \u00a6 {}{-|}", "+FPB": "{^} ? {^}", "+AFPB": "{} ? {^}", "+OFPB": "{^} ? {}", "+AOFPB": "{} ? {}", "+*FPB": "{^} ? {^}{-|}", "+A*FPB": "{} ? {^}{-|}", "+O*FPB": "{^} ? {}{-|}", "+AO*FPB": "{} ? {}{-|}", "+EFPB": "{^} \u00bf {^}", "+AEFPB": "{} \u00bf {^}", "+OEFPB": "{^} \u00bf {}", "+AOEFPB": "{} \u00bf {}", "+*EFPB": "{^} \u00bf {^}{-|}", "+A*EFPB": "{} \u00bf {^}{-|}", "+O*EFPB": "{^} \u00bf {}{-|}", "+AO*EFPB": "{} \u00bf {}{-|}", "+UFPB": "{^} \u221d {^}", "+AUFPB": "{} \u221d {^}", "+OUFPB": "{^} \u221d {}", "+AOUFPB": "{} \u221d {}", "+*UFPB": "{^} \u221d {^}{-|}", "+A*UFPB": "{} \u221d {^}{-|}", "+O*UFPB": "{^} \u221d {}{-|}", "+AO*UFPB": "{} \u221d {}{-|}", "+EUFPB": "{^} \u203d {^}", "+AEUFPB": "{} \u203d {^}", "+OEUFPB": "{^} \u203d {}", "+AOEUFPB": "{} \u203d {}", "+*EUFPB": "{^} \u203d {^}{-|}", "+A*EUFPB": "{} \u203d {^}{-|}", "+O*EUFPB": "{^} \u203d {}{-|}", "+AO*EUFPB": "{} \u203d {}{-|}", "+FRPB": "{^} % {^}", "+AFRPB": "{} % {^}", "+OFRPB": "{^} % {}", "+AOFRPB": "{} % {}", "+*FRPB": "{^} % {^}{-|}", "+A*FRPB": "{} % {^}{-|}", "+O*FRPB": "{^} % {}{-|}", "+AO*FRPB": "{} % {}{-|}", "+EFRPB": "{^} \u2030 {^}", "+AEFRPB": "{} \u2030 {^}", "+OEFRPB": "{^} \u2030 {}", "+AOEFRPB": "{} \u2030 {}", "+*EFRPB": "{^} \u2030 {^}{-|}", "+A*EFRPB": "{} \u2030 {^}{-|}", "+O*EFRPB": "{^} \u2030 {}{-|}", "+AO*EFRPB": "{} \u2030 {}{-|}", "+UFRPB": "{^} \u2031 {^}", "+AUFRPB": "{} \u2031 {^}", "+OUFRPB": "{^} \u2031 {}", "+AOUFRPB": "{} \u2031 {}", "+*UFRPB": "{^} \u2031 {^}{-|}", "+A*UFRPB": "{} \u2031 {^}{-|}", "+O*UFRPB": "{^} \u2031 {}{-|}", "+AO*UFRPB": "{} \u2031 {}{-|}", "+EUFRPB": "{^} \u03c6 {^}", "+AEUFRPB": "{} \u03c6 {^}", "+OEUFRPB": "{^} \u03c6 {}", "+AOEUFRPB": "{} \u03c6 {}", "+*EUFRPB": "{^} \u03c6 {^}{-|}", "+A*EUFRPB": "{} \u03c6 {^}{-|}", "+O*EUFRPB": "{^} \u03c6 {}{-|}", "+AO*EUFRPB": "{} \u03c6 {}{-|}", "+L": "{^} * {^}", "+AL": "{} * {^}", "+OL": "{^} * {}", "+AOL": "{} * {}", "+*L": "{^} * {^}{-|}", "+A*L": "{} * {^}{-|}", "+O*L": "{^} * {}{-|}", "+AO*L": "{} * {}{-|}", "+EL": "{^} \u220f {^}", "+AEL": "{} \u220f {^}", "+OEL": "{^} \u220f {}", "+AOEL": "{} \u220f {}", "+*EL": "{^} \u220f {^}{-|}", "+A*EL": "{} \u220f {^}{-|}", "+O*EL": "{^} \u220f {}{-|}", "+AO*EL": "{} \u220f {}{-|}", "+UL": "{^} \u00a7 {^}", "+AUL": "{} \u00a7 {^}", "+OUL": "{^} \u00a7 {}", "+AOUL": "{} \u00a7 {}", "+*UL": "{^} \u00a7 {^}{-|}", "+A*UL": "{} \u00a7 {^}{-|}", "+O*UL": "{^} \u00a7 {}{-|}", "+AO*UL": "{} \u00a7 {}{-|}", "+EUL": "{^} \u00d7 {^}", "+AEUL": "{} \u00d7 {^}", "+OEUL": "{^} \u00d7 {}", "+AOEUL": "{} \u00d7 {}", "+*EUL": "{^} \u00d7 {^}{-|}", "+A*EUL": "{} \u00d7 {^}{-|}", "+O*EUL": "{^} \u00d7 {}{-|}", "+AO*EUL": "{} \u00d7 {}{-|}", "+FL": "{^} {*-|} {^}", "+AFL": "{} {*-|} {^}", "+OFL": "{^} {*-|} {}", "+AOFL": "{} {*-|} {}", "+*FL": "{^} {*-|} {^}{-|}", "+A*FL": "{} {*-|} {^}{-|}", "+O*FL": "{^} {*-|} {}{-|}", "+AO*FL": "{} {*-|} {}{-|}", "+EFL": "{^} {*<} {^}", "+AEFL": "{} {*<} {^}", "+OEFL": "{^} {*<} {}", "+AOEFL": "{} {*<} {}", "+*EFL": "{^} {*<} {^}{-|}", "+A*EFL": "{} {*<} {^}{-|}", "+O*EFL": "{^} {*<} {}{-|}", "+AO*EFL": "{} {*<} {}{-|}", "+UFL": "{^} {<} {^}", "+AUFL": "{} {<} {^}", "+OUFL": "{^} {<} {}", "+AOUFL": "{} {<} {}", "+*UFL": "{^} {<} {^}{-|}", "+A*UFL": "{} {<} {^}{-|}", "+O*UFL": "{^} {<} {}{-|}", "+AO*UFL": "{} {<} {}{-|}", "+EUFL": "{^} {*>} {^}", "+AEUFL": "{} {*>} {^}", "+OEUFL": "{^} {*>} {}", "+AOEUFL": "{} {*>} {}", "+*EUFL": "{^} {*>} {^}{-|}", "+A*EUFL": "{} {*>} {^}{-|}", "+O*EUFL": "{^} {*>} {}{-|}", "+AO*EUFL": "{} {*>} {}{-|}", "+APL": "{} - {^}", "+OPL": "{^} - {}", "+AOPL": "{} - {}", "+*PL": "{^} - {^}{-|}", "+A*PL": "{} - {^}{-|}", "+O*PL": "{^} - {}{-|}", "+AO*PL": "{} - {}{-|}", "+EPL": "{^} \u2212 {^}", "+AEPL": "{} \u2212 {^}", "+OEPL": "{^} \u2212 {}", "+AOEPL": "{} \u2212 {}", "+*EPL": "{^} \u2212 {^}{-|}", "+A*EPL": "{} \u2212 {^}{-|}", "+O*EPL": "{^} \u2212 {}{-|}", "+AO*EPL": "{} \u2212 {}{-|}", "+UPL": "{^} \u2013 {^}", "+AUPL": "{} \u2013 {^}", "+OUPL": "{^} \u2013 {}", "+AOUPL": "{} \u2013 {}", "+*UPL": "{^} \u2013 {^}{-|}", "+A*UPL": "{} \u2013 {^}{-|}", "+O*UPL": "{^} \u2013 {}{-|}", "+AO*UPL": "{} \u2013 {}{-|}", "+EUPL": "{^} \u2014 {^}", "+AEUPL": "{} \u2014 {^}", "+OEUPL": "{^} \u2014 {}", "+AOEUPL": "{} \u2014 {}", "+*EUPL": "{^} \u2014 {^}{-|}", "+A*EUPL": "{} \u2014 {^}{-|}", "+O*EUPL": "{^} \u2014 {}{-|}", "+AO*EUPL": "{} \u2014 {}{-|}", "+FPL": "{^} ( {^}", "+AFPL": "{} ( {^}", "+OFPL": "{^} ( {}", "+AOFPL": "{} ( {}", "+*FPL": "{^} ( {^}{-|}", "+A*FPL": "{} ( {^}{-|}", "+O*FPL": "{^} ( {}{-|}", "+AO*FPL": "{} ( {}{-|}", "+EFPL": "{^} [ {^}", "+AEFPL": "{} [ {^}", "+OEFPL": "{^} [ {}", "+AOEFPL": "{} [ {}", "+*EFPL": "{^} [ {^}{-|}", "+A*EFPL": "{} [ {^}{-|}", "+O*EFPL": "{^} [ {}{-|}", "+AO*EFPL": "{} [ {}{-|}", "+UFPL": "{^} < {^}", "+AUFPL": "{} < {^}", "+OUFPL": "{^} < {}", "+AOUFPL": "{} < {}", "+*UFPL": "{^} < {^}{-|}", "+A*UFPL": "{} < {^}{-|}", "+O*UFPL": "{^} < {}{-|}", "+AO*UFPL": "{} < {}{-|}", "+EUFPL": "{^} { {^}", "+AEUFPL": "{} { {^}", "+OEUFPL": "{^} { {}", "+AOEUFPL": "{} { {}", "+*EUFPL": "{^} { {^}{-|}", "+A*EUFPL": "{} { {^}{-|}", "+O*EUFPL": "{^} { {}{-|}", "+AO*EUFPL": "{} { {}{-|}", "+FPBL": "{^} \u2191 {^}", "+AFPBL": "{} \u2191 {^}", "+OFPBL": "{^} \u2191 {}", "+AOFPBL": "{} \u2191 {}", "+*FPBL": "{^} \u2191 {^}{-|}", "+A*FPBL": "{} \u2191 {^}{-|}", "+O*FPBL": "{^} \u2191 {}{-|}", "+AO*FPBL": "{} \u2191 {}{-|}", "+EFPBL": "{^} \u2190 {^}", "+AEFPBL": "{} \u2190 {^}", "+OEFPBL": "{^} \u2190 {}", "+AOEFPBL": "{} \u2190 {}", "+*EFPBL": "{^} \u2190 {^}{-|}", "+A*EFPBL": "{} \u2190 {^}{-|}", "+O*EFPBL": "{^} \u2190 {}{-|}", "+AO*EFPBL": "{} \u2190 {}{-|}", "+UFPBL": "{^} \u2192 {^}", "+AUFPBL": "{} \u2192 {^}", "+OUFPBL": "{^} \u2192 {}", "+AOUFPBL": "{} \u2192 {}", "+*UFPBL": "{^} \u2192 {^}{-|}", "+A*UFPBL": "{} \u2192 {^}{-|}", "+O*UFPBL": "{^} \u2192 {}{-|}", "+AO*UFPBL": "{} \u2192 {}{-|}", "+EUFPBL": "{^} \u2193 {^}", "+AEUFPBL": "{} \u2193 {^}", "+OEUFPBL": "{^} \u2193 {}", "+AOEUFPBL": "{} \u2193 {}", "+*EUFPBL": "{^} \u2193 {^}{-|}", "+A*EUFPBL": "{} \u2193 {^}{-|}", "+O*EUFPBL": "{^} \u2193 {}{-|}", "+AO*EUFPBL": "{} \u2193 {}{-|}", "+ARPBL": "{} $ {^}", "+ORPBL": "{^} $ {}", "+AORPBL": "{} $ {}", "+*RPBL": "{^} $ {^}{-|}", "+A*RPBL": "{} $ {^}{-|}", "+O*RPBL": "{^} $ {}{-|}", "+AO*RPBL": "{} $ {}{-|}", "+ERPBL": "{^} \u00a5 {^}", "+AERPBL": "{} \u00a5 {^}", "+OERPBL": "{^} \u00a5 {}", "+AOERPBL": "{} \u00a5 {}", "+*ERPBL": "{^} \u00a5 {^}{-|}", "+A*ERPBL": "{} \u00a5 {^}{-|}", "+O*ERPBL": "{^} \u00a5 {}{-|}", "+AO*ERPBL": "{} \u00a5 {}{-|}", "+URPBL": "{^} \u20ac {^}", "+AURPBL": "{} \u20ac {^}", "+OURPBL": "{^} \u20ac {}", "+AOURPBL": "{} \u20ac {}", "+*URPBL": "{^} \u20ac {^}{-|}", "+A*URPBL": "{} \u20ac {^}{-|}", "+O*URPBL": "{^} \u20ac {}{-|}", "+AO*URPBL": "{} \u20ac {}{-|}", "+EURPBL": "{^} \u00a3 {^}", "+AEURPBL": "{} \u00a3 {^}", "+OEURPBL": "{^} \u00a3 {}", "+AOEURPBL": "{} \u00a3 {}", "+*EURPBL": "{^} \u00a3 {^}{-|}", "+A*EURPBL": "{} \u00a3 {^}{-|}", "+O*EURPBL": "{^} \u00a3 {}{-|}", "+AO*EURPBL": "{} \u00a3 {}{-|}", "+G": "{^} + {^}", "+AG": "{} + {^}", "+OG": "{^} + {}", "+AOG": "{} + {}", "+*G": "{^} + {^}{-|}", "+A*G": "{} + {^}{-|}", "+O*G": "{^} + {}{-|}", "+AO*G": "{} + {}{-|}", "+EG": "{^} \u2211 {^}", "+AEG": "{} \u2211 {^}", "+OEG": "{^} \u2211 {}", "+AOEG": "{} \u2211 {}", "+*EG": "{^} \u2211 {^}{-|}", "+A*EG": "{} \u2211 {^}{-|}", "+O*EG": "{^} \u2211 {}{-|}", "+AO*EG": "{} \u2211 {}{-|}", "+UG": "{^} \u00b6 {^}", "+AUG": "{} \u00b6 {^}", "+OUG": "{^} \u00b6 {}", "+AOUG": "{} \u00b6 {}", "+*UG": "{^} \u00b6 {^}{-|}", "+A*UG": "{} \u00b6 {^}{-|}", "+O*UG": "{^} \u00b6 {}{-|}", "+AO*UG": "{} \u00b6 {}{-|}", "+EUG": "{^} \u00b1 {^}", "+AEUG": "{} \u00b1 {^}", "+OEUG": "{^} \u00b1 {}", "+AOEUG": "{} \u00b1 {}", "+*EUG": "{^} \u00b1 {^}{-|}", "+A*EUG": "{} \u00b1 {^}{-|}", "+O*EUG": "{^} \u00b1 {}{-|}", "+AO*EUG": "{} \u00b1 {}{-|}", "+FG": "{^} {#Tab} {^}", "+AFG": "{} {#Tab} {^}", "+OFG": "{^} {#Tab} {}", "+AOFG": "{} {#Tab} {}", "+*FG": "{^} {#Tab} {^}{-|}", "+A*FG": "{} {#Tab} {^}{-|}", "+O*FG": "{^} {#Tab} {}{-|}", "+AO*FG": "{} {#Tab} {}{-|}", "+EFG": "{^} {#Backspace} {^}", "+AEFG": "{} {#Backspace} {^}", "+OEFG": "{^} {#Backspace} {}", "+AOEFG": "{} {#Backspace} {}", "+*EFG": "{^} {#Backspace} {^}{-|}", "+A*EFG": "{} {#Backspace} {^}{-|}", "+O*EFG": "{^} {#Backspace} {}{-|}", "+AO*EFG": "{} {#Backspace} {}{-|}", "+UFG": "{^} {#Delete} {^}", "+AUFG": "{} {#Delete} {^}", "+OUFG": "{^} {#Delete} {}", "+AOUFG": "{} {#Delete} {}", "+*UFG": "{^} {#Delete} {^}{-|}", "+A*UFG": "{} {#Delete} {^}{-|}", "+O*UFG": "{^} {#Delete} {}{-|}", "+AO*UFG": "{} {#Delete} {}{-|}", "+EUFG": "{^} {#Escape} {^}", "+AEUFG": "{} {#Escape} {^}", "+OEUFG": "{^} {#Escape} {}", "+AOEUFG": "{} {#Escape} {}", "+*EUFG": "{^} {#Escape} {^}{-|}", "+A*EUFG": "{} {#Escape} {^}{-|}", "+O*EUFG": "{^} {#Escape} {}{-|}", "+AO*EUFG": "{} {#Escape} {}{-|}", "+ARPG": "{} ^ {^}", "+ORPG": "{^} ^ {}", "+AORPG": "{} ^ {}", "+*RPG": "{^} ^ {^}{-|}", "+A*RPG": "{} ^ {^}{-|}", "+O*RPG": "{^} ^ {}{-|}", "+AO*RPG": "{} ^ {}{-|}", "+ERPG": "{^} \u00ab {^}", "+AERPG": "{} \u00ab {^}", "+OERPG": "{^} \u00ab {}", "+AOERPG": "{} \u00ab {}", "+*ERPG": "{^} \u00ab {^}{-|}", "+A*ERPG": "{} \u00ab {^}{-|}", "+O*ERPG": "{^} \u00ab {}{-|}", "+AO*ERPG": "{} \u00ab {}{-|}", "+URPG": "{^} \u00bb {^}", "+AURPG": "{} \u00bb {^}", "+OURPG": "{^} \u00bb {}", "+AOURPG": "{} \u00bb {}", "+*URPG": "{^} \u00bb {^}{-|}", "+A*URPG": "{} \u00bb {^}{-|}", "+O*URPG": "{^} \u00bb {}{-|}", "+AO*URPG": "{} \u00bb {}{-|}", "+EURPG": "{^} \u00b0 {^}", "+AEURPG": "{} \u00b0 {^}", "+OEURPG": "{^} \u00b0 {}", "+AOEURPG": "{} \u00b0 {}", "+*EURPG": "{^} \u00b0 {^}{-|}", "+A*EURPG": "{} \u00b0 {^}{-|}", "+O*EURPG": "{^} \u00b0 {}{-|}", "+AO*EURPG": "{} \u00b0 {}{-|}", "+BG": "{^} _ {^}", "+ABG": "{} _ {^}", "+OBG": "{^} _ {}", "+AOBG": "{} _ {}", "+*BG": "{^} _ {^}{-|}", "+A*BG": "{} _ {^}{-|}", "+O*BG": "{^} _ {}{-|}", "+AO*BG": "{} _ {}{-|}", "+EBG": "{^} \u2264 {^}", "+AEBG": "{} \u2264 {^}", "+OEBG": "{^} \u2264 {}", "+AOEBG": "{} \u2264 {}", "+*EBG": "{^} \u2264 {^}{-|}", "+A*EBG": "{} \u2264 {^}{-|}", "+O*EBG": "{^} \u2264 {}{-|}", "+AO*EBG": "{} \u2264 {}{-|}", "+UBG": "{^} \u2265 {^}", "+AUBG": "{} \u2265 {^}", "+OUBG": "{^} \u2265 {}", "+AOUBG": "{} \u2265 {}", "+*UBG": "{^} \u2265 {^}{-|}", "+A*UBG": "{} \u2265 {^}{-|}", "+O*UBG": "{^} \u2265 {}{-|}", "+AO*UBG": "{} \u2265 {}{-|}", "+EUBG": "{^} \u00b5 {^}", "+AEUBG": "{} \u00b5 {^}", "+OEUBG": "{^} \u00b5 {}", "+AOEUBG": "{} \u00b5 {}", "+*EUBG": "{^} \u00b5 {^}{-|}", "+A*EUBG": "{} \u00b5 {^}{-|}", "+O*EUBG": "{^} \u00b5 {}{-|}", "+AO*EUBG": "{} \u00b5 {}{-|}", "+FBG": "{^} & {^}", "+AFBG": "{} & {^}", "+OFBG": "{^} & {}", "+AOFBG": "{} & {}", "+*FBG": "{^} & {^}{-|}", "+A*FBG": "{} & {^}{-|}", "+O*FBG": "{^} & {}{-|}", "+AO*FBG": "{} & {}{-|}", "+EFBG": "{^} \u2229 {^}", "+AEFBG": "{} \u2229 {^}", "+OEFBG": "{^} \u2229 {}", "+AOEFBG": "{} \u2229 {}", "+*EFBG": "{^} \u2229 {^}{-|}", "+A*EFBG": "{} \u2229 {^}{-|}", "+O*EFBG": "{^} \u2229 {}{-|}", "+AO*EFBG": "{} \u2229 {}{-|}", "+UFBG": "{^} \u2227 {^}", "+AUFBG": "{} \u2227 {^}", "+OUFBG": "{^} \u2227 {}", "+AOUFBG": "{} \u2227 {}", "+*UFBG": "{^} \u2227 {^}{-|}", "+A*UFBG": "{} \u2227 {^}{-|}", "+O*UFBG": "{^} \u2227 {}{-|}", "+AO*UFBG": "{} \u2227 {}{-|}", "+EUFBG": "{^} \u2208 {^}", "+AEUFBG": "{} \u2208 {^}", "+OEUFBG": "{^} \u2208 {}", "+AOEUFBG": "{} \u2208 {}", "+*EUFBG": "{^} \u2208 {^}{-|}", "+A*EUFBG": "{} \u2208 {^}{-|}", "+O*EUFBG": "{^} \u2208 {}{-|}", "+AO*EUFBG": "{} \u2208 {}{-|}", "+ARBG": "{} ) {^}", "+ORBG": "{^} ) {}", "+AORBG": "{} ) {}", "+*RBG": "{^} ) {^}{-|}", "+A*RBG": "{} ) {^}{-|}", "+O*RBG": "{^} ) {}{-|}", "+AO*RBG": "{} ) {}{-|}", "+ERBG": "{^} ] {^}", "+AERBG": "{} ] {^}", "+OERBG": "{^} ] {}", "+AOERBG": "{} ] {}", "+*ERBG": "{^} ] {^}{-|}", "+A*ERBG": "{} ] {^}{-|}", "+O*ERBG": "{^} ] {}{-|}", "+AO*ERBG": "{} ] {}{-|}", "+URBG": "{^} > {^}", "+AURBG": "{} > {^}", "+OURBG": "{^} > {}", "+AOURBG": "{} > {}", "+*URBG": "{^} > {^}{-|}", "+A*URBG": "{} > {^}{-|}", "+O*URBG": "{^} > {}{-|}", "+AO*URBG": "{} > {}{-|}", "+EURBG": "{^} } {^}", "+AEURBG": "{} } {^}", "+OEURBG": "{^} } {}", "+AOEURBG": "{} } {}", "+*EURBG": "{^} } {^}{-|}", "+A*EURBG": "{} } {^}{-|}", "+O*EURBG": "{^} } {}{-|}", "+AO*EURBG": "{} } {}{-|}", "+FRBG": "{^} {#AudioPlay} {^}", "+AFRBG": "{} {#AudioPlay} {^}", "+OFRBG": "{^} {#AudioPlay} {}", "+AOFRBG": "{} {#AudioPlay} {}", "+*FRBG": "{^} {#AudioPlay} {^}{-|}", "+A*FRBG": "{} {#AudioPlay} {^}{-|}", "+O*FRBG": "{^} {#AudioPlay} {}{-|}", "+AO*FRBG": "{} {#AudioPlay} {}{-|}", "+EFRBG": "{^} {#AudioPrev} {^}", "+AEFRBG": "{} {#AudioPrev} {^}", "+OEFRBG": "{^} {#AudioPrev} {}", "+AOEFRBG": "{} {#AudioPrev} {}", "+*EFRBG": "{^} {#AudioPrev} {^}{-|}", "+A*EFRBG": "{} {#AudioPrev} {^}{-|}", "+O*EFRBG": "{^} {#AudioPrev} {}{-|}", "+AO*EFRBG": "{} {#AudioPrev} {}{-|}", "+UFRBG": "{^} {#AudioNext} {^}", "+AUFRBG": "{} {#AudioNext} {^}", "+OUFRBG": "{^} {#AudioNext} {}", "+AOUFRBG": "{} {#AudioNext} {}", "+*UFRBG": "{^} {#AudioNext} {^}{-|}", "+A*UFRBG": "{} {#AudioNext} {^}{-|}", "+O*UFRBG": "{^} {#AudioNext} {}{-|}", "+AO*UFRBG": "{} {#AudioNext} {}{-|}", "+EUFRBG": "{^} {#AudioStop} {^}", "+AEUFRBG": "{} {#AudioStop} {^}", "+OEUFRBG": "{^} {#AudioStop} {}", "+AOEUFRBG": "{} {#AudioStop} {}", "+*EUFRBG": "{^} {#AudioStop} {^}{-|}", "+A*EUFRBG": "{} {#AudioStop} {^}{-|}", "+O*EUFRBG": "{^} {#AudioStop} {}{-|}", "+AO*EUFRBG": "{} {#AudioStop} {}{-|}", "+FPBG": "{^} ~ {^}", "+AFPBG": "{} ~ {^}", "+OFPBG": "{^} ~ {}", "+AOFPBG": "{} ~ {}", "+*FPBG": "{^} ~ {^}{-|}", "+A*FPBG": "{} ~ {^}{-|}", "+O*FPBG": "{^} ~ {}{-|}", "+AO*FPBG": "{} ~ {}{-|}", "+EFPBG": "{^} \u2286 {^}", "+AEFPBG": "{} \u2286 {^}", "+OEFPBG": "{^} \u2286 {}", "+AOEFPBG": "{} \u2286 {}", "+*EFPBG": "{^} \u2286 {^}{-|}", "+A*EFPBG": "{} \u2286 {^}{-|}", "+O*EFPBG": "{^} \u2286 {}{-|}", "+AO*EFPBG": "{} \u2286 {}{-|}", "+UFPBG": "{^} \u2287 {^}", "+AUFPBG": "{} \u2287 {^}", "+OUFPBG": "{^} \u2287 {}", "+AOUFPBG": "{} \u2287 {}", "+*UFPBG": "{^} \u2287 {^}{-|}", "+A*UFPBG": "{} \u2287 {^}{-|}", "+O*UFPBG": "{^} \u2287 {}{-|}", "+AO*UFPBG": "{} \u2287 {}{-|}", "+EUFPBG": "{^} \u02dc {^}", "+AEUFPBG": "{} \u02dc {^}", "+OEUFPBG": "{^} \u02dc {}", "+AOEUFPBG": "{} \u02dc {}", "+*EUFPBG": "{^} \u02dc {^}{-|}", "+A*EUFPBG": "{} \u02dc {^}{-|}", "+O*EUFPBG": "{^} \u02dc {}{-|}", "+AO*EUFPBG": "{} \u02dc {}{-|}", "+ARPBG": "{} {#Up} {^}", "+ORPBG": "{^} {#Up} {}", "+AORPBG": "{} {#Up} {}", "+*RPBG": "{^} {#Up} {^}{-|}", "+A*RPBG": "{} {#Up} {^}{-|}", "+O*RPBG": "{^} {#Up} {}{-|}", "+AO*RPBG": "{} {#Up} {}{-|}", "+ERPBG": "{^} {#Left} {^}", "+AERPBG": "{} {#Left} {^}", "+OERPBG": "{^} {#Left} {}", "+AOERPBG": "{} {#Left} {}", "+*ERPBG": "{^} {#Left} {^}{-|}", "+A*ERPBG": "{} {#Left} {^}{-|}", "+O*ERPBG": "{^} {#Left} {}{-|}", "+AO*ERPBG": "{} {#Left} {}{-|}", "+URPBG": "{^} {#Right} {^}", "+AURPBG": "{} {#Right} {^}", "+OURPBG": "{^} {#Right} {}", "+AOURPBG": "{} {#Right} {}", "+*URPBG": "{^} {#Right} {^}{-|}", "+A*URPBG": "{} {#Right} {^}{-|}", "+O*URPBG": "{^} {#Right} {}{-|}", "+AO*URPBG": "{} {#Right} {}{-|}", "+EURPBG": "{^} {#Down} {^}", "+AEURPBG": "{} {#Down} {^}", "+OEURPBG": "{^} {#Down} {}", "+AOEURPBG": "{} {#Down} {}", "+*EURPBG": "{^} {#Down} {^}{-|}", "+A*EURPBG": "{} {#Down} {^}{-|}", "+O*EURPBG": "{^} {#Down} {}{-|}", "+AO*EURPBG": "{} {#Down} {}{-|}", "+FRPBG": "{^} {#Page_Up} {^}", "+AFRPBG": "{} {#Page_Up} {^}", "+OFRPBG": "{^} {#Page_Up} {}", "+AOFRPBG": "{} {#Page_Up} {}", "+*FRPBG": "{^} {#Page_Up} {^}{-|}", "+A*FRPBG": "{} {#Page_Up} {^}{-|}", "+O*FRPBG": "{^} {#Page_Up} {}{-|}", "+AO*FRPBG": "{} {#Page_Up} {}{-|}", "+EFRPBG": "{^} {#Home} {^}", "+AEFRPBG": "{} {#Home} {^}", "+OEFRPBG": "{^} {#Home} {}", "+AOEFRPBG": "{} {#Home} {}", "+*EFRPBG": "{^} {#Home} {^}{-|}", "+A*EFRPBG": "{} {#Home} {^}{-|}", "+O*EFRPBG": "{^} {#Home} {}{-|}", "+AO*EFRPBG": "{} {#Home} {}{-|}", "+UFRPBG": "{^} {#End} {^}", "+AUFRPBG": "{} {#End} {^}", "+OUFRPBG": "{^} {#End} {}", "+AOUFRPBG": "{} {#End} {}", "+*UFRPBG": "{^} {#End} {^}{-|}", "+A*UFRPBG": "{} {#End} {^}{-|}", "+O*UFRPBG": "{^} {#End} {}{-|}", "+AO*UFRPBG": "{} {#End} {}{-|}", "+EUFRPBG": "{^} {#Page_Down} {^}", "+AEUFRPBG": "{} {#Page_Down} {^}", "+OEUFRPBG": "{^} {#Page_Down} {}", "+AOEUFRPBG": "{} {#Page_Down} {}", "+*EUFRPBG": "{^} {#Page_Down} {^}{-|}", "+A*EUFRPBG": "{} {#Page_Down} {^}{-|}", "+O*EUFRPBG": "{^} {#Page_Down} {}{-|}", "+AO*EUFRPBG": "{} {#Page_Down} {}{-|}", "+LG": "{^} : {^}", "+ALG": "{} : {^}", "+OLG": "{^} : {}", "+AOLG": "{} : {}", "+*LG": "{^} : {^}{-|}", "+A*LG": "{} : {^}{-|}", "+O*LG": "{^} : {}{-|}", "+AO*LG": "{} : {}{-|}", "+ELG": "{^} \u220b {^}", "+AELG": "{} \u220b {^}", "+OELG": "{^} \u220b {}", "+AOELG": "{} \u220b {}", "+*ELG": "{^} \u220b {^}{-|}", "+A*ELG": "{} \u220b {^}{-|}", "+O*ELG": "{^} \u220b {}{-|}", "+AO*ELG": "{} \u220b {}{-|}", "+ULG": "{^} \u2235 {^}", "+AULG": "{} \u2235 {^}", "+OULG": "{^} \u2235 {}", "+AOULG": "{} \u2235 {}", "+*ULG": "{^} \u2235 {^}{-|}", "+A*ULG": "{} \u2235 {^}{-|}", "+O*ULG": "{^} \u2235 {}{-|}", "+AO*ULG": "{} \u2235 {}{-|}", "+EULG": "{^} \u2234 {^}", "+AEULG": "{} \u2234 {^}", "+OEULG": "{^} \u2234 {}", "+AOEULG": "{} \u2234 {}", "+*EULG": "{^} \u2234 {^}{-|}", "+A*EULG": "{} \u2234 {^}{-|}", "+O*EULG": "{^} \u2234 {}{-|}", "+AO*EULG": "{} \u2234 {}{-|}", "+FRLG": "{^} # {^}", "+AFRLG": "{} # {^}", "+OFRLG": "{^} # {}", "+AOFRLG": "{} # {}", "+*FRLG": "{^} # {^}{-|}", "+A*FRLG": "{} # {^}{-|}", "+O*FRLG": "{^} # {}{-|}", "+AO*FRLG": "{} # {}{-|}", "+EFRLG": "{^} \u00a9 {^}", "+AEFRLG": "{} \u00a9 {^}", "+OEFRLG": "{^} \u00a9 {}", "+AOEFRLG": "{} \u00a9 {}", "+*EFRLG": "{^} \u00a9 {^}{-|}", "+A*EFRLG": "{} \u00a9 {^}{-|}", "+O*EFRLG": "{^} \u00a9 {}{-|}", "+AO*EFRLG": "{} \u00a9 {}{-|}", "+UFRLG": "{^} \u00ae {^}", "+AUFRLG": "{} \u00ae {^}", "+OUFRLG": "{^} \u00ae {}", "+AOUFRLG": "{} \u00ae {}", "+*UFRLG": "{^} \u00ae {^}{-|}", "+A*UFRLG": "{} \u00ae {^}{-|}", "+O*UFRLG": "{^} \u00ae {}{-|}", "+AO*UFRLG": "{} \u00ae {}{-|}", "+EUFRLG": "{^} \u2122 {^}", "+AEUFRLG": "{} \u2122 {^}", "+OEUFRLG": "{^} \u2122 {}", "+AOEUFRLG": "{} \u2122 {}", "+*EUFRLG": "{^} \u2122 {^}{-|}", "+A*EUFRLG": "{} \u2122 {^}{-|}", "+O*EUFRLG": "{^} \u2122 {}{-|}", "+AO*EUFRLG": "{} \u2122 {}{-|}", "+APBLG": "{} = {^}", "+OPBLG": "{^} = {}", "+AOPBLG": "{} = {}", "+*PBLG": "{^} = {^}{-|}", "+A*PBLG": "{} = {^}{-|}", "+O*PBLG": "{^} = {}{-|}", "+AO*PBLG": "{} = {}{-|}", "+EPBLG": "{^} \u2261 {^}", "+AEPBLG": "{} \u2261 {^}", "+OEPBLG": "{^} \u2261 {}", "+AOEPBLG": "{} \u2261 {}", "+*EPBLG": "{^} \u2261 {^}{-|}", "+A*EPBLG": "{} \u2261 {^}{-|}", "+O*EPBLG": "{^} \u2261 {}{-|}", "+AO*EPBLG": "{} \u2261 {}{-|}", "+UPBLG": "{^} \u2248 {^}", "+AUPBLG": "{} \u2248 {^}", "+OUPBLG": "{^} \u2248 {}", "+AOUPBLG": "{} \u2248 {}", "+*UPBLG": "{^} \u2248 {^}{-|}", "+A*UPBLG": "{} \u2248 {^}{-|}", "+O*UPBLG": "{^} \u2248 {}{-|}", "+AO*UPBLG": "{} \u2248 {}{-|}", "+EUPBLG": "{^} \u2260 {^}", "+AEUPBLG": "{} \u2260 {^}", "+OEUPBLG": "{^} \u2260 {}", "+AOEUPBLG": "{} \u2260 {}", "+*EUPBLG": "{^} \u2260 {^}{-|}", "+A*EUPBLG": "{} \u2260 {^}{-|}", "+O*EUPBLG": "{^} \u2260 {}{-|}", "+AO*EUPBLG": "{} \u2260 {}{-|}", "+FRPBLG": "{^} @ {^}", "+AFRPBLG": "{} @ {^}", "+OFRPBLG": "{^} @ {}", "+AOFRPBLG": "{} @ {}", "+*FRPBLG": "{^} @ {^}{-|}", "+A*FRPBLG": "{} @ {^}{-|}", "+O*FRPBLG": "{^} @ {}{-|}", "+AO*FRPBLG": "{} @ {}{-|}", "+EFRPBLG": "{^} \u2295 {^}", "+AEFRPBLG": "{} \u2295 {^}", "+OEFRPBLG": "{^} \u2295 {}", "+AOEFRPBLG": "{} \u2295 {}", "+*EFRPBLG": "{^} \u2295 {^}{-|}", "+A*EFRPBLG": "{} \u2295 {^}{-|}", "+O*EFRPBLG": "{^} \u2295 {}{-|}", "+AO*EFRPBLG": "{} \u2295 {}{-|}", "+UFRPBLG": "{^} \u2297 {^}", "+AUFRPBLG": "{} \u2297 {^}", "+OUFRPBLG": "{^} \u2297 {}", "+AOUFRPBLG": "{} \u2297 {}", "+*UFRPBLG": "{^} \u2297 {^}{-|}", "+A*UFRPBLG": "{} \u2297 {^}{-|}", "+O*UFRPBLG": "{^} \u2297 {}{-|}", "+AO*UFRPBLG": "{} \u2297 {}{-|}", "+EUFRPBLG": "{^} \u2205 {^}", "+AEUFRPBLG": "{} \u2205 {^}", "+OEUFRPBLG": "{^} \u2205 {}", "+AOEUFRPBLG": "{} \u2205 {}", "+*EUFRPBLG": "{^} \u2205 {^}{-|}", "+A*EUFRPBLG": "{} \u2205 {^}{-|}", "+O*EUFRPBLG": "{^} \u2205 {}{-|}", "+AO*EUFRPBLG": "{} \u2205 {}{-|}", "+AT": "{} {^}", "+OT": "{^} {}", "+AOT": "{} {}", "+*T": "{^} {^}{-|}", "+A*T": "{} {^}{-|}", "+O*T": "{^} {}{-|}", "+AO*T": "{} {}{-|}", "+ET": "{*!}{*!}{*!}", "+AET": "{}{*!}{*!}{*!}", "+OET": "{*!}{*!}{*!}{}", "+AOET": "{}{*!}{*!}{*!}{}", "+*ET": "{*!}{*!}{*!}{-|}", "+A*ET": "{}{*!}{*!}{*!}{-|}", "+O*ET": "{*!}{*!}{*!}{}{-|}", "+AO*ET": "{}{*!}{*!}{*!}{}{-|}", "+UT": "{*?}{*?}{*?}", "+AUT": "{}{*?}{*?}{*?}", "+OUT": "{*?}{*?}{*?}{}", "+AOUT": "{}{*?}{*?}{*?}{}", "+*UT": "{*?}{*?}{*?}{-|}", "+A*UT": "{}{*?}{*?}{*?}{-|}", "+O*UT": "{*?}{*?}{*?}{}{-|}", "+AO*UT": "{}{*?}{*?}{*?}{}{-|}", "+EUT": "{^} {#Space}{#Space}{#Space} {^}", "+AEUT": "{} {#Space}{#Space}{#Space} {^}", "+OEUT": "{^} {#Space}{#Space}{#Space} {}", "+AOEUT": "{} {#Space}{#Space}{#Space} {}", "+*EUT": "{^} {#Space}{#Space}{#Space} {^}{-|}", "+A*EUT": "{} {#Space}{#Space}{#Space} {^}{-|}", "+O*EUT": "{^} {#Space}{#Space}{#Space} {}{-|}", "+AO*EUT": "{} {#Space}{#Space}{#Space} {}{-|}", "+FT": "{^} ''' {^}", "+AFT": "{} ''' {^}", "+OFT": "{^} ''' {}", "+AOFT": "{} ''' {}", "+*FT": "{^} ''' {^}{-|}", "+A*FT": "{} ''' {^}{-|}", "+O*FT": "{^} ''' {}{-|}", "+AO*FT": "{} ''' {}{-|}", "+EFT": "{^} \u2018\u2018\u2018 {^}", "+AEFT": "{} \u2018\u2018\u2018 {^}", "+OEFT": "{^} \u2018\u2018\u2018 {}", "+AOEFT": "{} \u2018\u2018\u2018 {}", "+*EFT": "{^} \u2018\u2018\u2018 {^}{-|}", "+A*EFT": "{} \u2018\u2018\u2018 {^}{-|}", "+O*EFT": "{^} \u2018\u2018\u2018 {}{-|}", "+AO*EFT": "{} \u2018\u2018\u2018 {}{-|}", "+UFT": "{^} \u2019\u2019\u2019 {^}", "+AUFT": "{} \u2019\u2019\u2019 {^}", "+OUFT": "{^} \u2019\u2019\u2019 {}", "+AOUFT": "{} \u2019\u2019\u2019 {}", "+*UFT": "{^} \u2019\u2019\u2019 {^}{-|}", "+A*UFT": "{} \u2019\u2019\u2019 {^}{-|}", "+O*UFT": "{^} \u2019\u2019\u2019 {}{-|}", "+AO*UFT": "{} \u2019\u2019\u2019 {}{-|}", "+EUFT": "{^} \u201a\u201a\u201a {^}", "+AEUFT": "{} \u201a\u201a\u201a {^}", "+OEUFT": "{^} \u201a\u201a\u201a {}", "+AOEUFT": "{} \u201a\u201a\u201a {}", "+*EUFT": "{^} \u201a\u201a\u201a {^}{-|}", "+A*EUFT": "{} \u201a\u201a\u201a {^}{-|}", "+O*EUFT": "{^} \u201a\u201a\u201a {}{-|}", "+AO*EUFT": "{} \u201a\u201a\u201a {}{-|}", "+ART": "{} ... {^}", "+ORT": "{^} ... {}", "+AORT": "{} ... {}", "+*RT": "{^} ... {^}{-|}", "+A*RT": "{} ... {^}{-|}", "+O*RT": "{^} ... {}{-|}", "+AO*RT": "{} ... {}{-|}", "+ERT": "{^} \u2022\u2022\u2022 {^}", "+AERT": "{} \u2022\u2022\u2022 {^}", "+OERT": "{^} \u2022\u2022\u2022 {}", "+AOERT": "{} \u2022\u2022\u2022 {}", "+*ERT": "{^} \u2022\u2022\u2022 {^}{-|}", "+A*ERT": "{} \u2022\u2022\u2022 {^}{-|}", "+O*ERT": "{^} \u2022\u2022\u2022 {}{-|}", "+AO*ERT": "{} \u2022\u2022\u2022 {}{-|}", "+URT": "{^} \u00b7\u00b7\u00b7 {^}", "+AURT": "{} \u00b7\u00b7\u00b7 {^}", "+OURT": "{^} \u00b7\u00b7\u00b7 {}", "+AOURT": "{} \u00b7\u00b7\u00b7 {}", "+*URT": "{^} \u00b7\u00b7\u00b7 {^}{-|}", "+A*URT": "{} \u00b7\u00b7\u00b7 {^}{-|}", "+O*URT": "{^} \u00b7\u00b7\u00b7 {}{-|}", "+AO*URT": "{} \u00b7\u00b7\u00b7 {}{-|}", "+EURT": "{^} \u2026\u2026\u2026 {^}", "+AEURT": "{} \u2026\u2026\u2026 {^}", "+OEURT": "{^} \u2026\u2026\u2026 {}", "+AOEURT": "{} \u2026\u2026\u2026 {}", "+*EURT": "{^} \u2026\u2026\u2026 {^}{-|}", "+A*EURT": "{} \u2026\u2026\u2026 {^}{-|}", "+O*EURT": "{^} \u2026\u2026\u2026 {}{-|}", "+AO*EURT": "{} \u2026\u2026\u2026 {}{-|}", "+FRT": "{^} !!! {^}", "+AFRT": "{} !!! {^}", "+OFRT": "{^} !!! {}", "+AOFRT": "{} !!! {}", "+*FRT": "{^} !!! {^}{-|}", "+A*FRT": "{} !!! {^}{-|}", "+O*FRT": "{^} !!! {}{-|}", "+AO*FRT": "{} !!! {}{-|}", "+EFRT": "{^} \u00ac\u00ac\u00ac {^}", "+AEFRT": "{} \u00ac\u00ac\u00ac {^}", "+OEFRT": "{^} \u00ac\u00ac\u00ac {}", "+AOEFRT": "{} \u00ac\u00ac\u00ac {}", "+*EFRT": "{^} \u00ac\u00ac\u00ac {^}{-|}", "+A*EFRT": "{} \u00ac\u00ac\u00ac {^}{-|}", "+O*EFRT": "{^} \u00ac\u00ac\u00ac {}{-|}", "+AO*EFRT": "{} \u00ac\u00ac\u00ac {}{-|}", "+UFRT": "{^} \u21a6\u21a6\u21a6 {^}", "+AUFRT": "{} \u21a6\u21a6\u21a6 {^}", "+OUFRT": "{^} \u21a6\u21a6\u21a6 {}", "+AOUFRT": "{} \u21a6\u21a6\u21a6 {}", "+*UFRT": "{^} \u21a6\u21a6\u21a6 {^}{-|}", "+A*UFRT": "{} \u21a6\u21a6\u21a6 {^}{-|}", "+O*UFRT": "{^} \u21a6\u21a6\u21a6 {}{-|}", "+AO*UFRT": "{} \u21a6\u21a6\u21a6 {}{-|}", "+EUFRT": "{^} \u00a1\u00a1\u00a1 {^}", "+AEUFRT": "{} \u00a1\u00a1\u00a1 {^}", "+OEUFRT": "{^} \u00a1\u00a1\u00a1 {}", "+AOEUFRT": "{} \u00a1\u00a1\u00a1 {}", "+*EUFRT": "{^} \u00a1\u00a1\u00a1 {^}{-|}", "+A*EUFRT": "{} \u00a1\u00a1\u00a1 {^}{-|}", "+O*EUFRT": "{^} \u00a1\u00a1\u00a1 {}{-|}", "+AO*EUFRT": "{} \u00a1\u00a1\u00a1 {}{-|}", "+APT": "{} ``` {^}", "+OPT": "{^} ``` {}", "+AOPT": "{} ``` {}", "+*PT": "{^} ``` {^}{-|}", "+A*PT": "{} ``` {^}{-|}", "+O*PT": "{^} ``` {}{-|}", "+AO*PT": "{} ``` {}{-|}", "+EPT": "{^} \u2282\u2282\u2282 {^}", "+AEPT": "{} \u2282\u2282\u2282 {^}", "+OEPT": "{^} \u2282\u2282\u2282 {}", "+AOEPT": "{} \u2282\u2282\u2282 {}", "+*EPT": "{^} \u2282\u2282\u2282 {^}{-|}", "+A*EPT": "{} \u2282\u2282\u2282 {^}{-|}", "+O*EPT": "{^} \u2282\u2282\u2282 {}{-|}", "+AO*EPT": "{} \u2282\u2282\u2282 {}{-|}", "+UPT": "{^} \u2283\u2283\u2283 {^}", "+AUPT": "{} \u2283\u2283\u2283 {^}", "+OUPT": "{^} \u2283\u2283\u2283 {}", "+AOUPT": "{} \u2283\u2283\u2283 {}", "+*UPT": "{^} \u2283\u2283\u2283 {^}{-|}", "+A*UPT": "{} \u2283\u2283\u2283 {^}{-|}", "+O*UPT": "{^} \u2283\u2283\u2283 {}{-|}", "+AO*UPT": "{} \u2283\u2283\u2283 {}{-|}", "+EUPT": "{^} \u03c0\u03c0\u03c0 {^}", "+AEUPT": "{} \u03c0\u03c0\u03c0 {^}", "+OEUPT": "{^} \u03c0\u03c0\u03c0 {}", "+AOEUPT": "{} \u03c0\u03c0\u03c0 {}", "+*EUPT": "{^} \u03c0\u03c0\u03c0 {^}{-|}", "+A*EUPT": "{} \u03c0\u03c0\u03c0 {^}{-|}", "+O*EUPT": "{^} \u03c0\u03c0\u03c0 {}{-|}", "+AO*EUPT": "{} \u03c0\u03c0\u03c0 {}{-|}", "+FPT": "{^} \"\"\" {^}", "+AFPT": "{} \"\"\" {^}", "+OFPT": "{^} \"\"\" {}", "+AOFPT": "{} \"\"\" {}", "+*FPT": "{^} \"\"\" {^}{-|}", "+A*FPT": "{} \"\"\" {^}{-|}", "+O*FPT": "{^} \"\"\" {}{-|}", "+AO*FPT": "{} \"\"\" {}{-|}", "+EFPT": "{^} \u201c\u201c\u201c {^}", "+AEFPT": "{} \u201c\u201c\u201c {^}", "+OEFPT": "{^} \u201c\u201c\u201c {}", "+AOEFPT": "{} \u201c\u201c\u201c {}", "+*EFPT": "{^} \u201c\u201c\u201c {^}{-|}", "+A*EFPT": "{} \u201c\u201c\u201c {^}{-|}", "+O*EFPT": "{^} \u201c\u201c\u201c {}{-|}", "+AO*EFPT": "{} \u201c\u201c\u201c {}{-|}", "+UFPT": "{^} \u201d\u201d\u201d {^}", "+AUFPT": "{} \u201d\u201d\u201d {^}", "+OUFPT": "{^} \u201d\u201d\u201d {}", "+AOUFPT": "{} \u201d\u201d\u201d {}", "+*UFPT": "{^} \u201d\u201d\u201d {^}{-|}", "+A*UFPT": "{} \u201d\u201d\u201d {^}{-|}", "+O*UFPT": "{^} \u201d\u201d\u201d {}{-|}", "+AO*UFPT": "{} \u201d\u201d\u201d {}{-|}", "+EUFPT": "{^} \u201e\u201e\u201e {^}", "+AEUFPT": "{} \u201e\u201e\u201e {^}", "+OEUFPT": "{^} \u201e\u201e\u201e {}", "+AOEUFPT": "{} \u201e\u201e\u201e {}", "+*EUFPT": "{^} \u201e\u201e\u201e {^}{-|}", "+A*EUFPT": "{} \u201e\u201e\u201e {^}{-|}", "+O*EUFPT": "{^} \u201e\u201e\u201e {}{-|}", "+AO*EUFPT": "{} \u201e\u201e\u201e {}{-|}", "+ARPT": "{} /// {^}", "+ORPT": "{^} /// {}", "+AORPT": "{} /// {}", "+*RPT": "{^} /// {^}{-|}", "+A*RPT": "{} /// {^}{-|}", "+O*RPT": "{^} /// {}{-|}", "+AO*RPT": "{} /// {}{-|}", "+ERPT": "{^} \u21d2\u21d2\u21d2 {^}", "+AERPT": "{} \u21d2\u21d2\u21d2 {^}", "+OERPT": "{^} \u21d2\u21d2\u21d2 {}", "+AOERPT": "{} \u21d2\u21d2\u21d2 {}", "+*ERPT": "{^} \u21d2\u21d2\u21d2 {^}{-|}", "+A*ERPT": "{} \u21d2\u21d2\u21d2 {^}{-|}", "+O*ERPT": "{^} \u21d2\u21d2\u21d2 {}{-|}", "+AO*ERPT": "{} \u21d2\u21d2\u21d2 {}{-|}", "+URPT": "{^} \u21d4\u21d4\u21d4 {^}", "+AURPT": "{} \u21d4\u21d4\u21d4 {^}", "+OURPT": "{^} \u21d4\u21d4\u21d4 {}", "+AOURPT": "{} \u21d4\u21d4\u21d4 {}", "+*URPT": "{^} \u21d4\u21d4\u21d4 {^}{-|}", "+A*URPT": "{} \u21d4\u21d4\u21d4 {^}{-|}", "+O*URPT": "{^} \u21d4\u21d4\u21d4 {}{-|}", "+AO*URPT": "{} \u21d4\u21d4\u21d4 {}{-|}", "+EURPT": "{^} \u00f7\u00f7\u00f7 {^}", "+AEURPT": "{} \u00f7\u00f7\u00f7 {^}", "+OEURPT": "{^} \u00f7\u00f7\u00f7 {}", "+AOEURPT": "{} \u00f7\u00f7\u00f7 {}", "+*EURPT": "{^} \u00f7\u00f7\u00f7 {^}{-|}", "+A*EURPT": "{} \u00f7\u00f7\u00f7 {^}{-|}", "+O*EURPT": "{^} \u00f7\u00f7\u00f7 {}{-|}", "+AO*EURPT": "{} \u00f7\u00f7\u00f7 {}{-|}", "+BT": "{^} ,,, {^}", "+ABT": "{} ,,, {^}", "+OBT": "{^} ,,, {}", "+AOBT": "{} ,,, {}", "+*BT": "{^} ,,, {^}{-|}", "+A*BT": "{} ,,, {^}{-|}", "+O*BT": "{^} ,,, {}{-|}", "+AO*BT": "{} ,,, {}{-|}", "+EBT": "{^} \u222a\u222a\u222a {^}", "+AEBT": "{} \u222a\u222a\u222a {^}", "+OEBT": "{^} \u222a\u222a\u222a {}", "+AOEBT": "{} \u222a\u222a\u222a {}", "+*EBT": "{^} \u222a\u222a\u222a {^}{-|}", "+A*EBT": "{} \u222a\u222a\u222a {^}{-|}", "+O*EBT": "{^} \u222a\u222a\u222a {}{-|}", "+AO*EBT": "{} \u222a\u222a\u222a {}{-|}", "+UBT": "{^} \u2228\u2228\u2228 {^}", "+AUBT": "{} \u2228\u2228\u2228 {^}", "+OUBT": "{^} \u2228\u2228\u2228 {}", "+AOUBT": "{} \u2228\u2228\u2228 {}", "+*UBT": "{^} \u2228\u2228\u2228 {^}{-|}", "+A*UBT": "{} \u2228\u2228\u2228 {^}{-|}", "+O*UBT": "{^} \u2228\u2228\u2228 {}{-|}", "+AO*UBT": "{} \u2228\u2228\u2228 {}{-|}", "+EUBT": "{^} \u2209\u2209\u2209 {^}", "+AEUBT": "{} \u2209\u2209\u2209 {^}", "+OEUBT": "{^} \u2209\u2209\u2209 {}", "+AOEUBT": "{} \u2209\u2209\u2209 {}", "+*EUBT": "{^} \u2209\u2209\u2209 {^}{-|}", "+A*EUBT": "{} \u2209\u2209\u2209 {^}{-|}", "+O*EUBT": "{^} \u2209\u2209\u2209 {}{-|}", "+AO*EUBT": "{} \u2209\u2209\u2209 {}{-|}", "+FBT": "{^} \\\\\\ {^}", "+AFBT": "{} \\\\\\ {^}", "+OFBT": "{^} \\\\\\ {}", "+AOFBT": "{} \\\\\\ {}", "+*FBT": "{^} \\\\\\ {^}{-|}", "+A*FBT": "{} \\\\\\ {^}{-|}", "+O*FBT": "{^} \\\\\\ {}{-|}", "+AO*FBT": "{} \\\\\\ {}{-|}", "+EFBT": "{^} \u0394\u0394\u0394 {^}", "+AEFBT": "{} \u0394\u0394\u0394 {^}", "+OEFBT": "{^} \u0394\u0394\u0394 {}", "+AOEFBT": "{} \u0394\u0394\u0394 {}", "+*EFBT": "{^} \u0394\u0394\u0394 {^}{-|}", "+A*EFBT": "{} \u0394\u0394\u0394 {^}{-|}", "+O*EFBT": "{^} \u0394\u0394\u0394 {}{-|}", "+AO*EFBT": "{} \u0394\u0394\u0394 {}{-|}", "+UFBT": "{^} \u221a\u221a\u221a {^}", "+AUFBT": "{} \u221a\u221a\u221a {^}", "+OUFBT": "{^} \u221a\u221a\u221a {}", "+AOUFBT": "{} \u221a\u221a\u221a {}", "+*UFBT": "{^} \u221a\u221a\u221a {^}{-|}", "+A*UFBT": "{} \u221a\u221a\u221a {^}{-|}", "+O*UFBT": "{^} \u221a\u221a\u221a {}{-|}", "+AO*UFBT": "{} \u221a\u221a\u221a {}{-|}", "+EUFBT": "{^} \u221e\u221e\u221e {^}", "+AEUFBT": "{} \u221e\u221e\u221e {^}", "+OEUFBT": "{^} \u221e\u221e\u221e {}", "+AOEUFBT": "{} \u221e\u221e\u221e {}", "+*EUFBT": "{^} \u221e\u221e\u221e {^}{-|}", "+A*EUFBT": "{} \u221e\u221e\u221e {^}{-|}", "+O*EUFBT": "{^} \u221e\u221e\u221e {}{-|}", "+AO*EUFBT": "{} \u221e\u221e\u221e {}{-|}", "+ARBT": "{} ;;; {^}", "+ORBT": "{^} ;;; {}", "+AORBT": "{} ;;; {}", "+*RBT": "{^} ;;; {^}{-|}", "+A*RBT": "{} ;;; {^}{-|}", "+O*RBT": "{^} ;;; {}{-|}", "+AO*RBT": "{} ;;; {}{-|}", "+ERBT": "{^} \u2200\u2200\u2200 {^}", "+AERBT": "{} \u2200\u2200\u2200 {^}", "+OERBT": "{^} \u2200\u2200\u2200 {}", "+AOERBT": "{} \u2200\u2200\u2200 {}", "+*ERBT": "{^} \u2200\u2200\u2200 {^}{-|}", "+A*ERBT": "{} \u2200\u2200\u2200 {^}{-|}", "+O*ERBT": "{^} \u2200\u2200\u2200 {}{-|}", "+AO*ERBT": "{} \u2200\u2200\u2200 {}{-|}", "+URBT": "{^} \u2203\u2203\u2203 {^}", "+AURBT": "{} \u2203\u2203\u2203 {^}", "+OURBT": "{^} \u2203\u2203\u2203 {}", "+AOURBT": "{} \u2203\u2203\u2203 {}", "+*URBT": "{^} \u2203\u2203\u2203 {^}{-|}", "+A*URBT": "{} \u2203\u2203\u2203 {^}{-|}", "+O*URBT": "{^} \u2203\u2203\u2203 {}{-|}", "+AO*URBT": "{} \u2203\u2203\u2203 {}{-|}", "+EURBT": "{^} \u2204\u2204\u2204 {^}", "+AEURBT": "{} \u2204\u2204\u2204 {^}", "+OEURBT": "{^} \u2204\u2204\u2204 {}", "+AOEURBT": "{} \u2204\u2204\u2204 {}", "+*EURBT": "{^} \u2204\u2204\u2204 {^}{-|}", "+A*EURBT": "{} \u2204\u2204\u2204 {^}{-|}", "+O*EURBT": "{^} \u2204\u2204\u2204 {}{-|}", "+AO*EURBT": "{} \u2204\u2204\u2204 {}{-|}", "+FRBT": "{^} {#AudioMute}{#AudioMute}{#AudioMute} {^}", "+AFRBT": "{} {#AudioMute}{#AudioMute}{#AudioMute} {^}", "+OFRBT": "{^} {#AudioMute}{#AudioMute}{#AudioMute} {}", "+AOFRBT": "{} {#AudioMute}{#AudioMute}{#AudioMute} {}", "+*FRBT": "{^} {#AudioMute}{#AudioMute}{#AudioMute} {^}{-|}", "+A*FRBT": "{} {#AudioMute}{#AudioMute}{#AudioMute} {^}{-|}", "+O*FRBT": "{^} {#AudioMute}{#AudioMute}{#AudioMute} {}{-|}", "+AO*FRBT": "{} {#AudioMute}{#AudioMute}{#AudioMute} {}{-|}", "+EFRBT": "{^} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {^}", "+AEFRBT": "{} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {^}", "+OEFRBT": "{^} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {}", "+AOEFRBT": "{} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {}", "+*EFRBT": "{^} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {^}{-|}", "+A*EFRBT": "{} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {^}{-|}", "+O*EFRBT": "{^} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {}{-|}", "+AO*EFRBT": "{} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {}{-|}", "+UFRBT": "{^} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {^}", "+AUFRBT": "{} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {^}", "+OUFRBT": "{^} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {}", "+AOUFRBT": "{} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {}", "+*UFRBT": "{^} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {^}{-|}", "+A*UFRBT": "{} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {^}{-|}", "+O*UFRBT": "{^} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {}{-|}", "+AO*UFRBT": "{} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {}{-|}", "+EUFRBT": "{^} {#Eject}{#Eject}{#Eject} {^}", "+AEUFRBT": "{} {#Eject}{#Eject}{#Eject} {^}", "+OEUFRBT": "{^} {#Eject}{#Eject}{#Eject} {}", "+AOEUFRBT": "{} {#Eject}{#Eject}{#Eject} {}", "+*EUFRBT": "{^} {#Eject}{#Eject}{#Eject} {^}{-|}", "+A*EUFRBT": "{} {#Eject}{#Eject}{#Eject} {^}{-|}", "+O*EUFRBT": "{^} {#Eject}{#Eject}{#Eject} {}{-|}", "+AO*EUFRBT": "{} {#Eject}{#Eject}{#Eject} {}{-|}", "+APBT": "{} ||| {^}", "+OPBT": "{^} ||| {}", "+AOPBT": "{} ||| {}", "+*PBT": "{^} ||| {^}{-|}", "+A*PBT": "{} ||| {^}{-|}", "+O*PBT": "{^} ||| {}{-|}", "+AO*PBT": "{} ||| {}{-|}", "+EPBT": "{^} \u22a4\u22a4\u22a4 {^}", "+AEPBT": "{} \u22a4\u22a4\u22a4 {^}", "+OEPBT": "{^} \u22a4\u22a4\u22a4 {}", "+AOEPBT": "{} \u22a4\u22a4\u22a4 {}", "+*EPBT": "{^} \u22a4\u22a4\u22a4 {^}{-|}", "+A*EPBT": "{} \u22a4\u22a4\u22a4 {^}{-|}", "+O*EPBT": "{^} \u22a4\u22a4\u22a4 {}{-|}", "+AO*EPBT": "{} \u22a4\u22a4\u22a4 {}{-|}", "+UPBT": "{^} \u22a5\u22a5\u22a5 {^}", "+AUPBT": "{} \u22a5\u22a5\u22a5 {^}", "+OUPBT": "{^} \u22a5\u22a5\u22a5 {}", "+AOUPBT": "{} \u22a5\u22a5\u22a5 {}", "+*UPBT": "{^} \u22a5\u22a5\u22a5 {^}{-|}", "+A*UPBT": "{} \u22a5\u22a5\u22a5 {^}{-|}", "+O*UPBT": "{^} \u22a5\u22a5\u22a5 {}{-|}", "+AO*UPBT": "{} \u22a5\u22a5\u22a5 {}{-|}", "+EUPBT": "{^} \u00a6\u00a6\u00a6 {^}", "+AEUPBT": "{} \u00a6\u00a6\u00a6 {^}", "+OEUPBT": "{^} \u00a6\u00a6\u00a6 {}", "+AOEUPBT": "{} \u00a6\u00a6\u00a6 {}", "+*EUPBT": "{^} \u00a6\u00a6\u00a6 {^}{-|}", "+A*EUPBT": "{} \u00a6\u00a6\u00a6 {^}{-|}", "+O*EUPBT": "{^} \u00a6\u00a6\u00a6 {}{-|}", "+AO*EUPBT": "{} \u00a6\u00a6\u00a6 {}{-|}", "+FPBT": "{^} ??? {^}", "+AFPBT": "{} ??? {^}", "+OFPBT": "{^} ??? {}", "+AOFPBT": "{} ??? {}", "+*FPBT": "{^} ??? {^}{-|}", "+A*FPBT": "{} ??? {^}{-|}", "+O*FPBT": "{^} ??? {}{-|}", "+AO*FPBT": "{} ??? {}{-|}", "+EFPBT": "{^} \u00bf\u00bf\u00bf {^}", "+AEFPBT": "{} \u00bf\u00bf\u00bf {^}", "+OEFPBT": "{^} \u00bf\u00bf\u00bf {}", "+AOEFPBT": "{} \u00bf\u00bf\u00bf {}", "+*EFPBT": "{^} \u00bf\u00bf\u00bf {^}{-|}", "+A*EFPBT": "{} \u00bf\u00bf\u00bf {^}{-|}", "+O*EFPBT": "{^} \u00bf\u00bf\u00bf {}{-|}", "+AO*EFPBT": "{} \u00bf\u00bf\u00bf {}{-|}", "+UFPBT": "{^} \u221d\u221d\u221d {^}", "+AUFPBT": "{} \u221d\u221d\u221d {^}", "+OUFPBT": "{^} \u221d\u221d\u221d {}", "+AOUFPBT": "{} \u221d\u221d\u221d {}", "+*UFPBT": "{^} \u221d\u221d\u221d {^}{-|}", "+A*UFPBT": "{} \u221d\u221d\u221d {^}{-|}", "+O*UFPBT": "{^} \u221d\u221d\u221d {}{-|}", "+AO*UFPBT": "{} \u221d\u221d\u221d {}{-|}", "+EUFPBT": "{^} \u203d\u203d\u203d {^}", "+AEUFPBT": "{} \u203d\u203d\u203d {^}", "+OEUFPBT": "{^} \u203d\u203d\u203d {}", "+AOEUFPBT": "{} \u203d\u203d\u203d {}", "+*EUFPBT": "{^} \u203d\u203d\u203d {^}{-|}", "+A*EUFPBT": "{} \u203d\u203d\u203d {^}{-|}", "+O*EUFPBT": "{^} \u203d\u203d\u203d {}{-|}", "+AO*EUFPBT": "{} \u203d\u203d\u203d {}{-|}", "+FRPBT": "{^} %%% {^}", "+AFRPBT": "{} %%% {^}", "+OFRPBT": "{^} %%% {}", "+AOFRPBT": "{} %%% {}", "+*FRPBT": "{^} %%% {^}{-|}", "+A*FRPBT": "{} %%% {^}{-|}", "+O*FRPBT": "{^} %%% {}{-|}", "+AO*FRPBT": "{} %%% {}{-|}", "+EFRPBT": "{^} \u2030\u2030\u2030 {^}", "+AEFRPBT": "{} \u2030\u2030\u2030 {^}", "+OEFRPBT": "{^} \u2030\u2030\u2030 {}", "+AOEFRPBT": "{} \u2030\u2030\u2030 {}", "+*EFRPBT": "{^} \u2030\u2030\u2030 {^}{-|}", "+A*EFRPBT": "{} \u2030\u2030\u2030 {^}{-|}", "+O*EFRPBT": "{^} \u2030\u2030\u2030 {}{-|}", "+AO*EFRPBT": "{} \u2030\u2030\u2030 {}{-|}", "+UFRPBT": "{^} \u2031\u2031\u2031 {^}", "+AUFRPBT": "{} \u2031\u2031\u2031 {^}", "+OUFRPBT": "{^} \u2031\u2031\u2031 {}", "+AOUFRPBT": "{} \u2031\u2031\u2031 {}", "+*UFRPBT": "{^} \u2031\u2031\u2031 {^}{-|}", "+A*UFRPBT": "{} \u2031\u2031\u2031 {^}{-|}", "+O*UFRPBT": "{^} \u2031\u2031\u2031 {}{-|}", "+AO*UFRPBT": "{} \u2031\u2031\u2031 {}{-|}", "+EUFRPBT": "{^} \u03c6\u03c6\u03c6 {^}", "+AEUFRPBT": "{} \u03c6\u03c6\u03c6 {^}", "+OEUFRPBT": "{^} \u03c6\u03c6\u03c6 {}", "+AOEUFRPBT": "{} \u03c6\u03c6\u03c6 {}", "+*EUFRPBT": "{^} \u03c6\u03c6\u03c6 {^}{-|}", "+A*EUFRPBT": "{} \u03c6\u03c6\u03c6 {^}{-|}", "+O*EUFRPBT": "{^} \u03c6\u03c6\u03c6 {}{-|}", "+AO*EUFRPBT": "{} \u03c6\u03c6\u03c6 {}{-|}", "+LT": "{^} *** {^}", "+ALT": "{} *** {^}", "+OLT": "{^} *** {}", "+AOLT": "{} *** {}", "+*LT": "{^} *** {^}{-|}", "+A*LT": "{} *** {^}{-|}", "+O*LT": "{^} *** {}{-|}", "+AO*LT": "{} *** {}{-|}", "+ELT": "{^} \u220f\u220f\u220f {^}", "+AELT": "{} \u220f\u220f\u220f {^}", "+OELT": "{^} \u220f\u220f\u220f {}", "+AOELT": "{} \u220f\u220f\u220f {}", "+*ELT": "{^} \u220f\u220f\u220f {^}{-|}", "+A*ELT": "{} \u220f\u220f\u220f {^}{-|}", "+O*ELT": "{^} \u220f\u220f\u220f {}{-|}", "+AO*ELT": "{} \u220f\u220f\u220f {}{-|}", "+ULT": "{^} \u00a7\u00a7\u00a7 {^}", "+AULT": "{} \u00a7\u00a7\u00a7 {^}", "+OULT": "{^} \u00a7\u00a7\u00a7 {}", "+AOULT": "{} \u00a7\u00a7\u00a7 {}", "+*ULT": "{^} \u00a7\u00a7\u00a7 {^}{-|}", "+A*ULT": "{} \u00a7\u00a7\u00a7 {^}{-|}", "+O*ULT": "{^} \u00a7\u00a7\u00a7 {}{-|}", "+AO*ULT": "{} \u00a7\u00a7\u00a7 {}{-|}", "+EULT": "{^} \u00d7\u00d7\u00d7 {^}", "+AEULT": "{} \u00d7\u00d7\u00d7 {^}", "+OEULT": "{^} \u00d7\u00d7\u00d7 {}", "+AOEULT": "{} \u00d7\u00d7\u00d7 {}", "+*EULT": "{^} \u00d7\u00d7\u00d7 {^}{-|}", "+A*EULT": "{} \u00d7\u00d7\u00d7 {^}{-|}", "+O*EULT": "{^} \u00d7\u00d7\u00d7 {}{-|}", "+AO*EULT": "{} \u00d7\u00d7\u00d7 {}{-|}", "+FLT": "{^} {*-|}{*-|}{*-|} {^}", "+AFLT": "{} {*-|}{*-|}{*-|} {^}", "+OFLT": "{^} {*-|}{*-|}{*-|} {}", "+AOFLT": "{} {*-|}{*-|}{*-|} {}", "+*FLT": "{^} {*-|}{*-|}{*-|} {^}{-|}", "+A*FLT": "{} {*-|}{*-|}{*-|} {^}{-|}", "+O*FLT": "{^} {*-|}{*-|}{*-|} {}{-|}", "+AO*FLT": "{} {*-|}{*-|}{*-|} {}{-|}", "+EFLT": "{^} {*<}{*<}{*<} {^}", "+AEFLT": "{} {*<}{*<}{*<} {^}", "+OEFLT": "{^} {*<}{*<}{*<} {}", "+AOEFLT": "{} {*<}{*<}{*<} {}", "+*EFLT": "{^} {*<}{*<}{*<} {^}{-|}", "+A*EFLT": "{} {*<}{*<}{*<} {^}{-|}", "+O*EFLT": "{^} {*<}{*<}{*<} {}{-|}", "+AO*EFLT": "{} {*<}{*<}{*<} {}{-|}", "+UFLT": "{^} {<}{<}{<} {^}", "+AUFLT": "{} {<}{<}{<} {^}", "+OUFLT": "{^} {<}{<}{<} {}", "+AOUFLT": "{} {<}{<}{<} {}", "+*UFLT": "{^} {<}{<}{<} {^}{-|}", "+A*UFLT": "{} {<}{<}{<} {^}{-|}", "+O*UFLT": "{^} {<}{<}{<} {}{-|}", "+AO*UFLT": "{} {<}{<}{<} {}{-|}", "+EUFLT": "{^} {*>}{*>}{*>} {^}", "+AEUFLT": "{} {*>}{*>}{*>} {^}", "+OEUFLT": "{^} {*>}{*>}{*>} {}", "+AOEUFLT": "{} {*>}{*>}{*>} {}", "+*EUFLT": "{^} {*>}{*>}{*>} {^}{-|}", "+A*EUFLT": "{} {*>}{*>}{*>} {^}{-|}", "+O*EUFLT": "{^} {*>}{*>}{*>} {}{-|}", "+AO*EUFLT": "{} {*>}{*>}{*>} {}{-|}", "+APLT": "{} --- {^}", "+OPLT": "{^} --- {}", "+AOPLT": "{} --- {}", "+*PLT": "{^} --- {^}{-|}", "+A*PLT": "{} --- {^}{-|}", "+O*PLT": "{^} --- {}{-|}", "+AO*PLT": "{} --- {}{-|}", "+EPLT": "{^} \u2212\u2212\u2212 {^}", "+AEPLT": "{} \u2212\u2212\u2212 {^}", "+OEPLT": "{^} \u2212\u2212\u2212 {}", "+AOEPLT": "{} \u2212\u2212\u2212 {}", "+*EPLT": "{^} \u2212\u2212\u2212 {^}{-|}", "+A*EPLT": "{} \u2212\u2212\u2212 {^}{-|}", "+O*EPLT": "{^} \u2212\u2212\u2212 {}{-|}", "+AO*EPLT": "{} \u2212\u2212\u2212 {}{-|}", "+UPLT": "{^} \u2013\u2013\u2013 {^}", "+AUPLT": "{} \u2013\u2013\u2013 {^}", "+OUPLT": "{^} \u2013\u2013\u2013 {}", "+AOUPLT": "{} \u2013\u2013\u2013 {}", "+*UPLT": "{^} \u2013\u2013\u2013 {^}{-|}", "+A*UPLT": "{} \u2013\u2013\u2013 {^}{-|}", "+O*UPLT": "{^} \u2013\u2013\u2013 {}{-|}", "+AO*UPLT": "{} \u2013\u2013\u2013 {}{-|}", "+EUPLT": "{^} \u2014\u2014\u2014 {^}", "+AEUPLT": "{} \u2014\u2014\u2014 {^}", "+OEUPLT": "{^} \u2014\u2014\u2014 {}", "+AOEUPLT": "{} \u2014\u2014\u2014 {}", "+*EUPLT": "{^} \u2014\u2014\u2014 {^}{-|}", "+A*EUPLT": "{} \u2014\u2014\u2014 {^}{-|}", "+O*EUPLT": "{^} \u2014\u2014\u2014 {}{-|}", "+AO*EUPLT": "{} \u2014\u2014\u2014 {}{-|}", "+FPLT": "{^} ((( {^}", "+AFPLT": "{} ((( {^}", "+OFPLT": "{^} ((( {}", "+AOFPLT": "{} ((( {}", "+*FPLT": "{^} ((( {^}{-|}", "+A*FPLT": "{} ((( {^}{-|}", "+O*FPLT": "{^} ((( {}{-|}", "+AO*FPLT": "{} ((( {}{-|}", "+EFPLT": "{^} [[[ {^}", "+AEFPLT": "{} [[[ {^}", "+OEFPLT": "{^} [[[ {}", "+AOEFPLT": "{} [[[ {}", "+*EFPLT": "{^} [[[ {^}{-|}", "+A*EFPLT": "{} [[[ {^}{-|}", "+O*EFPLT": "{^} [[[ {}{-|}", "+AO*EFPLT": "{} [[[ {}{-|}", "+UFPLT": "{^} <<< {^}", "+AUFPLT": "{} <<< {^}", "+OUFPLT": "{^} <<< {}", "+AOUFPLT": "{} <<< {}", "+*UFPLT": "{^} <<< {^}{-|}", "+A*UFPLT": "{} <<< {^}{-|}", "+O*UFPLT": "{^} <<< {}{-|}", "+AO*UFPLT": "{} <<< {}{-|}", "+EUFPLT": "{^} {{{ {^}", "+AEUFPLT": "{} {{{ {^}", "+OEUFPLT": "{^} {{{ {}", "+AOEUFPLT": "{} {{{ {}", "+*EUFPLT": "{^} {{{ {^}{-|}", "+A*EUFPLT": "{} {{{ {^}{-|}", "+O*EUFPLT": "{^} {{{ {}{-|}", "+AO*EUFPLT": "{} {{{ {}{-|}", "+FPBLT": "{^} \u2191\u2191\u2191 {^}", "+AFPBLT": "{} \u2191\u2191\u2191 {^}", "+OFPBLT": "{^} \u2191\u2191\u2191 {}", "+AOFPBLT": "{} \u2191\u2191\u2191 {}", "+*FPBLT": "{^} \u2191\u2191\u2191 {^}{-|}", "+A*FPBLT": "{} \u2191\u2191\u2191 {^}{-|}", "+O*FPBLT": "{^} \u2191\u2191\u2191 {}{-|}", "+AO*FPBLT": "{} \u2191\u2191\u2191 {}{-|}", "+EFPBLT": "{^} \u2190\u2190\u2190 {^}", "+AEFPBLT": "{} \u2190\u2190\u2190 {^}", "+OEFPBLT": "{^} \u2190\u2190\u2190 {}", "+AOEFPBLT": "{} \u2190\u2190\u2190 {}", "+*EFPBLT": "{^} \u2190\u2190\u2190 {^}{-|}", "+A*EFPBLT": "{} \u2190\u2190\u2190 {^}{-|}", "+O*EFPBLT": "{^} \u2190\u2190\u2190 {}{-|}", "+AO*EFPBLT": "{} \u2190\u2190\u2190 {}{-|}", "+UFPBLT": "{^} \u2192\u2192\u2192 {^}", "+AUFPBLT": "{} \u2192\u2192\u2192 {^}", "+OUFPBLT": "{^} \u2192\u2192\u2192 {}", "+AOUFPBLT": "{} \u2192\u2192\u2192 {}", "+*UFPBLT": "{^} \u2192\u2192\u2192 {^}{-|}", "+A*UFPBLT": "{} \u2192\u2192\u2192 {^}{-|}", "+O*UFPBLT": "{^} \u2192\u2192\u2192 {}{-|}", "+AO*UFPBLT": "{} \u2192\u2192\u2192 {}{-|}", "+EUFPBLT": "{^} \u2193\u2193\u2193 {^}", "+AEUFPBLT": "{} \u2193\u2193\u2193 {^}", "+OEUFPBLT": "{^} \u2193\u2193\u2193 {}", "+AOEUFPBLT": "{} \u2193\u2193\u2193 {}", "+*EUFPBLT": "{^} \u2193\u2193\u2193 {^}{-|}", "+A*EUFPBLT": "{} \u2193\u2193\u2193 {^}{-|}", "+O*EUFPBLT": "{^} \u2193\u2193\u2193 {}{-|}", "+AO*EUFPBLT": "{} \u2193\u2193\u2193 {}{-|}", "+ARPBLT": "{} $$$ {^}", "+ORPBLT": "{^} $$$ {}", "+AORPBLT": "{} $$$ {}", "+*RPBLT": "{^} $$$ {^}{-|}", "+A*RPBLT": "{} $$$ {^}{-|}", "+O*RPBLT": "{^} $$$ {}{-|}", "+AO*RPBLT": "{} $$$ {}{-|}", "+ERPBLT": "{^} \u00a5\u00a5\u00a5 {^}", "+AERPBLT": "{} \u00a5\u00a5\u00a5 {^}", "+OERPBLT": "{^} \u00a5\u00a5\u00a5 {}", "+AOERPBLT": "{} \u00a5\u00a5\u00a5 {}", "+*ERPBLT": "{^} \u00a5\u00a5\u00a5 {^}{-|}", "+A*ERPBLT": "{} \u00a5\u00a5\u00a5 {^}{-|}", "+O*ERPBLT": "{^} \u00a5\u00a5\u00a5 {}{-|}", "+AO*ERPBLT": "{} \u00a5\u00a5\u00a5 {}{-|}", "+URPBLT": "{^} \u20ac\u20ac\u20ac {^}", "+AURPBLT": "{} \u20ac\u20ac\u20ac {^}", "+OURPBLT": "{^} \u20ac\u20ac\u20ac {}", "+AOURPBLT": "{} \u20ac\u20ac\u20ac {}", "+*URPBLT": "{^} \u20ac\u20ac\u20ac {^}{-|}", "+A*URPBLT": "{} \u20ac\u20ac\u20ac {^}{-|}", "+O*URPBLT": "{^} \u20ac\u20ac\u20ac {}{-|}", "+AO*URPBLT": "{} \u20ac\u20ac\u20ac {}{-|}", "+EURPBLT": "{^} \u00a3\u00a3\u00a3 {^}", "+AEURPBLT": "{} \u00a3\u00a3\u00a3 {^}", "+OEURPBLT": "{^} \u00a3\u00a3\u00a3 {}", "+AOEURPBLT": "{} \u00a3\u00a3\u00a3 {}", "+*EURPBLT": "{^} \u00a3\u00a3\u00a3 {^}{-|}", "+A*EURPBLT": "{} \u00a3\u00a3\u00a3 {^}{-|}", "+O*EURPBLT": "{^} \u00a3\u00a3\u00a3 {}{-|}", "+AO*EURPBLT": "{} \u00a3\u00a3\u00a3 {}{-|}", "+GT": "{^} +++ {^}", "+AGT": "{} +++ {^}", "+OGT": "{^} +++ {}", "+AOGT": "{} +++ {}", "+*GT": "{^} +++ {^}{-|}", "+A*GT": "{} +++ {^}{-|}", "+O*GT": "{^} +++ {}{-|}", "+AO*GT": "{} +++ {}{-|}", "+EGT": "{^} \u2211\u2211\u2211 {^}", "+AEGT": "{} \u2211\u2211\u2211 {^}", "+OEGT": "{^} \u2211\u2211\u2211 {}", "+AOEGT": "{} \u2211\u2211\u2211 {}", "+*EGT": "{^} \u2211\u2211\u2211 {^}{-|}", "+A*EGT": "{} \u2211\u2211\u2211 {^}{-|}", "+O*EGT": "{^} \u2211\u2211\u2211 {}{-|}", "+AO*EGT": "{} \u2211\u2211\u2211 {}{-|}", "+UGT": "{^} \u00b6\u00b6\u00b6 {^}", "+AUGT": "{} \u00b6\u00b6\u00b6 {^}", "+OUGT": "{^} \u00b6\u00b6\u00b6 {}", "+AOUGT": "{} \u00b6\u00b6\u00b6 {}", "+*UGT": "{^} \u00b6\u00b6\u00b6 {^}{-|}", "+A*UGT": "{} \u00b6\u00b6\u00b6 {^}{-|}", "+O*UGT": "{^} \u00b6\u00b6\u00b6 {}{-|}", "+AO*UGT": "{} \u00b6\u00b6\u00b6 {}{-|}", "+EUGT": "{^} \u00b1\u00b1\u00b1 {^}", "+AEUGT": "{} \u00b1\u00b1\u00b1 {^}", "+OEUGT": "{^} \u00b1\u00b1\u00b1 {}", "+AOEUGT": "{} \u00b1\u00b1\u00b1 {}", "+*EUGT": "{^} \u00b1\u00b1\u00b1 {^}{-|}", "+A*EUGT": "{} \u00b1\u00b1\u00b1 {^}{-|}", "+O*EUGT": "{^} \u00b1\u00b1\u00b1 {}{-|}", "+AO*EUGT": "{} \u00b1\u00b1\u00b1 {}{-|}", "+FGT": "{^} {#Tab}{#Tab}{#Tab} {^}", "+AFGT": "{} {#Tab}{#Tab}{#Tab} {^}", "+OFGT": "{^} {#Tab}{#Tab}{#Tab} {}", "+AOFGT": "{} {#Tab}{#Tab}{#Tab} {}", "+*FGT": "{^} {#Tab}{#Tab}{#Tab} {^}{-|}", "+A*FGT": "{} {#Tab}{#Tab}{#Tab} {^}{-|}", "+O*FGT": "{^} {#Tab}{#Tab}{#Tab} {}{-|}", "+AO*FGT": "{} {#Tab}{#Tab}{#Tab} {}{-|}", "+EFGT": "{^} {#Backspace}{#Backspace}{#Backspace} {^}", "+AEFGT": "{} {#Backspace}{#Backspace}{#Backspace} {^}", "+OEFGT": "{^} {#Backspace}{#Backspace}{#Backspace} {}", "+AOEFGT": "{} {#Backspace}{#Backspace}{#Backspace} {}", "+*EFGT": "{^} {#Backspace}{#Backspace}{#Backspace} {^}{-|}", "+A*EFGT": "{} {#Backspace}{#Backspace}{#Backspace} {^}{-|}", "+O*EFGT": "{^} {#Backspace}{#Backspace}{#Backspace} {}{-|}", "+AO*EFGT": "{} {#Backspace}{#Backspace}{#Backspace} {}{-|}", "+UFGT": "{^} {#Delete}{#Delete}{#Delete} {^}", "+AUFGT": "{} {#Delete}{#Delete}{#Delete} {^}", "+OUFGT": "{^} {#Delete}{#Delete}{#Delete} {}", "+AOUFGT": "{} {#Delete}{#Delete}{#Delete} {}", "+*UFGT": "{^} {#Delete}{#Delete}{#Delete} {^}{-|}", "+A*UFGT": "{} {#Delete}{#Delete}{#Delete} {^}{-|}", "+O*UFGT": "{^} {#Delete}{#Delete}{#Delete} {}{-|}", "+AO*UFGT": "{} {#Delete}{#Delete}{#Delete} {}{-|}", "+EUFGT": "{^} {#Escape}{#Escape}{#Escape} {^}", "+AEUFGT": "{} {#Escape}{#Escape}{#Escape} {^}", "+OEUFGT": "{^} {#Escape}{#Escape}{#Escape} {}", "+AOEUFGT": "{} {#Escape}{#Escape}{#Escape} {}", "+*EUFGT": "{^} {#Escape}{#Escape}{#Escape} {^}{-|}", "+A*EUFGT": "{} {#Escape}{#Escape}{#Escape} {^}{-|}", "+O*EUFGT": "{^} {#Escape}{#Escape}{#Escape} {}{-|}", "+AO*EUFGT": "{} {#Escape}{#Escape}{#Escape} {}{-|}", "+ARPGT": "{} ^^^ {^}", "+ORPGT": "{^} ^^^ {}", "+AORPGT": "{} ^^^ {}", "+*RPGT": "{^} ^^^ {^}{-|}", "+A*RPGT": "{} ^^^ {^}{-|}", "+O*RPGT": "{^} ^^^ {}{-|}", "+AO*RPGT": "{} ^^^ {}{-|}", "+ERPGT": "{^} \u00ab\u00ab\u00ab {^}", "+AERPGT": "{} \u00ab\u00ab\u00ab {^}", "+OERPGT": "{^} \u00ab\u00ab\u00ab {}", "+AOERPGT": "{} \u00ab\u00ab\u00ab {}", "+*ERPGT": "{^} \u00ab\u00ab\u00ab {^}{-|}", "+A*ERPGT": "{} \u00ab\u00ab\u00ab {^}{-|}", "+O*ERPGT": "{^} \u00ab\u00ab\u00ab {}{-|}", "+AO*ERPGT": "{} \u00ab\u00ab\u00ab {}{-|}", "+URPGT": "{^} \u00bb\u00bb\u00bb {^}", "+AURPGT": "{} \u00bb\u00bb\u00bb {^}", "+OURPGT": "{^} \u00bb\u00bb\u00bb {}", "+AOURPGT": "{} \u00bb\u00bb\u00bb {}", "+*URPGT": "{^} \u00bb\u00bb\u00bb {^}{-|}", "+A*URPGT": "{} \u00bb\u00bb\u00bb {^}{-|}", "+O*URPGT": "{^} \u00bb\u00bb\u00bb {}{-|}", "+AO*URPGT": "{} \u00bb\u00bb\u00bb {}{-|}", "+EURPGT": "{^} \u00b0\u00b0\u00b0 {^}", "+AEURPGT": "{} \u00b0\u00b0\u00b0 {^}", "+OEURPGT": "{^} \u00b0\u00b0\u00b0 {}", "+AOEURPGT": "{} \u00b0\u00b0\u00b0 {}", "+*EURPGT": "{^} \u00b0\u00b0\u00b0 {^}{-|}", "+A*EURPGT": "{} \u00b0\u00b0\u00b0 {^}{-|}", "+O*EURPGT": "{^} \u00b0\u00b0\u00b0 {}{-|}", "+AO*EURPGT": "{} \u00b0\u00b0\u00b0 {}{-|}", "+BGT": "{^} ___ {^}", "+ABGT": "{} ___ {^}", "+OBGT": "{^} ___ {}", "+AOBGT": "{} ___ {}", "+*BGT": "{^} ___ {^}{-|}", "+A*BGT": "{} ___ {^}{-|}", "+O*BGT": "{^} ___ {}{-|}", "+AO*BGT": "{} ___ {}{-|}", "+EBGT": "{^} \u2264\u2264\u2264 {^}", "+AEBGT": "{} \u2264\u2264\u2264 {^}", "+OEBGT": "{^} \u2264\u2264\u2264 {}", "+AOEBGT": "{} \u2264\u2264\u2264 {}", "+*EBGT": "{^} \u2264\u2264\u2264 {^}{-|}", "+A*EBGT": "{} \u2264\u2264\u2264 {^}{-|}", "+O*EBGT": "{^} \u2264\u2264\u2264 {}{-|}", "+AO*EBGT": "{} \u2264\u2264\u2264 {}{-|}", "+UBGT": "{^} \u2265\u2265\u2265 {^}", "+AUBGT": "{} \u2265\u2265\u2265 {^}", "+OUBGT": "{^} \u2265\u2265\u2265 {}", "+AOUBGT": "{} \u2265\u2265\u2265 {}", "+*UBGT": "{^} \u2265\u2265\u2265 {^}{-|}", "+A*UBGT": "{} \u2265\u2265\u2265 {^}{-|}", "+O*UBGT": "{^} \u2265\u2265\u2265 {}{-|}", "+AO*UBGT": "{} \u2265\u2265\u2265 {}{-|}", "+EUBGT": "{^} \u00b5\u00b5\u00b5 {^}", "+AEUBGT": "{} \u00b5\u00b5\u00b5 {^}", "+OEUBGT": "{^} \u00b5\u00b5\u00b5 {}", "+AOEUBGT": "{} \u00b5\u00b5\u00b5 {}", "+*EUBGT": "{^} \u00b5\u00b5\u00b5 {^}{-|}", "+A*EUBGT": "{} \u00b5\u00b5\u00b5 {^}{-|}", "+O*EUBGT": "{^} \u00b5\u00b5\u00b5 {}{-|}", "+AO*EUBGT": "{} \u00b5\u00b5\u00b5 {}{-|}", "+FBGT": "{^} &&& {^}", "+AFBGT": "{} &&& {^}", "+OFBGT": "{^} &&& {}", "+AOFBGT": "{} &&& {}", "+*FBGT": "{^} &&& {^}{-|}", "+A*FBGT": "{} &&& {^}{-|}", "+O*FBGT": "{^} &&& {}{-|}", "+AO*FBGT": "{} &&& {}{-|}", "+EFBGT": "{^} \u2229\u2229\u2229 {^}", "+AEFBGT": "{} \u2229\u2229\u2229 {^}", "+OEFBGT": "{^} \u2229\u2229\u2229 {}", "+AOEFBGT": "{} \u2229\u2229\u2229 {}", "+*EFBGT": "{^} \u2229\u2229\u2229 {^}{-|}", "+A*EFBGT": "{} \u2229\u2229\u2229 {^}{-|}", "+O*EFBGT": "{^} \u2229\u2229\u2229 {}{-|}", "+AO*EFBGT": "{} \u2229\u2229\u2229 {}{-|}", "+UFBGT": "{^} \u2227\u2227\u2227 {^}", "+AUFBGT": "{} \u2227\u2227\u2227 {^}", "+OUFBGT": "{^} \u2227\u2227\u2227 {}", "+AOUFBGT": "{} \u2227\u2227\u2227 {}", "+*UFBGT": "{^} \u2227\u2227\u2227 {^}{-|}", "+A*UFBGT": "{} \u2227\u2227\u2227 {^}{-|}", "+O*UFBGT": "{^} \u2227\u2227\u2227 {}{-|}", "+AO*UFBGT": "{} \u2227\u2227\u2227 {}{-|}", "+EUFBGT": "{^} \u2208\u2208\u2208 {^}", "+AEUFBGT": "{} \u2208\u2208\u2208 {^}", "+OEUFBGT": "{^} \u2208\u2208\u2208 {}", "+AOEUFBGT": "{} \u2208\u2208\u2208 {}", "+*EUFBGT": "{^} \u2208\u2208\u2208 {^}{-|}", "+A*EUFBGT": "{} \u2208\u2208\u2208 {^}{-|}", "+O*EUFBGT": "{^} \u2208\u2208\u2208 {}{-|}", "+AO*EUFBGT": "{} \u2208\u2208\u2208 {}{-|}", "+ARBGT": "{} ))) {^}", "+ORBGT": "{^} ))) {}", "+AORBGT": "{} ))) {}", "+*RBGT": "{^} ))) {^}{-|}", "+A*RBGT": "{} ))) {^}{-|}", "+O*RBGT": "{^} ))) {}{-|}", "+AO*RBGT": "{} ))) {}{-|}", "+ERBGT": "{^} ]]] {^}", "+AERBGT": "{} ]]] {^}", "+OERBGT": "{^} ]]] {}", "+AOERBGT": "{} ]]] {}", "+*ERBGT": "{^} ]]] {^}{-|}", "+A*ERBGT": "{} ]]] {^}{-|}", "+O*ERBGT": "{^} ]]] {}{-|}", "+AO*ERBGT": "{} ]]] {}{-|}", "+URBGT": "{^} >>> {^}", "+AURBGT": "{} >>> {^}", "+OURBGT": "{^} >>> {}", "+AOURBGT": "{} >>> {}", "+*URBGT": "{^} >>> {^}{-|}", "+A*URBGT": "{} >>> {^}{-|}", "+O*URBGT": "{^} >>> {}{-|}", "+AO*URBGT": "{} >>> {}{-|}", "+EURBGT": "{^} }}} {^}", "+AEURBGT": "{} }}} {^}", "+OEURBGT": "{^} }}} {}", "+AOEURBGT": "{} }}} {}", "+*EURBGT": "{^} }}} {^}{-|}", "+A*EURBGT": "{} }}} {^}{-|}", "+O*EURBGT": "{^} }}} {}{-|}", "+AO*EURBGT": "{} }}} {}{-|}", "+FRBGT": "{^} {#AudioPlay}{#AudioPlay}{#AudioPlay} {^}", "+AFRBGT": "{} {#AudioPlay}{#AudioPlay}{#AudioPlay} {^}", "+OFRBGT": "{^} {#AudioPlay}{#AudioPlay}{#AudioPlay} {}", "+AOFRBGT": "{} {#AudioPlay}{#AudioPlay}{#AudioPlay} {}", "+*FRBGT": "{^} {#AudioPlay}{#AudioPlay}{#AudioPlay} {^}{-|}", "+A*FRBGT": "{} {#AudioPlay}{#AudioPlay}{#AudioPlay} {^}{-|}", "+O*FRBGT": "{^} {#AudioPlay}{#AudioPlay}{#AudioPlay} {}{-|}", "+AO*FRBGT": "{} {#AudioPlay}{#AudioPlay}{#AudioPlay} {}{-|}", "+EFRBGT": "{^} {#AudioPrev}{#AudioPrev}{#AudioPrev} {^}", "+AEFRBGT": "{} {#AudioPrev}{#AudioPrev}{#AudioPrev} {^}", "+OEFRBGT": "{^} {#AudioPrev}{#AudioPrev}{#AudioPrev} {}", "+AOEFRBGT": "{} {#AudioPrev}{#AudioPrev}{#AudioPrev} {}", "+*EFRBGT": "{^} {#AudioPrev}{#AudioPrev}{#AudioPrev} {^}{-|}", "+A*EFRBGT": "{} {#AudioPrev}{#AudioPrev}{#AudioPrev} {^}{-|}", "+O*EFRBGT": "{^} {#AudioPrev}{#AudioPrev}{#AudioPrev} {}{-|}", "+AO*EFRBGT": "{} {#AudioPrev}{#AudioPrev}{#AudioPrev} {}{-|}", "+UFRBGT": "{^} {#AudioNext}{#AudioNext}{#AudioNext} {^}", "+AUFRBGT": "{} {#AudioNext}{#AudioNext}{#AudioNext} {^}", "+OUFRBGT": "{^} {#AudioNext}{#AudioNext}{#AudioNext} {}", "+AOUFRBGT": "{} {#AudioNext}{#AudioNext}{#AudioNext} {}", "+*UFRBGT": "{^} {#AudioNext}{#AudioNext}{#AudioNext} {^}{-|}", "+A*UFRBGT": "{} {#AudioNext}{#AudioNext}{#AudioNext} {^}{-|}", "+O*UFRBGT": "{^} {#AudioNext}{#AudioNext}{#AudioNext} {}{-|}", "+AO*UFRBGT": "{} {#AudioNext}{#AudioNext}{#AudioNext} {}{-|}", "+EUFRBGT": "{^} {#AudioStop}{#AudioStop}{#AudioStop} {^}", "+AEUFRBGT": "{} {#AudioStop}{#AudioStop}{#AudioStop} {^}", "+OEUFRBGT": "{^} {#AudioStop}{#AudioStop}{#AudioStop} {}", "+AOEUFRBGT": "{} {#AudioStop}{#AudioStop}{#AudioStop} {}", "+*EUFRBGT": "{^} {#AudioStop}{#AudioStop}{#AudioStop} {^}{-|}", "+A*EUFRBGT": "{} {#AudioStop}{#AudioStop}{#AudioStop} {^}{-|}", "+O*EUFRBGT": "{^} {#AudioStop}{#AudioStop}{#AudioStop} {}{-|}", "+AO*EUFRBGT": "{} {#AudioStop}{#AudioStop}{#AudioStop} {}{-|}", "+FPBGT": "{^} ~~~ {^}", "+AFPBGT": "{} ~~~ {^}", "+OFPBGT": "{^} ~~~ {}", "+AOFPBGT": "{} ~~~ {}", "+*FPBGT": "{^} ~~~ {^}{-|}", "+A*FPBGT": "{} ~~~ {^}{-|}", "+O*FPBGT": "{^} ~~~ {}{-|}", "+AO*FPBGT": "{} ~~~ {}{-|}", "+EFPBGT": "{^} \u2286\u2286\u2286 {^}", "+AEFPBGT": "{} \u2286\u2286\u2286 {^}", "+OEFPBGT": "{^} \u2286\u2286\u2286 {}", "+AOEFPBGT": "{} \u2286\u2286\u2286 {}", "+*EFPBGT": "{^} \u2286\u2286\u2286 {^}{-|}", "+A*EFPBGT": "{} \u2286\u2286\u2286 {^}{-|}", "+O*EFPBGT": "{^} \u2286\u2286\u2286 {}{-|}", "+AO*EFPBGT": "{} \u2286\u2286\u2286 {}{-|}", "+UFPBGT": "{^} \u2287\u2287\u2287 {^}", "+AUFPBGT": "{} \u2287\u2287\u2287 {^}", "+OUFPBGT": "{^} \u2287\u2287\u2287 {}", "+AOUFPBGT": "{} \u2287\u2287\u2287 {}", "+*UFPBGT": "{^} \u2287\u2287\u2287 {^}{-|}", "+A*UFPBGT": "{} \u2287\u2287\u2287 {^}{-|}", "+O*UFPBGT": "{^} \u2287\u2287\u2287 {}{-|}", "+AO*UFPBGT": "{} \u2287\u2287\u2287 {}{-|}", "+EUFPBGT": "{^} \u02dc\u02dc\u02dc {^}", "+AEUFPBGT": "{} \u02dc\u02dc\u02dc {^}", "+OEUFPBGT": "{^} \u02dc\u02dc\u02dc {}", "+AOEUFPBGT": "{} \u02dc\u02dc\u02dc {}", "+*EUFPBGT": "{^} \u02dc\u02dc\u02dc {^}{-|}", "+A*EUFPBGT": "{} \u02dc\u02dc\u02dc {^}{-|}", "+O*EUFPBGT": "{^} \u02dc\u02dc\u02dc {}{-|}", "+AO*EUFPBGT": "{} \u02dc\u02dc\u02dc {}{-|}", "+ARPBGT": "{} {#Up}{#Up}{#Up} {^}", "+ORPBGT": "{^} {#Up}{#Up}{#Up} {}", "+AORPBGT": "{} {#Up}{#Up}{#Up} {}", "+*RPBGT": "{^} {#Up}{#Up}{#Up} {^}{-|}", "+A*RPBGT": "{} {#Up}{#Up}{#Up} {^}{-|}", "+O*RPBGT": "{^} {#Up}{#Up}{#Up} {}{-|}", "+AO*RPBGT": "{} {#Up}{#Up}{#Up} {}{-|}", "+ERPBGT": "{^} {#Left}{#Left}{#Left} {^}", "+AERPBGT": "{} {#Left}{#Left}{#Left} {^}", "+OERPBGT": "{^} {#Left}{#Left}{#Left} {}", "+AOERPBGT": "{} {#Left}{#Left}{#Left} {}", "+*ERPBGT": "{^} {#Left}{#Left}{#Left} {^}{-|}", "+A*ERPBGT": "{} {#Left}{#Left}{#Left} {^}{-|}", "+O*ERPBGT": "{^} {#Left}{#Left}{#Left} {}{-|}", "+AO*ERPBGT": "{} {#Left}{#Left}{#Left} {}{-|}", "+URPBGT": "{^} {#Right}{#Right}{#Right} {^}", "+AURPBGT": "{} {#Right}{#Right}{#Right} {^}", "+OURPBGT": "{^} {#Right}{#Right}{#Right} {}", "+AOURPBGT": "{} {#Right}{#Right}{#Right} {}", "+*URPBGT": "{^} {#Right}{#Right}{#Right} {^}{-|}", "+A*URPBGT": "{} {#Right}{#Right}{#Right} {^}{-|}", "+O*URPBGT": "{^} {#Right}{#Right}{#Right} {}{-|}", "+AO*URPBGT": "{} {#Right}{#Right}{#Right} {}{-|}", "+EURPBGT": "{^} {#Down}{#Down}{#Down} {^}", "+AEURPBGT": "{} {#Down}{#Down}{#Down} {^}", "+OEURPBGT": "{^} {#Down}{#Down}{#Down} {}", "+AOEURPBGT": "{} {#Down}{#Down}{#Down} {}", "+*EURPBGT": "{^} {#Down}{#Down}{#Down} {^}{-|}", "+A*EURPBGT": "{} {#Down}{#Down}{#Down} {^}{-|}", "+O*EURPBGT": "{^} {#Down}{#Down}{#Down} {}{-|}", "+AO*EURPBGT": "{} {#Down}{#Down}{#Down} {}{-|}", "+FRPBGT": "{^} {#Page_Up}{#Page_Up}{#Page_Up} {^}", "+AFRPBGT": "{} {#Page_Up}{#Page_Up}{#Page_Up} {^}", "+OFRPBGT": "{^} {#Page_Up}{#Page_Up}{#Page_Up} {}", "+AOFRPBGT": "{} {#Page_Up}{#Page_Up}{#Page_Up} {}", "+*FRPBGT": "{^} {#Page_Up}{#Page_Up}{#Page_Up} {^}{-|}", "+A*FRPBGT": "{} {#Page_Up}{#Page_Up}{#Page_Up} {^}{-|}", "+O*FRPBGT": "{^} {#Page_Up}{#Page_Up}{#Page_Up} {}{-|}", "+AO*FRPBGT": "{} {#Page_Up}{#Page_Up}{#Page_Up} {}{-|}", "+EFRPBGT": "{^} {#Home}{#Home}{#Home} {^}", "+AEFRPBGT": "{} {#Home}{#Home}{#Home} {^}", "+OEFRPBGT": "{^} {#Home}{#Home}{#Home} {}", "+AOEFRPBGT": "{} {#Home}{#Home}{#Home} {}", "+*EFRPBGT": "{^} {#Home}{#Home}{#Home} {^}{-|}", "+A*EFRPBGT": "{} {#Home}{#Home}{#Home} {^}{-|}", "+O*EFRPBGT": "{^} {#Home}{#Home}{#Home} {}{-|}", "+AO*EFRPBGT": "{} {#Home}{#Home}{#Home} {}{-|}", "+UFRPBGT": "{^} {#End}{#End}{#End} {^}", "+AUFRPBGT": "{} {#End}{#End}{#End} {^}", "+OUFRPBGT": "{^} {#End}{#End}{#End} {}", "+AOUFRPBGT": "{} {#End}{#End}{#End} {}", "+*UFRPBGT": "{^} {#End}{#End}{#End} {^}{-|}", "+A*UFRPBGT": "{} {#End}{#End}{#End} {^}{-|}", "+O*UFRPBGT": "{^} {#End}{#End}{#End} {}{-|}", "+AO*UFRPBGT": "{} {#End}{#End}{#End} {}{-|}", "+EUFRPBGT": "{^} {#Page_Down}{#Page_Down}{#Page_Down} {^}", "+AEUFRPBGT": "{} {#Page_Down}{#Page_Down}{#Page_Down} {^}", "+OEUFRPBGT": "{^} {#Page_Down}{#Page_Down}{#Page_Down} {}", "+AOEUFRPBGT": "{} {#Page_Down}{#Page_Down}{#Page_Down} {}", "+*EUFRPBGT": "{^} {#Page_Down}{#Page_Down}{#Page_Down} {^}{-|}", "+A*EUFRPBGT": "{} {#Page_Down}{#Page_Down}{#Page_Down} {^}{-|}", "+O*EUFRPBGT": "{^} {#Page_Down}{#Page_Down}{#Page_Down} {}{-|}", "+AO*EUFRPBGT": "{} {#Page_Down}{#Page_Down}{#Page_Down} {}{-|}", "+LGT": "{^} ::: {^}", "+ALGT": "{} ::: {^}", "+OLGT": "{^} ::: {}", "+AOLGT": "{} ::: {}", "+*LGT": "{^} ::: {^}{-|}", "+A*LGT": "{} ::: {^}{-|}", "+O*LGT": "{^} ::: {}{-|}", "+AO*LGT": "{} ::: {}{-|}", "+ELGT": "{^} \u220b\u220b\u220b {^}", "+AELGT": "{} \u220b\u220b\u220b {^}", "+OELGT": "{^} \u220b\u220b\u220b {}", "+AOELGT": "{} \u220b\u220b\u220b {}", "+*ELGT": "{^} \u220b\u220b\u220b {^}{-|}", "+A*ELGT": "{} \u220b\u220b\u220b {^}{-|}", "+O*ELGT": "{^} \u220b\u220b\u220b {}{-|}", "+AO*ELGT": "{} \u220b\u220b\u220b {}{-|}", "+ULGT": "{^} \u2235\u2235\u2235 {^}", "+AULGT": "{} \u2235\u2235\u2235 {^}", "+OULGT": "{^} \u2235\u2235\u2235 {}", "+AOULGT": "{} \u2235\u2235\u2235 {}", "+*ULGT": "{^} \u2235\u2235\u2235 {^}{-|}", "+A*ULGT": "{} \u2235\u2235\u2235 {^}{-|}", "+O*ULGT": "{^} \u2235\u2235\u2235 {}{-|}", "+AO*ULGT": "{} \u2235\u2235\u2235 {}{-|}", "+EULGT": "{^} \u2234\u2234\u2234 {^}", "+AEULGT": "{} \u2234\u2234\u2234 {^}", "+OEULGT": "{^} \u2234\u2234\u2234 {}", "+AOEULGT": "{} \u2234\u2234\u2234 {}", "+*EULGT": "{^} \u2234\u2234\u2234 {^}{-|}", "+A*EULGT": "{} \u2234\u2234\u2234 {^}{-|}", "+O*EULGT": "{^} \u2234\u2234\u2234 {}{-|}", "+AO*EULGT": "{} \u2234\u2234\u2234 {}{-|}", "+FRLGT": "{^} ### {^}", "+AFRLGT": "{} ### {^}", "+OFRLGT": "{^} ### {}", "+AOFRLGT": "{} ### {}", "+*FRLGT": "{^} ### {^}{-|}", "+A*FRLGT": "{} ### {^}{-|}", "+O*FRLGT": "{^} ### {}{-|}", "+AO*FRLGT": "{} ### {}{-|}", "+EFRLGT": "{^} \u00a9\u00a9\u00a9 {^}", "+AEFRLGT": "{} \u00a9\u00a9\u00a9 {^}", "+OEFRLGT": "{^} \u00a9\u00a9\u00a9 {}", "+AOEFRLGT": "{} \u00a9\u00a9\u00a9 {}", "+*EFRLGT": "{^} \u00a9\u00a9\u00a9 {^}{-|}", "+A*EFRLGT": "{} \u00a9\u00a9\u00a9 {^}{-|}", "+O*EFRLGT": "{^} \u00a9\u00a9\u00a9 {}{-|}", "+AO*EFRLGT": "{} \u00a9\u00a9\u00a9 {}{-|}", "+UFRLGT": "{^} \u00ae\u00ae\u00ae {^}", "+AUFRLGT": "{} \u00ae\u00ae\u00ae {^}", "+OUFRLGT": "{^} \u00ae\u00ae\u00ae {}", "+AOUFRLGT": "{} \u00ae\u00ae\u00ae {}", "+*UFRLGT": "{^} \u00ae\u00ae\u00ae {^}{-|}", "+A*UFRLGT": "{} \u00ae\u00ae\u00ae {^}{-|}", "+O*UFRLGT": "{^} \u00ae\u00ae\u00ae {}{-|}", "+AO*UFRLGT": "{} \u00ae\u00ae\u00ae {}{-|}", "+EUFRLGT": "{^} \u2122\u2122\u2122 {^}", "+AEUFRLGT": "{} \u2122\u2122\u2122 {^}", "+OEUFRLGT": "{^} \u2122\u2122\u2122 {}", "+AOEUFRLGT": "{} \u2122\u2122\u2122 {}", "+*EUFRLGT": "{^} \u2122\u2122\u2122 {^}{-|}", "+A*EUFRLGT": "{} \u2122\u2122\u2122 {^}{-|}", "+O*EUFRLGT": "{^} \u2122\u2122\u2122 {}{-|}", "+AO*EUFRLGT": "{} \u2122\u2122\u2122 {}{-|}", "+APBLGT": "{} === {^}", "+OPBLGT": "{^} === {}", "+AOPBLGT": "{} === {}", "+*PBLGT": "{^} === {^}{-|}", "+A*PBLGT": "{} === {^}{-|}", "+O*PBLGT": "{^} === {}{-|}", "+AO*PBLGT": "{} === {}{-|}", "+EPBLGT": "{^} \u2261\u2261\u2261 {^}", "+AEPBLGT": "{} \u2261\u2261\u2261 {^}", "+OEPBLGT": "{^} \u2261\u2261\u2261 {}", "+AOEPBLGT": "{} \u2261\u2261\u2261 {}", "+*EPBLGT": "{^} \u2261\u2261\u2261 {^}{-|}", "+A*EPBLGT": "{} \u2261\u2261\u2261 {^}{-|}", "+O*EPBLGT": "{^} \u2261\u2261\u2261 {}{-|}", "+AO*EPBLGT": "{} \u2261\u2261\u2261 {}{-|}", "+UPBLGT": "{^} \u2248\u2248\u2248 {^}", "+AUPBLGT": "{} \u2248\u2248\u2248 {^}", "+OUPBLGT": "{^} \u2248\u2248\u2248 {}", "+AOUPBLGT": "{} \u2248\u2248\u2248 {}", "+*UPBLGT": "{^} \u2248\u2248\u2248 {^}{-|}", "+A*UPBLGT": "{} \u2248\u2248\u2248 {^}{-|}", "+O*UPBLGT": "{^} \u2248\u2248\u2248 {}{-|}", "+AO*UPBLGT": "{} \u2248\u2248\u2248 {}{-|}", "+EUPBLGT": "{^} \u2260\u2260\u2260 {^}", "+AEUPBLGT": "{} \u2260\u2260\u2260 {^}", "+OEUPBLGT": "{^} \u2260\u2260\u2260 {}", "+AOEUPBLGT": "{} \u2260\u2260\u2260 {}", "+*EUPBLGT": "{^} \u2260\u2260\u2260 {^}{-|}", "+A*EUPBLGT": "{} \u2260\u2260\u2260 {^}{-|}", "+O*EUPBLGT": "{^} \u2260\u2260\u2260 {}{-|}", "+AO*EUPBLGT": "{} \u2260\u2260\u2260 {}{-|}", "+FRPBLGT": "{^} @@@ {^}", "+AFRPBLGT": "{} @@@ {^}", "+OFRPBLGT": "{^} @@@ {}", "+AOFRPBLGT": "{} @@@ {}", "+*FRPBLGT": "{^} @@@ {^}{-|}", "+A*FRPBLGT": "{} @@@ {^}{-|}", "+O*FRPBLGT": "{^} @@@ {}{-|}", "+AO*FRPBLGT": "{} @@@ {}{-|}", "+EFRPBLGT": "{^} \u2295\u2295\u2295 {^}", "+AEFRPBLGT": "{} \u2295\u2295\u2295 {^}", "+OEFRPBLGT": "{^} \u2295\u2295\u2295 {}", "+AOEFRPBLGT": "{} \u2295\u2295\u2295 {}", "+*EFRPBLGT": "{^} \u2295\u2295\u2295 {^}{-|}", "+A*EFRPBLGT": "{} \u2295\u2295\u2295 {^}{-|}", "+O*EFRPBLGT": "{^} \u2295\u2295\u2295 {}{-|}", "+AO*EFRPBLGT": "{} \u2295\u2295\u2295 {}{-|}", "+UFRPBLGT": "{^} \u2297\u2297\u2297 {^}", "+AUFRPBLGT": "{} \u2297\u2297\u2297 {^}", "+OUFRPBLGT": "{^} \u2297\u2297\u2297 {}", "+AOUFRPBLGT": "{} \u2297\u2297\u2297 {}", "+*UFRPBLGT": "{^} \u2297\u2297\u2297 {^}{-|}", "+A*UFRPBLGT": "{} \u2297\u2297\u2297 {^}{-|}", "+O*UFRPBLGT": "{^} \u2297\u2297\u2297 {}{-|}", "+AO*UFRPBLGT": "{} \u2297\u2297\u2297 {}{-|}", "+EUFRPBLGT": "{^} \u2205\u2205\u2205 {^}", "+AEUFRPBLGT": "{} \u2205\u2205\u2205 {^}", "+OEUFRPBLGT": "{^} \u2205\u2205\u2205 {}", "+AOEUFRPBLGT": "{} \u2205\u2205\u2205 {}", "+*EUFRPBLGT": "{^} \u2205\u2205\u2205 {^}{-|}", "+A*EUFRPBLGT": "{} \u2205\u2205\u2205 {^}{-|}", "+O*EUFRPBLGT": "{^} \u2205\u2205\u2205 {}{-|}", "+AO*EUFRPBLGT": "{} \u2205\u2205\u2205 {}{-|}", "+AS": "{} {^}", "+OS": "{^} {}", "+AOS": "{} {}", "+*S": "{^} {^}{-|}", "+A*S": "{} {^}{-|}", "+O*S": "{^} {}{-|}", "+AO*S": "{} {}{-|}", "+ES": "{*!}{*!}", "+AES": "{}{*!}{*!}", "+OES": "{*!}{*!}{}", "+AOES": "{}{*!}{*!}{}", "+*ES": "{*!}{*!}{-|}", "+A*ES": "{}{*!}{*!}{-|}", "+O*ES": "{*!}{*!}{}{-|}", "+AO*ES": "{}{*!}{*!}{}{-|}", "+US": "{*?}{*?}", "+AUS": "{}{*?}{*?}", "+OUS": "{*?}{*?}{}", "+AOUS": "{}{*?}{*?}{}", "+*US": "{*?}{*?}{-|}", "+A*US": "{}{*?}{*?}{-|}", "+O*US": "{*?}{*?}{}{-|}", "+AO*US": "{}{*?}{*?}{}{-|}", "+EUS": "{^} {#Space}{#Space} {^}", "+AEUS": "{} {#Space}{#Space} {^}", "+OEUS": "{^} {#Space}{#Space} {}", "+AOEUS": "{} {#Space}{#Space} {}", "+*EUS": "{^} {#Space}{#Space} {^}{-|}", "+A*EUS": "{} {#Space}{#Space} {^}{-|}", "+O*EUS": "{^} {#Space}{#Space} {}{-|}", "+AO*EUS": "{} {#Space}{#Space} {}{-|}", "+FS": "{^} '' {^}", "+AFS": "{} '' {^}", "+OFS": "{^} '' {}", "+AOFS": "{} '' {}", "+*FS": "{^} '' {^}{-|}", "+A*FS": "{} '' {^}{-|}", "+O*FS": "{^} '' {}{-|}", "+AO*FS": "{} '' {}{-|}", "+EFS": "{^} \u2018\u2018 {^}", "+AEFS": "{} \u2018\u2018 {^}", "+OEFS": "{^} \u2018\u2018 {}", "+AOEFS": "{} \u2018\u2018 {}", "+*EFS": "{^} \u2018\u2018 {^}{-|}", "+A*EFS": "{} \u2018\u2018 {^}{-|}", "+O*EFS": "{^} \u2018\u2018 {}{-|}", "+AO*EFS": "{} \u2018\u2018 {}{-|}", "+UFS": "{^} \u2019\u2019 {^}", "+AUFS": "{} \u2019\u2019 {^}", "+OUFS": "{^} \u2019\u2019 {}", "+AOUFS": "{} \u2019\u2019 {}", "+*UFS": "{^} \u2019\u2019 {^}{-|}", "+A*UFS": "{} \u2019\u2019 {^}{-|}", "+O*UFS": "{^} \u2019\u2019 {}{-|}", "+AO*UFS": "{} \u2019\u2019 {}{-|}", "+EUFS": "{^} \u201a\u201a {^}", "+AEUFS": "{} \u201a\u201a {^}", "+OEUFS": "{^} \u201a\u201a {}", "+AOEUFS": "{} \u201a\u201a {}", "+*EUFS": "{^} \u201a\u201a {^}{-|}", "+A*EUFS": "{} \u201a\u201a {^}{-|}", "+O*EUFS": "{^} \u201a\u201a {}{-|}", "+AO*EUFS": "{} \u201a\u201a {}{-|}", "+ARS": "{} .. {^}", "+ORS": "{^} .. {}", "+AORS": "{} .. {}", "+*RS": "{^} .. {^}{-|}", "+A*RS": "{} .. {^}{-|}", "+O*RS": "{^} .. {}{-|}", "+AO*RS": "{} .. {}{-|}", "+ERS": "{^} \u2022\u2022 {^}", "+AERS": "{} \u2022\u2022 {^}", "+OERS": "{^} \u2022\u2022 {}", "+AOERS": "{} \u2022\u2022 {}", "+*ERS": "{^} \u2022\u2022 {^}{-|}", "+A*ERS": "{} \u2022\u2022 {^}{-|}", "+O*ERS": "{^} \u2022\u2022 {}{-|}", "+AO*ERS": "{} \u2022\u2022 {}{-|}", "+URS": "{^} \u00b7\u00b7 {^}", "+AURS": "{} \u00b7\u00b7 {^}", "+OURS": "{^} \u00b7\u00b7 {}", "+AOURS": "{} \u00b7\u00b7 {}", "+*URS": "{^} \u00b7\u00b7 {^}{-|}", "+A*URS": "{} \u00b7\u00b7 {^}{-|}", "+O*URS": "{^} \u00b7\u00b7 {}{-|}", "+AO*URS": "{} \u00b7\u00b7 {}{-|}", "+EURS": "{^} \u2026\u2026 {^}", "+AEURS": "{} \u2026\u2026 {^}", "+OEURS": "{^} \u2026\u2026 {}", "+AOEURS": "{} \u2026\u2026 {}", "+*EURS": "{^} \u2026\u2026 {^}{-|}", "+A*EURS": "{} \u2026\u2026 {^}{-|}", "+O*EURS": "{^} \u2026\u2026 {}{-|}", "+AO*EURS": "{} \u2026\u2026 {}{-|}", "+FRS": "{^} !! {^}", "+AFRS": "{} !! {^}", "+OFRS": "{^} !! {}", "+AOFRS": "{} !! {}", "+*FRS": "{^} !! {^}{-|}", "+A*FRS": "{} !! {^}{-|}", "+O*FRS": "{^} !! {}{-|}", "+AO*FRS": "{} !! {}{-|}", "+EFRS": "{^} \u00ac\u00ac {^}", "+AEFRS": "{} \u00ac\u00ac {^}", "+OEFRS": "{^} \u00ac\u00ac {}", "+AOEFRS": "{} \u00ac\u00ac {}", "+*EFRS": "{^} \u00ac\u00ac {^}{-|}", "+A*EFRS": "{} \u00ac\u00ac {^}{-|}", "+O*EFRS": "{^} \u00ac\u00ac {}{-|}", "+AO*EFRS": "{} \u00ac\u00ac {}{-|}", "+UFRS": "{^} \u21a6\u21a6 {^}", "+AUFRS": "{} \u21a6\u21a6 {^}", "+OUFRS": "{^} \u21a6\u21a6 {}", "+AOUFRS": "{} \u21a6\u21a6 {}", "+*UFRS": "{^} \u21a6\u21a6 {^}{-|}", "+A*UFRS": "{} \u21a6\u21a6 {^}{-|}", "+O*UFRS": "{^} \u21a6\u21a6 {}{-|}", "+AO*UFRS": "{} \u21a6\u21a6 {}{-|}", "+EUFRS": "{^} \u00a1\u00a1 {^}", "+AEUFRS": "{} \u00a1\u00a1 {^}", "+OEUFRS": "{^} \u00a1\u00a1 {}", "+AOEUFRS": "{} \u00a1\u00a1 {}", "+*EUFRS": "{^} \u00a1\u00a1 {^}{-|}", "+A*EUFRS": "{} \u00a1\u00a1 {^}{-|}", "+O*EUFRS": "{^} \u00a1\u00a1 {}{-|}", "+AO*EUFRS": "{} \u00a1\u00a1 {}{-|}", "+APS": "{} `` {^}", "+OPS": "{^} `` {}", "+AOPS": "{} `` {}", "+*PS": "{^} `` {^}{-|}", "+A*PS": "{} `` {^}{-|}", "+O*PS": "{^} `` {}{-|}", "+AO*PS": "{} `` {}{-|}", "+EPS": "{^} \u2282\u2282 {^}", "+AEPS": "{} \u2282\u2282 {^}", "+OEPS": "{^} \u2282\u2282 {}", "+AOEPS": "{} \u2282\u2282 {}", "+*EPS": "{^} \u2282\u2282 {^}{-|}", "+A*EPS": "{} \u2282\u2282 {^}{-|}", "+O*EPS": "{^} \u2282\u2282 {}{-|}", "+AO*EPS": "{} \u2282\u2282 {}{-|}", "+UPS": "{^} \u2283\u2283 {^}", "+AUPS": "{} \u2283\u2283 {^}", "+OUPS": "{^} \u2283\u2283 {}", "+AOUPS": "{} \u2283\u2283 {}", "+*UPS": "{^} \u2283\u2283 {^}{-|}", "+A*UPS": "{} \u2283\u2283 {^}{-|}", "+O*UPS": "{^} \u2283\u2283 {}{-|}", "+AO*UPS": "{} \u2283\u2283 {}{-|}", "+EUPS": "{^} \u03c0\u03c0 {^}", "+AEUPS": "{} \u03c0\u03c0 {^}", "+OEUPS": "{^} \u03c0\u03c0 {}", "+AOEUPS": "{} \u03c0\u03c0 {}", "+*EUPS": "{^} \u03c0\u03c0 {^}{-|}", "+A*EUPS": "{} \u03c0\u03c0 {^}{-|}", "+O*EUPS": "{^} \u03c0\u03c0 {}{-|}", "+AO*EUPS": "{} \u03c0\u03c0 {}{-|}", "+FPS": "{^} \"\" {^}", "+AFPS": "{} \"\" {^}", "+OFPS": "{^} \"\" {}", "+AOFPS": "{} \"\" {}", "+*FPS": "{^} \"\" {^}{-|}", "+A*FPS": "{} \"\" {^}{-|}", "+O*FPS": "{^} \"\" {}{-|}", "+AO*FPS": "{} \"\" {}{-|}", "+EFPS": "{^} \u201c\u201c {^}", "+AEFPS": "{} \u201c\u201c {^}", "+OEFPS": "{^} \u201c\u201c {}", "+AOEFPS": "{} \u201c\u201c {}", "+*EFPS": "{^} \u201c\u201c {^}{-|}", "+A*EFPS": "{} \u201c\u201c {^}{-|}", "+O*EFPS": "{^} \u201c\u201c {}{-|}", "+AO*EFPS": "{} \u201c\u201c {}{-|}", "+UFPS": "{^} \u201d\u201d {^}", "+AUFPS": "{} \u201d\u201d {^}", "+OUFPS": "{^} \u201d\u201d {}", "+AOUFPS": "{} \u201d\u201d {}", "+*UFPS": "{^} \u201d\u201d {^}{-|}", "+A*UFPS": "{} \u201d\u201d {^}{-|}", "+O*UFPS": "{^} \u201d\u201d {}{-|}", "+AO*UFPS": "{} \u201d\u201d {}{-|}", "+EUFPS": "{^} \u201e\u201e {^}", "+AEUFPS": "{} \u201e\u201e {^}", "+OEUFPS": "{^} \u201e\u201e {}", "+AOEUFPS": "{} \u201e\u201e {}", "+*EUFPS": "{^} \u201e\u201e {^}{-|}", "+A*EUFPS": "{} \u201e\u201e {^}{-|}", "+O*EUFPS": "{^} \u201e\u201e {}{-|}", "+AO*EUFPS": "{} \u201e\u201e {}{-|}", "+ARPS": "{} // {^}", "+ORPS": "{^} // {}", "+AORPS": "{} // {}", "+*RPS": "{^} // {^}{-|}", "+A*RPS": "{} // {^}{-|}", "+O*RPS": "{^} // {}{-|}", "+AO*RPS": "{} // {}{-|}", "+ERPS": "{^} \u21d2\u21d2 {^}", "+AERPS": "{} \u21d2\u21d2 {^}", "+OERPS": "{^} \u21d2\u21d2 {}", "+AOERPS": "{} \u21d2\u21d2 {}", "+*ERPS": "{^} \u21d2\u21d2 {^}{-|}", "+A*ERPS": "{} \u21d2\u21d2 {^}{-|}", "+O*ERPS": "{^} \u21d2\u21d2 {}{-|}", "+AO*ERPS": "{} \u21d2\u21d2 {}{-|}", "+URPS": "{^} \u21d4\u21d4 {^}", "+AURPS": "{} \u21d4\u21d4 {^}", "+OURPS": "{^} \u21d4\u21d4 {}", "+AOURPS": "{} \u21d4\u21d4 {}", "+*URPS": "{^} \u21d4\u21d4 {^}{-|}", "+A*URPS": "{} \u21d4\u21d4 {^}{-|}", "+O*URPS": "{^} \u21d4\u21d4 {}{-|}", "+AO*URPS": "{} \u21d4\u21d4 {}{-|}", "+EURPS": "{^} \u00f7\u00f7 {^}", "+AEURPS": "{} \u00f7\u00f7 {^}", "+OEURPS": "{^} \u00f7\u00f7 {}", "+AOEURPS": "{} \u00f7\u00f7 {}", "+*EURPS": "{^} \u00f7\u00f7 {^}{-|}", "+A*EURPS": "{} \u00f7\u00f7 {^}{-|}", "+O*EURPS": "{^} \u00f7\u00f7 {}{-|}", "+AO*EURPS": "{} \u00f7\u00f7 {}{-|}", "+BS": "{^} ,, {^}", "+ABS": "{} ,, {^}", "+OBS": "{^} ,, {}", "+AOBS": "{} ,, {}", "+*BS": "{^} ,, {^}{-|}", "+A*BS": "{} ,, {^}{-|}", "+O*BS": "{^} ,, {}{-|}", "+AO*BS": "{} ,, {}{-|}", "+EBS": "{^} \u222a\u222a {^}", "+AEBS": "{} \u222a\u222a {^}", "+OEBS": "{^} \u222a\u222a {}", "+AOEBS": "{} \u222a\u222a {}", "+*EBS": "{^} \u222a\u222a {^}{-|}", "+A*EBS": "{} \u222a\u222a {^}{-|}", "+O*EBS": "{^} \u222a\u222a {}{-|}", "+AO*EBS": "{} \u222a\u222a {}{-|}", "+UBS": "{^} \u2228\u2228 {^}", "+AUBS": "{} \u2228\u2228 {^}", "+OUBS": "{^} \u2228\u2228 {}", "+AOUBS": "{} \u2228\u2228 {}", "+*UBS": "{^} \u2228\u2228 {^}{-|}", "+A*UBS": "{} \u2228\u2228 {^}{-|}", "+O*UBS": "{^} \u2228\u2228 {}{-|}", "+AO*UBS": "{} \u2228\u2228 {}{-|}", "+EUBS": "{^} \u2209\u2209 {^}", "+AEUBS": "{} \u2209\u2209 {^}", "+OEUBS": "{^} \u2209\u2209 {}", "+AOEUBS": "{} \u2209\u2209 {}", "+*EUBS": "{^} \u2209\u2209 {^}{-|}", "+A*EUBS": "{} \u2209\u2209 {^}{-|}", "+O*EUBS": "{^} \u2209\u2209 {}{-|}", "+AO*EUBS": "{} \u2209\u2209 {}{-|}", "+FBS": "{^} \\\\ {^}", "+AFBS": "{} \\\\ {^}", "+OFBS": "{^} \\\\ {}", "+AOFBS": "{} \\\\ {}", "+*FBS": "{^} \\\\ {^}{-|}", "+A*FBS": "{} \\\\ {^}{-|}", "+O*FBS": "{^} \\\\ {}{-|}", "+AO*FBS": "{} \\\\ {}{-|}", "+EFBS": "{^} \u0394\u0394 {^}", "+AEFBS": "{} \u0394\u0394 {^}", "+OEFBS": "{^} \u0394\u0394 {}", "+AOEFBS": "{} \u0394\u0394 {}", "+*EFBS": "{^} \u0394\u0394 {^}{-|}", "+A*EFBS": "{} \u0394\u0394 {^}{-|}", "+O*EFBS": "{^} \u0394\u0394 {}{-|}", "+AO*EFBS": "{} \u0394\u0394 {}{-|}", "+UFBS": "{^} \u221a\u221a {^}", "+AUFBS": "{} \u221a\u221a {^}", "+OUFBS": "{^} \u221a\u221a {}", "+AOUFBS": "{} \u221a\u221a {}", "+*UFBS": "{^} \u221a\u221a {^}{-|}", "+A*UFBS": "{} \u221a\u221a {^}{-|}", "+O*UFBS": "{^} \u221a\u221a {}{-|}", "+AO*UFBS": "{} \u221a\u221a {}{-|}", "+EUFBS": "{^} \u221e\u221e {^}", "+AEUFBS": "{} \u221e\u221e {^}", "+OEUFBS": "{^} \u221e\u221e {}", "+AOEUFBS": "{} \u221e\u221e {}", "+*EUFBS": "{^} \u221e\u221e {^}{-|}", "+A*EUFBS": "{} \u221e\u221e {^}{-|}", "+O*EUFBS": "{^} \u221e\u221e {}{-|}", "+AO*EUFBS": "{} \u221e\u221e {}{-|}", "+ARBS": "{} ;; {^}", "+ORBS": "{^} ;; {}", "+AORBS": "{} ;; {}", "+*RBS": "{^} ;; {^}{-|}", "+A*RBS": "{} ;; {^}{-|}", "+O*RBS": "{^} ;; {}{-|}", "+AO*RBS": "{} ;; {}{-|}", "+ERBS": "{^} \u2200\u2200 {^}", "+AERBS": "{} \u2200\u2200 {^}", "+OERBS": "{^} \u2200\u2200 {}", "+AOERBS": "{} \u2200\u2200 {}", "+*ERBS": "{^} \u2200\u2200 {^}{-|}", "+A*ERBS": "{} \u2200\u2200 {^}{-|}", "+O*ERBS": "{^} \u2200\u2200 {}{-|}", "+AO*ERBS": "{} \u2200\u2200 {}{-|}", "+URBS": "{^} \u2203\u2203 {^}", "+AURBS": "{} \u2203\u2203 {^}", "+OURBS": "{^} \u2203\u2203 {}", "+AOURBS": "{} \u2203\u2203 {}", "+*URBS": "{^} \u2203\u2203 {^}{-|}", "+A*URBS": "{} \u2203\u2203 {^}{-|}", "+O*URBS": "{^} \u2203\u2203 {}{-|}", "+AO*URBS": "{} \u2203\u2203 {}{-|}", "+EURBS": "{^} \u2204\u2204 {^}", "+AEURBS": "{} \u2204\u2204 {^}", "+OEURBS": "{^} \u2204\u2204 {}", "+AOEURBS": "{} \u2204\u2204 {}", "+*EURBS": "{^} \u2204\u2204 {^}{-|}", "+A*EURBS": "{} \u2204\u2204 {^}{-|}", "+O*EURBS": "{^} \u2204\u2204 {}{-|}", "+AO*EURBS": "{} \u2204\u2204 {}{-|}", "+FRBS": "{^} {#AudioMute}{#AudioMute} {^}", "+AFRBS": "{} {#AudioMute}{#AudioMute} {^}", "+OFRBS": "{^} {#AudioMute}{#AudioMute} {}", "+AOFRBS": "{} {#AudioMute}{#AudioMute} {}", "+*FRBS": "{^} {#AudioMute}{#AudioMute} {^}{-|}", "+A*FRBS": "{} {#AudioMute}{#AudioMute} {^}{-|}", "+O*FRBS": "{^} {#AudioMute}{#AudioMute} {}{-|}", "+AO*FRBS": "{} {#AudioMute}{#AudioMute} {}{-|}", "+EFRBS": "{^} {#AudioLowerVolume}{#AudioLowerVolume} {^}", "+AEFRBS": "{} {#AudioLowerVolume}{#AudioLowerVolume} {^}", "+OEFRBS": "{^} {#AudioLowerVolume}{#AudioLowerVolume} {}", "+AOEFRBS": "{} {#AudioLowerVolume}{#AudioLowerVolume} {}", "+*EFRBS": "{^} {#AudioLowerVolume}{#AudioLowerVolume} {^}{-|}", "+A*EFRBS": "{} {#AudioLowerVolume}{#AudioLowerVolume} {^}{-|}", "+O*EFRBS": "{^} {#AudioLowerVolume}{#AudioLowerVolume} {}{-|}", "+AO*EFRBS": "{} {#AudioLowerVolume}{#AudioLowerVolume} {}{-|}", "+UFRBS": "{^} {#AudioRaiseVolume}{#AudioRaiseVolume} {^}", "+AUFRBS": "{} {#AudioRaiseVolume}{#AudioRaiseVolume} {^}", "+OUFRBS": "{^} {#AudioRaiseVolume}{#AudioRaiseVolume} {}", "+AOUFRBS": "{} {#AudioRaiseVolume}{#AudioRaiseVolume} {}", "+*UFRBS": "{^} {#AudioRaiseVolume}{#AudioRaiseVolume} {^}{-|}", "+A*UFRBS": "{} {#AudioRaiseVolume}{#AudioRaiseVolume} {^}{-|}", "+O*UFRBS": "{^} {#AudioRaiseVolume}{#AudioRaiseVolume} {}{-|}", "+AO*UFRBS": "{} {#AudioRaiseVolume}{#AudioRaiseVolume} {}{-|}", "+EUFRBS": "{^} {#Eject}{#Eject} {^}", "+AEUFRBS": "{} {#Eject}{#Eject} {^}", "+OEUFRBS": "{^} {#Eject}{#Eject} {}", "+AOEUFRBS": "{} {#Eject}{#Eject} {}", "+*EUFRBS": "{^} {#Eject}{#Eject} {^}{-|}", "+A*EUFRBS": "{} {#Eject}{#Eject} {^}{-|}", "+O*EUFRBS": "{^} {#Eject}{#Eject} {}{-|}", "+AO*EUFRBS": "{} {#Eject}{#Eject} {}{-|}", "+APBS": "{} || {^}", "+OPBS": "{^} || {}", "+AOPBS": "{} || {}", "+*PBS": "{^} || {^}{-|}", "+A*PBS": "{} || {^}{-|}", "+O*PBS": "{^} || {}{-|}", "+AO*PBS": "{} || {}{-|}", "+EPBS": "{^} \u22a4\u22a4 {^}", "+AEPBS": "{} \u22a4\u22a4 {^}", "+OEPBS": "{^} \u22a4\u22a4 {}", "+AOEPBS": "{} \u22a4\u22a4 {}", "+*EPBS": "{^} \u22a4\u22a4 {^}{-|}", "+A*EPBS": "{} \u22a4\u22a4 {^}{-|}", "+O*EPBS": "{^} \u22a4\u22a4 {}{-|}", "+AO*EPBS": "{} \u22a4\u22a4 {}{-|}", "+UPBS": "{^} \u22a5\u22a5 {^}", "+AUPBS": "{} \u22a5\u22a5 {^}", "+OUPBS": "{^} \u22a5\u22a5 {}", "+AOUPBS": "{} \u22a5\u22a5 {}", "+*UPBS": "{^} \u22a5\u22a5 {^}{-|}", "+A*UPBS": "{} \u22a5\u22a5 {^}{-|}", "+O*UPBS": "{^} \u22a5\u22a5 {}{-|}", "+AO*UPBS": "{} \u22a5\u22a5 {}{-|}", "+EUPBS": "{^} \u00a6\u00a6 {^}", "+AEUPBS": "{} \u00a6\u00a6 {^}", "+OEUPBS": "{^} \u00a6\u00a6 {}", "+AOEUPBS": "{} \u00a6\u00a6 {}", "+*EUPBS": "{^} \u00a6\u00a6 {^}{-|}", "+A*EUPBS": "{} \u00a6\u00a6 {^}{-|}", "+O*EUPBS": "{^} \u00a6\u00a6 {}{-|}", "+AO*EUPBS": "{} \u00a6\u00a6 {}{-|}", "+FPBS": "{^} ?? {^}", "+AFPBS": "{} ?? {^}", "+OFPBS": "{^} ?? {}", "+AOFPBS": "{} ?? {}", "+*FPBS": "{^} ?? {^}{-|}", "+A*FPBS": "{} ?? {^}{-|}", "+O*FPBS": "{^} ?? {}{-|}", "+AO*FPBS": "{} ?? {}{-|}", "+EFPBS": "{^} \u00bf\u00bf {^}", "+AEFPBS": "{} \u00bf\u00bf {^}", "+OEFPBS": "{^} \u00bf\u00bf {}", "+AOEFPBS": "{} \u00bf\u00bf {}", "+*EFPBS": "{^} \u00bf\u00bf {^}{-|}", "+A*EFPBS": "{} \u00bf\u00bf {^}{-|}", "+O*EFPBS": "{^} \u00bf\u00bf {}{-|}", "+AO*EFPBS": "{} \u00bf\u00bf {}{-|}", "+UFPBS": "{^} \u221d\u221d {^}", "+AUFPBS": "{} \u221d\u221d {^}", "+OUFPBS": "{^} \u221d\u221d {}", "+AOUFPBS": "{} \u221d\u221d {}", "+*UFPBS": "{^} \u221d\u221d {^}{-|}", "+A*UFPBS": "{} \u221d\u221d {^}{-|}", "+O*UFPBS": "{^} \u221d\u221d {}{-|}", "+AO*UFPBS": "{} \u221d\u221d {}{-|}", "+EUFPBS": "{^} \u203d\u203d {^}", "+AEUFPBS": "{} \u203d\u203d {^}", "+OEUFPBS": "{^} \u203d\u203d {}", "+AOEUFPBS": "{} \u203d\u203d {}", "+*EUFPBS": "{^} \u203d\u203d {^}{-|}", "+A*EUFPBS": "{} \u203d\u203d {^}{-|}", "+O*EUFPBS": "{^} \u203d\u203d {}{-|}", "+AO*EUFPBS": "{} \u203d\u203d {}{-|}", "+FRPBS": "{^} %% {^}", "+AFRPBS": "{} %% {^}", "+OFRPBS": "{^} %% {}", "+AOFRPBS": "{} %% {}", "+*FRPBS": "{^} %% {^}{-|}", "+A*FRPBS": "{} %% {^}{-|}", "+O*FRPBS": "{^} %% {}{-|}", "+AO*FRPBS": "{} %% {}{-|}", "+EFRPBS": "{^} \u2030\u2030 {^}", "+AEFRPBS": "{} \u2030\u2030 {^}", "+OEFRPBS": "{^} \u2030\u2030 {}", "+AOEFRPBS": "{} \u2030\u2030 {}", "+*EFRPBS": "{^} \u2030\u2030 {^}{-|}", "+A*EFRPBS": "{} \u2030\u2030 {^}{-|}", "+O*EFRPBS": "{^} \u2030\u2030 {}{-|}", "+AO*EFRPBS": "{} \u2030\u2030 {}{-|}", "+UFRPBS": "{^} \u2031\u2031 {^}", "+AUFRPBS": "{} \u2031\u2031 {^}", "+OUFRPBS": "{^} \u2031\u2031 {}", "+AOUFRPBS": "{} \u2031\u2031 {}", "+*UFRPBS": "{^} \u2031\u2031 {^}{-|}", "+A*UFRPBS": "{} \u2031\u2031 {^}{-|}", "+O*UFRPBS": "{^} \u2031\u2031 {}{-|}", "+AO*UFRPBS": "{} \u2031\u2031 {}{-|}", "+EUFRPBS": "{^} \u03c6\u03c6 {^}", "+AEUFRPBS": "{} \u03c6\u03c6 {^}", "+OEUFRPBS": "{^} \u03c6\u03c6 {}", "+AOEUFRPBS": "{} \u03c6\u03c6 {}", "+*EUFRPBS": "{^} \u03c6\u03c6 {^}{-|}", "+A*EUFRPBS": "{} \u03c6\u03c6 {^}{-|}", "+O*EUFRPBS": "{^} \u03c6\u03c6 {}{-|}", "+AO*EUFRPBS": "{} \u03c6\u03c6 {}{-|}", "+LS": "{^} ** {^}", "+ALS": "{} ** {^}", "+OLS": "{^} ** {}", "+AOLS": "{} ** {}", "+*LS": "{^} ** {^}{-|}", "+A*LS": "{} ** {^}{-|}", "+O*LS": "{^} ** {}{-|}", "+AO*LS": "{} ** {}{-|}", "+ELS": "{^} \u220f\u220f {^}", "+AELS": "{} \u220f\u220f {^}", "+OELS": "{^} \u220f\u220f {}", "+AOELS": "{} \u220f\u220f {}", "+*ELS": "{^} \u220f\u220f {^}{-|}", "+A*ELS": "{} \u220f\u220f {^}{-|}", "+O*ELS": "{^} \u220f\u220f {}{-|}", "+AO*ELS": "{} \u220f\u220f {}{-|}", "+ULS": "{^} \u00a7\u00a7 {^}", "+AULS": "{} \u00a7\u00a7 {^}", "+OULS": "{^} \u00a7\u00a7 {}", "+AOULS": "{} \u00a7\u00a7 {}", "+*ULS": "{^} \u00a7\u00a7 {^}{-|}", "+A*ULS": "{} \u00a7\u00a7 {^}{-|}", "+O*ULS": "{^} \u00a7\u00a7 {}{-|}", "+AO*ULS": "{} \u00a7\u00a7 {}{-|}", "+EULS": "{^} \u00d7\u00d7 {^}", "+AEULS": "{} \u00d7\u00d7 {^}", "+OEULS": "{^} \u00d7\u00d7 {}", "+AOEULS": "{} \u00d7\u00d7 {}", "+*EULS": "{^} \u00d7\u00d7 {^}{-|}", "+A*EULS": "{} \u00d7\u00d7 {^}{-|}", "+O*EULS": "{^} \u00d7\u00d7 {}{-|}", "+AO*EULS": "{} \u00d7\u00d7 {}{-|}", "+FLS": "{^} {*-|}{*-|} {^}", "+AFLS": "{} {*-|}{*-|} {^}", "+OFLS": "{^} {*-|}{*-|} {}", "+AOFLS": "{} {*-|}{*-|} {}", "+*FLS": "{^} {*-|}{*-|} {^}{-|}", "+A*FLS": "{} {*-|}{*-|} {^}{-|}", "+O*FLS": "{^} {*-|}{*-|} {}{-|}", "+AO*FLS": "{} {*-|}{*-|} {}{-|}", "+EFLS": "{^} {*<}{*<} {^}", "+AEFLS": "{} {*<}{*<} {^}", "+OEFLS": "{^} {*<}{*<} {}", "+AOEFLS": "{} {*<}{*<} {}", "+*EFLS": "{^} {*<}{*<} {^}{-|}", "+A*EFLS": "{} {*<}{*<} {^}{-|}", "+O*EFLS": "{^} {*<}{*<} {}{-|}", "+AO*EFLS": "{} {*<}{*<} {}{-|}", "+UFLS": "{^} {<}{<} {^}", "+AUFLS": "{} {<}{<} {^}", "+OUFLS": "{^} {<}{<} {}", "+AOUFLS": "{} {<}{<} {}", "+*UFLS": "{^} {<}{<} {^}{-|}", "+A*UFLS": "{} {<}{<} {^}{-|}", "+O*UFLS": "{^} {<}{<} {}{-|}", "+AO*UFLS": "{} {<}{<} {}{-|}", "+EUFLS": "{^} {*>}{*>} {^}", "+AEUFLS": "{} {*>}{*>} {^}", "+OEUFLS": "{^} {*>}{*>} {}", "+AOEUFLS": "{} {*>}{*>} {}", "+*EUFLS": "{^} {*>}{*>} {^}{-|}", "+A*EUFLS": "{} {*>}{*>} {^}{-|}", "+O*EUFLS": "{^} {*>}{*>} {}{-|}", "+AO*EUFLS": "{} {*>}{*>} {}{-|}", "+APLS": "{} -- {^}", "+OPLS": "{^} -- {}", "+AOPLS": "{} -- {}", "+*PLS": "{^} -- {^}{-|}", "+A*PLS": "{} -- {^}{-|}", "+O*PLS": "{^} -- {}{-|}", "+AO*PLS": "{} -- {}{-|}", "+EPLS": "{^} \u2212\u2212 {^}", "+AEPLS": "{} \u2212\u2212 {^}", "+OEPLS": "{^} \u2212\u2212 {}", "+AOEPLS": "{} \u2212\u2212 {}", "+*EPLS": "{^} \u2212\u2212 {^}{-|}", "+A*EPLS": "{} \u2212\u2212 {^}{-|}", "+O*EPLS": "{^} \u2212\u2212 {}{-|}", "+AO*EPLS": "{} \u2212\u2212 {}{-|}", "+UPLS": "{^} \u2013\u2013 {^}", "+AUPLS": "{} \u2013\u2013 {^}", "+OUPLS": "{^} \u2013\u2013 {}", "+AOUPLS": "{} \u2013\u2013 {}", "+*UPLS": "{^} \u2013\u2013 {^}{-|}", "+A*UPLS": "{} \u2013\u2013 {^}{-|}", "+O*UPLS": "{^} \u2013\u2013 {}{-|}", "+AO*UPLS": "{} \u2013\u2013 {}{-|}", "+EUPLS": "{^} \u2014\u2014 {^}", "+AEUPLS": "{} \u2014\u2014 {^}", "+OEUPLS": "{^} \u2014\u2014 {}", "+AOEUPLS": "{} \u2014\u2014 {}", "+*EUPLS": "{^} \u2014\u2014 {^}{-|}", "+A*EUPLS": "{} \u2014\u2014 {^}{-|}", "+O*EUPLS": "{^} \u2014\u2014 {}{-|}", "+AO*EUPLS": "{} \u2014\u2014 {}{-|}", "+FPLS": "{^} (( {^}", "+AFPLS": "{} (( {^}", "+OFPLS": "{^} (( {}", "+AOFPLS": "{} (( {}", "+*FPLS": "{^} (( {^}{-|}", "+A*FPLS": "{} (( {^}{-|}", "+O*FPLS": "{^} (( {}{-|}", "+AO*FPLS": "{} (( {}{-|}", "+EFPLS": "{^} [[ {^}", "+AEFPLS": "{} [[ {^}", "+OEFPLS": "{^} [[ {}", "+AOEFPLS": "{} [[ {}", "+*EFPLS": "{^} [[ {^}{-|}", "+A*EFPLS": "{} [[ {^}{-|}", "+O*EFPLS": "{^} [[ {}{-|}", "+AO*EFPLS": "{} [[ {}{-|}", "+UFPLS": "{^} << {^}", "+AUFPLS": "{} << {^}", "+OUFPLS": "{^} << {}", "+AOUFPLS": "{} << {}", "+*UFPLS": "{^} << {^}{-|}", "+A*UFPLS": "{} << {^}{-|}", "+O*UFPLS": "{^} << {}{-|}", "+AO*UFPLS": "{} << {}{-|}", "+EUFPLS": "{^} {{ {^}", "+AEUFPLS": "{} {{ {^}", "+OEUFPLS": "{^} {{ {}", "+AOEUFPLS": "{} {{ {}", "+*EUFPLS": "{^} {{ {^}{-|}", "+A*EUFPLS": "{} {{ {^}{-|}", "+O*EUFPLS": "{^} {{ {}{-|}", "+AO*EUFPLS": "{} {{ {}{-|}", "+FPBLS": "{^} \u2191\u2191 {^}", "+AFPBLS": "{} \u2191\u2191 {^}", "+OFPBLS": "{^} \u2191\u2191 {}", "+AOFPBLS": "{} \u2191\u2191 {}", "+*FPBLS": "{^} \u2191\u2191 {^}{-|}", "+A*FPBLS": "{} \u2191\u2191 {^}{-|}", "+O*FPBLS": "{^} \u2191\u2191 {}{-|}", "+AO*FPBLS": "{} \u2191\u2191 {}{-|}", "+EFPBLS": "{^} \u2190\u2190 {^}", "+AEFPBLS": "{} \u2190\u2190 {^}", "+OEFPBLS": "{^} \u2190\u2190 {}", "+AOEFPBLS": "{} \u2190\u2190 {}", "+*EFPBLS": "{^} \u2190\u2190 {^}{-|}", "+A*EFPBLS": "{} \u2190\u2190 {^}{-|}", "+O*EFPBLS": "{^} \u2190\u2190 {}{-|}", "+AO*EFPBLS": "{} \u2190\u2190 {}{-|}", "+UFPBLS": "{^} \u2192\u2192 {^}", "+AUFPBLS": "{} \u2192\u2192 {^}", "+OUFPBLS": "{^} \u2192\u2192 {}", "+AOUFPBLS": "{} \u2192\u2192 {}", "+*UFPBLS": "{^} \u2192\u2192 {^}{-|}", "+A*UFPBLS": "{} \u2192\u2192 {^}{-|}", "+O*UFPBLS": "{^} \u2192\u2192 {}{-|}", "+AO*UFPBLS": "{} \u2192\u2192 {}{-|}", "+EUFPBLS": "{^} \u2193\u2193 {^}", "+AEUFPBLS": "{} \u2193\u2193 {^}", "+OEUFPBLS": "{^} \u2193\u2193 {}", "+AOEUFPBLS": "{} \u2193\u2193 {}", "+*EUFPBLS": "{^} \u2193\u2193 {^}{-|}", "+A*EUFPBLS": "{} \u2193\u2193 {^}{-|}", "+O*EUFPBLS": "{^} \u2193\u2193 {}{-|}", "+AO*EUFPBLS": "{} \u2193\u2193 {}{-|}", "+ARPBLS": "{} $$ {^}", "+ORPBLS": "{^} $$ {}", "+AORPBLS": "{} $$ {}", "+*RPBLS": "{^} $$ {^}{-|}", "+A*RPBLS": "{} $$ {^}{-|}", "+O*RPBLS": "{^} $$ {}{-|}", "+AO*RPBLS": "{} $$ {}{-|}", "+ERPBLS": "{^} \u00a5\u00a5 {^}", "+AERPBLS": "{} \u00a5\u00a5 {^}", "+OERPBLS": "{^} \u00a5\u00a5 {}", "+AOERPBLS": "{} \u00a5\u00a5 {}", "+*ERPBLS": "{^} \u00a5\u00a5 {^}{-|}", "+A*ERPBLS": "{} \u00a5\u00a5 {^}{-|}", "+O*ERPBLS": "{^} \u00a5\u00a5 {}{-|}", "+AO*ERPBLS": "{} \u00a5\u00a5 {}{-|}", "+URPBLS": "{^} \u20ac\u20ac {^}", "+AURPBLS": "{} \u20ac\u20ac {^}", "+OURPBLS": "{^} \u20ac\u20ac {}", "+AOURPBLS": "{} \u20ac\u20ac {}", "+*URPBLS": "{^} \u20ac\u20ac {^}{-|}", "+A*URPBLS": "{} \u20ac\u20ac {^}{-|}", "+O*URPBLS": "{^} \u20ac\u20ac {}{-|}", "+AO*URPBLS": "{} \u20ac\u20ac {}{-|}", "+EURPBLS": "{^} \u00a3\u00a3 {^}", "+AEURPBLS": "{} \u00a3\u00a3 {^}", "+OEURPBLS": "{^} \u00a3\u00a3 {}", "+AOEURPBLS": "{} \u00a3\u00a3 {}", "+*EURPBLS": "{^} \u00a3\u00a3 {^}{-|}", "+A*EURPBLS": "{} \u00a3\u00a3 {^}{-|}", "+O*EURPBLS": "{^} \u00a3\u00a3 {}{-|}", "+AO*EURPBLS": "{} \u00a3\u00a3 {}{-|}", "+GS": "{^} ++ {^}", "+AGS": "{} ++ {^}", "+OGS": "{^} ++ {}", "+AOGS": "{} ++ {}", "+*GS": "{^} ++ {^}{-|}", "+A*GS": "{} ++ {^}{-|}", "+O*GS": "{^} ++ {}{-|}", "+AO*GS": "{} ++ {}{-|}", "+EGS": "{^} \u2211\u2211 {^}", "+AEGS": "{} \u2211\u2211 {^}", "+OEGS": "{^} \u2211\u2211 {}", "+AOEGS": "{} \u2211\u2211 {}", "+*EGS": "{^} \u2211\u2211 {^}{-|}", "+A*EGS": "{} \u2211\u2211 {^}{-|}", "+O*EGS": "{^} \u2211\u2211 {}{-|}", "+AO*EGS": "{} \u2211\u2211 {}{-|}", "+UGS": "{^} \u00b6\u00b6 {^}", "+AUGS": "{} \u00b6\u00b6 {^}", "+OUGS": "{^} \u00b6\u00b6 {}", "+AOUGS": "{} \u00b6\u00b6 {}", "+*UGS": "{^} \u00b6\u00b6 {^}{-|}", "+A*UGS": "{} \u00b6\u00b6 {^}{-|}", "+O*UGS": "{^} \u00b6\u00b6 {}{-|}", "+AO*UGS": "{} \u00b6\u00b6 {}{-|}", "+EUGS": "{^} \u00b1\u00b1 {^}", "+AEUGS": "{} \u00b1\u00b1 {^}", "+OEUGS": "{^} \u00b1\u00b1 {}", "+AOEUGS": "{} \u00b1\u00b1 {}", "+*EUGS": "{^} \u00b1\u00b1 {^}{-|}", "+A*EUGS": "{} \u00b1\u00b1 {^}{-|}", "+O*EUGS": "{^} \u00b1\u00b1 {}{-|}", "+AO*EUGS": "{} \u00b1\u00b1 {}{-|}", "+FGS": "{^} {#Tab}{#Tab} {^}", "+AFGS": "{} {#Tab}{#Tab} {^}", "+OFGS": "{^} {#Tab}{#Tab} {}", "+AOFGS": "{} {#Tab}{#Tab} {}", "+*FGS": "{^} {#Tab}{#Tab} {^}{-|}", "+A*FGS": "{} {#Tab}{#Tab} {^}{-|}", "+O*FGS": "{^} {#Tab}{#Tab} {}{-|}", "+AO*FGS": "{} {#Tab}{#Tab} {}{-|}", "+EFGS": "{^} {#Backspace}{#Backspace} {^}", "+AEFGS": "{} {#Backspace}{#Backspace} {^}", "+OEFGS": "{^} {#Backspace}{#Backspace} {}", "+AOEFGS": "{} {#Backspace}{#Backspace} {}", "+*EFGS": "{^} {#Backspace}{#Backspace} {^}{-|}", "+A*EFGS": "{} {#Backspace}{#Backspace} {^}{-|}", "+O*EFGS": "{^} {#Backspace}{#Backspace} {}{-|}", "+AO*EFGS": "{} {#Backspace}{#Backspace} {}{-|}", "+UFGS": "{^} {#Delete}{#Delete} {^}", "+AUFGS": "{} {#Delete}{#Delete} {^}", "+OUFGS": "{^} {#Delete}{#Delete} {}", "+AOUFGS": "{} {#Delete}{#Delete} {}", "+*UFGS": "{^} {#Delete}{#Delete} {^}{-|}", "+A*UFGS": "{} {#Delete}{#Delete} {^}{-|}", "+O*UFGS": "{^} {#Delete}{#Delete} {}{-|}", "+AO*UFGS": "{} {#Delete}{#Delete} {}{-|}", "+EUFGS": "{^} {#Escape}{#Escape} {^}", "+AEUFGS": "{} {#Escape}{#Escape} {^}", "+OEUFGS": "{^} {#Escape}{#Escape} {}", "+AOEUFGS": "{} {#Escape}{#Escape} {}", "+*EUFGS": "{^} {#Escape}{#Escape} {^}{-|}", "+A*EUFGS": "{} {#Escape}{#Escape} {^}{-|}", "+O*EUFGS": "{^} {#Escape}{#Escape} {}{-|}", "+AO*EUFGS": "{} {#Escape}{#Escape} {}{-|}", "+ARPGS": "{} ^^ {^}", "+ORPGS": "{^} ^^ {}", "+AORPGS": "{} ^^ {}", "+*RPGS": "{^} ^^ {^}{-|}", "+A*RPGS": "{} ^^ {^}{-|}", "+O*RPGS": "{^} ^^ {}{-|}", "+AO*RPGS": "{} ^^ {}{-|}", "+ERPGS": "{^} \u00ab\u00ab {^}", "+AERPGS": "{} \u00ab\u00ab {^}", "+OERPGS": "{^} \u00ab\u00ab {}", "+AOERPGS": "{} \u00ab\u00ab {}", "+*ERPGS": "{^} \u00ab\u00ab {^}{-|}", "+A*ERPGS": "{} \u00ab\u00ab {^}{-|}", "+O*ERPGS": "{^} \u00ab\u00ab {}{-|}", "+AO*ERPGS": "{} \u00ab\u00ab {}{-|}", "+URPGS": "{^} \u00bb\u00bb {^}", "+AURPGS": "{} \u00bb\u00bb {^}", "+OURPGS": "{^} \u00bb\u00bb {}", "+AOURPGS": "{} \u00bb\u00bb {}", "+*URPGS": "{^} \u00bb\u00bb {^}{-|}", "+A*URPGS": "{} \u00bb\u00bb {^}{-|}", "+O*URPGS": "{^} \u00bb\u00bb {}{-|}", "+AO*URPGS": "{} \u00bb\u00bb {}{-|}", "+EURPGS": "{^} \u00b0\u00b0 {^}", "+AEURPGS": "{} \u00b0\u00b0 {^}", "+OEURPGS": "{^} \u00b0\u00b0 {}", "+AOEURPGS": "{} \u00b0\u00b0 {}", "+*EURPGS": "{^} \u00b0\u00b0 {^}{-|}", "+A*EURPGS": "{} \u00b0\u00b0 {^}{-|}", "+O*EURPGS": "{^} \u00b0\u00b0 {}{-|}", "+AO*EURPGS": "{} \u00b0\u00b0 {}{-|}", "+BGS": "{^} __ {^}", "+ABGS": "{} __ {^}", "+OBGS": "{^} __ {}", "+AOBGS": "{} __ {}", "+*BGS": "{^} __ {^}{-|}", "+A*BGS": "{} __ {^}{-|}", "+O*BGS": "{^} __ {}{-|}", "+AO*BGS": "{} __ {}{-|}", "+EBGS": "{^} \u2264\u2264 {^}", "+AEBGS": "{} \u2264\u2264 {^}", "+OEBGS": "{^} \u2264\u2264 {}", "+AOEBGS": "{} \u2264\u2264 {}", "+*EBGS": "{^} \u2264\u2264 {^}{-|}", "+A*EBGS": "{} \u2264\u2264 {^}{-|}", "+O*EBGS": "{^} \u2264\u2264 {}{-|}", "+AO*EBGS": "{} \u2264\u2264 {}{-|}", "+UBGS": "{^} \u2265\u2265 {^}", "+AUBGS": "{} \u2265\u2265 {^}", "+OUBGS": "{^} \u2265\u2265 {}", "+AOUBGS": "{} \u2265\u2265 {}", "+*UBGS": "{^} \u2265\u2265 {^}{-|}", "+A*UBGS": "{} \u2265\u2265 {^}{-|}", "+O*UBGS": "{^} \u2265\u2265 {}{-|}", "+AO*UBGS": "{} \u2265\u2265 {}{-|}", "+EUBGS": "{^} \u00b5\u00b5 {^}", "+AEUBGS": "{} \u00b5\u00b5 {^}", "+OEUBGS": "{^} \u00b5\u00b5 {}", "+AOEUBGS": "{} \u00b5\u00b5 {}", "+*EUBGS": "{^} \u00b5\u00b5 {^}{-|}", "+A*EUBGS": "{} \u00b5\u00b5 {^}{-|}", "+O*EUBGS": "{^} \u00b5\u00b5 {}{-|}", "+AO*EUBGS": "{} \u00b5\u00b5 {}{-|}", "+FBGS": "{^} && {^}", "+AFBGS": "{} && {^}", "+OFBGS": "{^} && {}", "+AOFBGS": "{} && {}", "+*FBGS": "{^} && {^}{-|}", "+A*FBGS": "{} && {^}{-|}", "+O*FBGS": "{^} && {}{-|}", "+AO*FBGS": "{} && {}{-|}", "+EFBGS": "{^} \u2229\u2229 {^}", "+AEFBGS": "{} \u2229\u2229 {^}", "+OEFBGS": "{^} \u2229\u2229 {}", "+AOEFBGS": "{} \u2229\u2229 {}", "+*EFBGS": "{^} \u2229\u2229 {^}{-|}", "+A*EFBGS": "{} \u2229\u2229 {^}{-|}", "+O*EFBGS": "{^} \u2229\u2229 {}{-|}", "+AO*EFBGS": "{} \u2229\u2229 {}{-|}", "+UFBGS": "{^} \u2227\u2227 {^}", "+AUFBGS": "{} \u2227\u2227 {^}", "+OUFBGS": "{^} \u2227\u2227 {}", "+AOUFBGS": "{} \u2227\u2227 {}", "+*UFBGS": "{^} \u2227\u2227 {^}{-|}", "+A*UFBGS": "{} \u2227\u2227 {^}{-|}", "+O*UFBGS": "{^} \u2227\u2227 {}{-|}", "+AO*UFBGS": "{} \u2227\u2227 {}{-|}", "+EUFBGS": "{^} \u2208\u2208 {^}", "+AEUFBGS": "{} \u2208\u2208 {^}", "+OEUFBGS": "{^} \u2208\u2208 {}", "+AOEUFBGS": "{} \u2208\u2208 {}", "+*EUFBGS": "{^} \u2208\u2208 {^}{-|}", "+A*EUFBGS": "{} \u2208\u2208 {^}{-|}", "+O*EUFBGS": "{^} \u2208\u2208 {}{-|}", "+AO*EUFBGS": "{} \u2208\u2208 {}{-|}", "+ARBGS": "{} )) {^}", "+ORBGS": "{^} )) {}", "+AORBGS": "{} )) {}", "+*RBGS": "{^} )) {^}{-|}", "+A*RBGS": "{} )) {^}{-|}", "+O*RBGS": "{^} )) {}{-|}", "+AO*RBGS": "{} )) {}{-|}", "+ERBGS": "{^} ]] {^}", "+AERBGS": "{} ]] {^}", "+OERBGS": "{^} ]] {}", "+AOERBGS": "{} ]] {}", "+*ERBGS": "{^} ]] {^}{-|}", "+A*ERBGS": "{} ]] {^}{-|}", "+O*ERBGS": "{^} ]] {}{-|}", "+AO*ERBGS": "{} ]] {}{-|}", "+URBGS": "{^} >> {^}", "+AURBGS": "{} >> {^}", "+OURBGS": "{^} >> {}", "+AOURBGS": "{} >> {}", "+*URBGS": "{^} >> {^}{-|}", "+A*URBGS": "{} >> {^}{-|}", "+O*URBGS": "{^} >> {}{-|}", "+AO*URBGS": "{} >> {}{-|}", "+EURBGS": "{^} }} {^}", "+AEURBGS": "{} }} {^}", "+OEURBGS": "{^} }} {}", "+AOEURBGS": "{} }} {}", "+*EURBGS": "{^} }} {^}{-|}", "+A*EURBGS": "{} }} {^}{-|}", "+O*EURBGS": "{^} }} {}{-|}", "+AO*EURBGS": "{} }} {}{-|}", "+FRBGS": "{^} {#AudioPlay}{#AudioPlay} {^}", "+AFRBGS": "{} {#AudioPlay}{#AudioPlay} {^}", "+OFRBGS": "{^} {#AudioPlay}{#AudioPlay} {}", "+AOFRBGS": "{} {#AudioPlay}{#AudioPlay} {}", "+*FRBGS": "{^} {#AudioPlay}{#AudioPlay} {^}{-|}", "+A*FRBGS": "{} {#AudioPlay}{#AudioPlay} {^}{-|}", "+O*FRBGS": "{^} {#AudioPlay}{#AudioPlay} {}{-|}", "+AO*FRBGS": "{} {#AudioPlay}{#AudioPlay} {}{-|}", "+EFRBGS": "{^} {#AudioPrev}{#AudioPrev} {^}", "+AEFRBGS": "{} {#AudioPrev}{#AudioPrev} {^}", "+OEFRBGS": "{^} {#AudioPrev}{#AudioPrev} {}", "+AOEFRBGS": "{} {#AudioPrev}{#AudioPrev} {}", "+*EFRBGS": "{^} {#AudioPrev}{#AudioPrev} {^}{-|}", "+A*EFRBGS": "{} {#AudioPrev}{#AudioPrev} {^}{-|}", "+O*EFRBGS": "{^} {#AudioPrev}{#AudioPrev} {}{-|}", "+AO*EFRBGS": "{} {#AudioPrev}{#AudioPrev} {}{-|}", "+UFRBGS": "{^} {#AudioNext}{#AudioNext} {^}", "+AUFRBGS": "{} {#AudioNext}{#AudioNext} {^}", "+OUFRBGS": "{^} {#AudioNext}{#AudioNext} {}", "+AOUFRBGS": "{} {#AudioNext}{#AudioNext} {}", "+*UFRBGS": "{^} {#AudioNext}{#AudioNext} {^}{-|}", "+A*UFRBGS": "{} {#AudioNext}{#AudioNext} {^}{-|}", "+O*UFRBGS": "{^} {#AudioNext}{#AudioNext} {}{-|}", "+AO*UFRBGS": "{} {#AudioNext}{#AudioNext} {}{-|}", "+EUFRBGS": "{^} {#AudioStop}{#AudioStop} {^}", "+AEUFRBGS": "{} {#AudioStop}{#AudioStop} {^}", "+OEUFRBGS": "{^} {#AudioStop}{#AudioStop} {}", "+AOEUFRBGS": "{} {#AudioStop}{#AudioStop} {}", "+*EUFRBGS": "{^} {#AudioStop}{#AudioStop} {^}{-|}", "+A*EUFRBGS": "{} {#AudioStop}{#AudioStop} {^}{-|}", "+O*EUFRBGS": "{^} {#AudioStop}{#AudioStop} {}{-|}", "+AO*EUFRBGS": "{} {#AudioStop}{#AudioStop} {}{-|}", "+FPBGS": "{^} ~~ {^}", "+AFPBGS": "{} ~~ {^}", "+OFPBGS": "{^} ~~ {}", "+AOFPBGS": "{} ~~ {}", "+*FPBGS": "{^} ~~ {^}{-|}", "+A*FPBGS": "{} ~~ {^}{-|}", "+O*FPBGS": "{^} ~~ {}{-|}", "+AO*FPBGS": "{} ~~ {}{-|}", "+EFPBGS": "{^} \u2286\u2286 {^}", "+AEFPBGS": "{} \u2286\u2286 {^}", "+OEFPBGS": "{^} \u2286\u2286 {}", "+AOEFPBGS": "{} \u2286\u2286 {}", "+*EFPBGS": "{^} \u2286\u2286 {^}{-|}", "+A*EFPBGS": "{} \u2286\u2286 {^}{-|}", "+O*EFPBGS": "{^} \u2286\u2286 {}{-|}", "+AO*EFPBGS": "{} \u2286\u2286 {}{-|}", "+UFPBGS": "{^} \u2287\u2287 {^}", "+AUFPBGS": "{} \u2287\u2287 {^}", "+OUFPBGS": "{^} \u2287\u2287 {}", "+AOUFPBGS": "{} \u2287\u2287 {}", "+*UFPBGS": "{^} \u2287\u2287 {^}{-|}", "+A*UFPBGS": "{} \u2287\u2287 {^}{-|}", "+O*UFPBGS": "{^} \u2287\u2287 {}{-|}", "+AO*UFPBGS": "{} \u2287\u2287 {}{-|}", "+EUFPBGS": "{^} \u02dc\u02dc {^}", "+AEUFPBGS": "{} \u02dc\u02dc {^}", "+OEUFPBGS": "{^} \u02dc\u02dc {}", "+AOEUFPBGS": "{} \u02dc\u02dc {}", "+*EUFPBGS": "{^} \u02dc\u02dc {^}{-|}", "+A*EUFPBGS": "{} \u02dc\u02dc {^}{-|}", "+O*EUFPBGS": "{^} \u02dc\u02dc {}{-|}", "+AO*EUFPBGS": "{} \u02dc\u02dc {}{-|}", "+ARPBGS": "{} {#Up}{#Up} {^}", "+ORPBGS": "{^} {#Up}{#Up} {}", "+AORPBGS": "{} {#Up}{#Up} {}", "+*RPBGS": "{^} {#Up}{#Up} {^}{-|}", "+A*RPBGS": "{} {#Up}{#Up} {^}{-|}", "+O*RPBGS": "{^} {#Up}{#Up} {}{-|}", "+AO*RPBGS": "{} {#Up}{#Up} {}{-|}", "+ERPBGS": "{^} {#Left}{#Left} {^}", "+AERPBGS": "{} {#Left}{#Left} {^}", "+OERPBGS": "{^} {#Left}{#Left} {}", "+AOERPBGS": "{} {#Left}{#Left} {}", "+*ERPBGS": "{^} {#Left}{#Left} {^}{-|}", "+A*ERPBGS": "{} {#Left}{#Left} {^}{-|}", "+O*ERPBGS": "{^} {#Left}{#Left} {}{-|}", "+AO*ERPBGS": "{} {#Left}{#Left} {}{-|}", "+URPBGS": "{^} {#Right}{#Right} {^}", "+AURPBGS": "{} {#Right}{#Right} {^}", "+OURPBGS": "{^} {#Right}{#Right} {}", "+AOURPBGS": "{} {#Right}{#Right} {}", "+*URPBGS": "{^} {#Right}{#Right} {^}{-|}", "+A*URPBGS": "{} {#Right}{#Right} {^}{-|}", "+O*URPBGS": "{^} {#Right}{#Right} {}{-|}", "+AO*URPBGS": "{} {#Right}{#Right} {}{-|}", "+EURPBGS": "{^} {#Down}{#Down} {^}", "+AEURPBGS": "{} {#Down}{#Down} {^}", "+OEURPBGS": "{^} {#Down}{#Down} {}", "+AOEURPBGS": "{} {#Down}{#Down} {}", "+*EURPBGS": "{^} {#Down}{#Down} {^}{-|}", "+A*EURPBGS": "{} {#Down}{#Down} {^}{-|}", "+O*EURPBGS": "{^} {#Down}{#Down} {}{-|}", "+AO*EURPBGS": "{} {#Down}{#Down} {}{-|}", "+FRPBGS": "{^} {#Page_Up}{#Page_Up} {^}", "+AFRPBGS": "{} {#Page_Up}{#Page_Up} {^}", "+OFRPBGS": "{^} {#Page_Up}{#Page_Up} {}", "+AOFRPBGS": "{} {#Page_Up}{#Page_Up} {}", "+*FRPBGS": "{^} {#Page_Up}{#Page_Up} {^}{-|}", "+A*FRPBGS": "{} {#Page_Up}{#Page_Up} {^}{-|}", "+O*FRPBGS": "{^} {#Page_Up}{#Page_Up} {}{-|}", "+AO*FRPBGS": "{} {#Page_Up}{#Page_Up} {}{-|}", "+EFRPBGS": "{^} {#Home}{#Home} {^}", "+AEFRPBGS": "{} {#Home}{#Home} {^}", "+OEFRPBGS": "{^} {#Home}{#Home} {}", "+AOEFRPBGS": "{} {#Home}{#Home} {}", "+*EFRPBGS": "{^} {#Home}{#Home} {^}{-|}", "+A*EFRPBGS": "{} {#Home}{#Home} {^}{-|}", "+O*EFRPBGS": "{^} {#Home}{#Home} {}{-|}", "+AO*EFRPBGS": "{} {#Home}{#Home} {}{-|}", "+UFRPBGS": "{^} {#End}{#End} {^}", "+AUFRPBGS": "{} {#End}{#End} {^}", "+OUFRPBGS": "{^} {#End}{#End} {}", "+AOUFRPBGS": "{} {#End}{#End} {}", "+*UFRPBGS": "{^} {#End}{#End} {^}{-|}", "+A*UFRPBGS": "{} {#End}{#End} {^}{-|}", "+O*UFRPBGS": "{^} {#End}{#End} {}{-|}", "+AO*UFRPBGS": "{} {#End}{#End} {}{-|}", "+EUFRPBGS": "{^} {#Page_Down}{#Page_Down} {^}", "+AEUFRPBGS": "{} {#Page_Down}{#Page_Down} {^}", "+OEUFRPBGS": "{^} {#Page_Down}{#Page_Down} {}", "+AOEUFRPBGS": "{} {#Page_Down}{#Page_Down} {}", "+*EUFRPBGS": "{^} {#Page_Down}{#Page_Down} {^}{-|}", "+A*EUFRPBGS": "{} {#Page_Down}{#Page_Down} {^}{-|}", "+O*EUFRPBGS": "{^} {#Page_Down}{#Page_Down} {}{-|}", "+AO*EUFRPBGS": "{} {#Page_Down}{#Page_Down} {}{-|}", "+LGS": "{^} :: {^}", "+ALGS": "{} :: {^}", "+OLGS": "{^} :: {}", "+AOLGS": "{} :: {}", "+*LGS": "{^} :: {^}{-|}", "+A*LGS": "{} :: {^}{-|}", "+O*LGS": "{^} :: {}{-|}", "+AO*LGS": "{} :: {}{-|}", "+ELGS": "{^} \u220b\u220b {^}", "+AELGS": "{} \u220b\u220b {^}", "+OELGS": "{^} \u220b\u220b {}", "+AOELGS": "{} \u220b\u220b {}", "+*ELGS": "{^} \u220b\u220b {^}{-|}", "+A*ELGS": "{} \u220b\u220b {^}{-|}", "+O*ELGS": "{^} \u220b\u220b {}{-|}", "+AO*ELGS": "{} \u220b\u220b {}{-|}", "+ULGS": "{^} \u2235\u2235 {^}", "+AULGS": "{} \u2235\u2235 {^}", "+OULGS": "{^} \u2235\u2235 {}", "+AOULGS": "{} \u2235\u2235 {}", "+*ULGS": "{^} \u2235\u2235 {^}{-|}", "+A*ULGS": "{} \u2235\u2235 {^}{-|}", "+O*ULGS": "{^} \u2235\u2235 {}{-|}", "+AO*ULGS": "{} \u2235\u2235 {}{-|}", "+EULGS": "{^} \u2234\u2234 {^}", "+AEULGS": "{} \u2234\u2234 {^}", "+OEULGS": "{^} \u2234\u2234 {}", "+AOEULGS": "{} \u2234\u2234 {}", "+*EULGS": "{^} \u2234\u2234 {^}{-|}", "+A*EULGS": "{} \u2234\u2234 {^}{-|}", "+O*EULGS": "{^} \u2234\u2234 {}{-|}", "+AO*EULGS": "{} \u2234\u2234 {}{-|}", "+FRLGS": "{^} ## {^}", "+AFRLGS": "{} ## {^}", "+OFRLGS": "{^} ## {}", "+AOFRLGS": "{} ## {}", "+*FRLGS": "{^} ## {^}{-|}", "+A*FRLGS": "{} ## {^}{-|}", "+O*FRLGS": "{^} ## {}{-|}", "+AO*FRLGS": "{} ## {}{-|}", "+EFRLGS": "{^} \u00a9\u00a9 {^}", "+AEFRLGS": "{} \u00a9\u00a9 {^}", "+OEFRLGS": "{^} \u00a9\u00a9 {}", "+AOEFRLGS": "{} \u00a9\u00a9 {}", "+*EFRLGS": "{^} \u00a9\u00a9 {^}{-|}", "+A*EFRLGS": "{} \u00a9\u00a9 {^}{-|}", "+O*EFRLGS": "{^} \u00a9\u00a9 {}{-|}", "+AO*EFRLGS": "{} \u00a9\u00a9 {}{-|}", "+UFRLGS": "{^} \u00ae\u00ae {^}", "+AUFRLGS": "{} \u00ae\u00ae {^}", "+OUFRLGS": "{^} \u00ae\u00ae {}", "+AOUFRLGS": "{} \u00ae\u00ae {}", "+*UFRLGS": "{^} \u00ae\u00ae {^}{-|}", "+A*UFRLGS": "{} \u00ae\u00ae {^}{-|}", "+O*UFRLGS": "{^} \u00ae\u00ae {}{-|}", "+AO*UFRLGS": "{} \u00ae\u00ae {}{-|}", "+EUFRLGS": "{^} \u2122\u2122 {^}", "+AEUFRLGS": "{} \u2122\u2122 {^}", "+OEUFRLGS": "{^} \u2122\u2122 {}", "+AOEUFRLGS": "{} \u2122\u2122 {}", "+*EUFRLGS": "{^} \u2122\u2122 {^}{-|}", "+A*EUFRLGS": "{} \u2122\u2122 {^}{-|}", "+O*EUFRLGS": "{^} \u2122\u2122 {}{-|}", "+AO*EUFRLGS": "{} \u2122\u2122 {}{-|}", "+APBLGS": "{} == {^}", "+OPBLGS": "{^} == {}", "+AOPBLGS": "{} == {}", "+*PBLGS": "{^} == {^}{-|}", "+A*PBLGS": "{} == {^}{-|}", "+O*PBLGS": "{^} == {}{-|}", "+AO*PBLGS": "{} == {}{-|}", "+EPBLGS": "{^} \u2261\u2261 {^}", "+AEPBLGS": "{} \u2261\u2261 {^}", "+OEPBLGS": "{^} \u2261\u2261 {}", "+AOEPBLGS": "{} \u2261\u2261 {}", "+*EPBLGS": "{^} \u2261\u2261 {^}{-|}", "+A*EPBLGS": "{} \u2261\u2261 {^}{-|}", "+O*EPBLGS": "{^} \u2261\u2261 {}{-|}", "+AO*EPBLGS": "{} \u2261\u2261 {}{-|}", "+UPBLGS": "{^} \u2248\u2248 {^}", "+AUPBLGS": "{} \u2248\u2248 {^}", "+OUPBLGS": "{^} \u2248\u2248 {}", "+AOUPBLGS": "{} \u2248\u2248 {}", "+*UPBLGS": "{^} \u2248\u2248 {^}{-|}", "+A*UPBLGS": "{} \u2248\u2248 {^}{-|}", "+O*UPBLGS": "{^} \u2248\u2248 {}{-|}", "+AO*UPBLGS": "{} \u2248\u2248 {}{-|}", "+EUPBLGS": "{^} \u2260\u2260 {^}", "+AEUPBLGS": "{} \u2260\u2260 {^}", "+OEUPBLGS": "{^} \u2260\u2260 {}", "+AOEUPBLGS": "{} \u2260\u2260 {}", "+*EUPBLGS": "{^} \u2260\u2260 {^}{-|}", "+A*EUPBLGS": "{} \u2260\u2260 {^}{-|}", "+O*EUPBLGS": "{^} \u2260\u2260 {}{-|}", "+AO*EUPBLGS": "{} \u2260\u2260 {}{-|}", "+FRPBLGS": "{^} @@ {^}", "+AFRPBLGS": "{} @@ {^}", "+OFRPBLGS": "{^} @@ {}", "+AOFRPBLGS": "{} @@ {}", "+*FRPBLGS": "{^} @@ {^}{-|}", "+A*FRPBLGS": "{} @@ {^}{-|}", "+O*FRPBLGS": "{^} @@ {}{-|}", "+AO*FRPBLGS": "{} @@ {}{-|}", "+EFRPBLGS": "{^} \u2295\u2295 {^}", "+AEFRPBLGS": "{} \u2295\u2295 {^}", "+OEFRPBLGS": "{^} \u2295\u2295 {}", "+AOEFRPBLGS": "{} \u2295\u2295 {}", "+*EFRPBLGS": "{^} \u2295\u2295 {^}{-|}", "+A*EFRPBLGS": "{} \u2295\u2295 {^}{-|}", "+O*EFRPBLGS": "{^} \u2295\u2295 {}{-|}", "+AO*EFRPBLGS": "{} \u2295\u2295 {}{-|}", "+UFRPBLGS": "{^} \u2297\u2297 {^}", "+AUFRPBLGS": "{} \u2297\u2297 {^}", "+OUFRPBLGS": "{^} \u2297\u2297 {}", "+AOUFRPBLGS": "{} \u2297\u2297 {}", "+*UFRPBLGS": "{^} \u2297\u2297 {^}{-|}", "+A*UFRPBLGS": "{} \u2297\u2297 {^}{-|}", "+O*UFRPBLGS": "{^} \u2297\u2297 {}{-|}", "+AO*UFRPBLGS": "{} \u2297\u2297 {}{-|}", "+EUFRPBLGS": "{^} \u2205\u2205 {^}", "+AEUFRPBLGS": "{} \u2205\u2205 {^}", "+OEUFRPBLGS": "{^} \u2205\u2205 {}", "+AOEUFRPBLGS": "{} \u2205\u2205 {}", "+*EUFRPBLGS": "{^} \u2205\u2205 {^}{-|}", "+A*EUFRPBLGS": "{} \u2205\u2205 {^}{-|}", "+O*EUFRPBLGS": "{^} \u2205\u2205 {}{-|}", "+AO*EUFRPBLGS": "{} \u2205\u2205 {}{-|}", "+ATS": "{} {^}", "+OTS": "{^} {}", "+AOTS": "{} {}", "+*TS": "{^} {^}{-|}", "+A*TS": "{} {^}{-|}", "+O*TS": "{^} {}{-|}", "+AO*TS": "{} {}{-|}", "+ETS": "{*!}{*!}{*!}{*!}", "+AETS": "{}{*!}{*!}{*!}{*!}", "+OETS": "{*!}{*!}{*!}{*!}{}", "+AOETS": "{}{*!}{*!}{*!}{*!}{}", "+*ETS": "{*!}{*!}{*!}{*!}{-|}", "+A*ETS": "{}{*!}{*!}{*!}{*!}{-|}", "+O*ETS": "{*!}{*!}{*!}{*!}{}{-|}", "+AO*ETS": "{}{*!}{*!}{*!}{*!}{}{-|}", "+UTS": "{*?}{*?}{*?}{*?}", "+AUTS": "{}{*?}{*?}{*?}{*?}", "+OUTS": "{*?}{*?}{*?}{*?}{}", "+AOUTS": "{}{*?}{*?}{*?}{*?}{}", "+*UTS": "{*?}{*?}{*?}{*?}{-|}", "+A*UTS": "{}{*?}{*?}{*?}{*?}{-|}", "+O*UTS": "{*?}{*?}{*?}{*?}{}{-|}", "+AO*UTS": "{}{*?}{*?}{*?}{*?}{}{-|}", "+EUTS": "{^} {#Space}{#Space}{#Space}{#Space} {^}", "+AEUTS": "{} {#Space}{#Space}{#Space}{#Space} {^}", "+OEUTS": "{^} {#Space}{#Space}{#Space}{#Space} {}", "+AOEUTS": "{} {#Space}{#Space}{#Space}{#Space} {}", "+*EUTS": "{^} {#Space}{#Space}{#Space}{#Space} {^}{-|}", "+A*EUTS": "{} {#Space}{#Space}{#Space}{#Space} {^}{-|}", "+O*EUTS": "{^} {#Space}{#Space}{#Space}{#Space} {}{-|}", "+AO*EUTS": "{} {#Space}{#Space}{#Space}{#Space} {}{-|}", "+FTS": "{^} '''' {^}", "+AFTS": "{} '''' {^}", "+OFTS": "{^} '''' {}", "+AOFTS": "{} '''' {}", "+*FTS": "{^} '''' {^}{-|}", "+A*FTS": "{} '''' {^}{-|}", "+O*FTS": "{^} '''' {}{-|}", "+AO*FTS": "{} '''' {}{-|}", "+EFTS": "{^} \u2018\u2018\u2018\u2018 {^}", "+AEFTS": "{} \u2018\u2018\u2018\u2018 {^}", "+OEFTS": "{^} \u2018\u2018\u2018\u2018 {}", "+AOEFTS": "{} \u2018\u2018\u2018\u2018 {}", "+*EFTS": "{^} \u2018\u2018\u2018\u2018 {^}{-|}", "+A*EFTS": "{} \u2018\u2018\u2018\u2018 {^}{-|}", "+O*EFTS": "{^} \u2018\u2018\u2018\u2018 {}{-|}", "+AO*EFTS": "{} \u2018\u2018\u2018\u2018 {}{-|}", "+UFTS": "{^} \u2019\u2019\u2019\u2019 {^}", "+AUFTS": "{} \u2019\u2019\u2019\u2019 {^}", "+OUFTS": "{^} \u2019\u2019\u2019\u2019 {}", "+AOUFTS": "{} \u2019\u2019\u2019\u2019 {}", "+*UFTS": "{^} \u2019\u2019\u2019\u2019 {^}{-|}", "+A*UFTS": "{} \u2019\u2019\u2019\u2019 {^}{-|}", "+O*UFTS": "{^} \u2019\u2019\u2019\u2019 {}{-|}", "+AO*UFTS": "{} \u2019\u2019\u2019\u2019 {}{-|}", "+EUFTS": "{^} \u201a\u201a\u201a\u201a {^}", "+AEUFTS": "{} \u201a\u201a\u201a\u201a {^}", "+OEUFTS": "{^} \u201a\u201a\u201a\u201a {}", "+AOEUFTS": "{} \u201a\u201a\u201a\u201a {}", "+*EUFTS": "{^} \u201a\u201a\u201a\u201a {^}{-|}", "+A*EUFTS": "{} \u201a\u201a\u201a\u201a {^}{-|}", "+O*EUFTS": "{^} \u201a\u201a\u201a\u201a {}{-|}", "+AO*EUFTS": "{} \u201a\u201a\u201a\u201a {}{-|}", "+ARTS": "{} .... {^}", "+ORTS": "{^} .... {}", "+AORTS": "{} .... {}", "+*RTS": "{^} .... {^}{-|}", "+A*RTS": "{} .... {^}{-|}", "+O*RTS": "{^} .... {}{-|}", "+AO*RTS": "{} .... {}{-|}", "+ERTS": "{^} \u2022\u2022\u2022\u2022 {^}", "+AERTS": "{} \u2022\u2022\u2022\u2022 {^}", "+OERTS": "{^} \u2022\u2022\u2022\u2022 {}", "+AOERTS": "{} \u2022\u2022\u2022\u2022 {}", "+*ERTS": "{^} \u2022\u2022\u2022\u2022 {^}{-|}", "+A*ERTS": "{} \u2022\u2022\u2022\u2022 {^}{-|}", "+O*ERTS": "{^} \u2022\u2022\u2022\u2022 {}{-|}", "+AO*ERTS": "{} \u2022\u2022\u2022\u2022 {}{-|}", "+URTS": "{^} \u00b7\u00b7\u00b7\u00b7 {^}", "+AURTS": "{} \u00b7\u00b7\u00b7\u00b7 {^}", "+OURTS": "{^} \u00b7\u00b7\u00b7\u00b7 {}", "+AOURTS": "{} \u00b7\u00b7\u00b7\u00b7 {}", "+*URTS": "{^} \u00b7\u00b7\u00b7\u00b7 {^}{-|}", "+A*URTS": "{} \u00b7\u00b7\u00b7\u00b7 {^}{-|}", "+O*URTS": "{^} \u00b7\u00b7\u00b7\u00b7 {}{-|}", "+AO*URTS": "{} \u00b7\u00b7\u00b7\u00b7 {}{-|}", "+EURTS": "{^} \u2026\u2026\u2026\u2026 {^}", "+AEURTS": "{} \u2026\u2026\u2026\u2026 {^}", "+OEURTS": "{^} \u2026\u2026\u2026\u2026 {}", "+AOEURTS": "{} \u2026\u2026\u2026\u2026 {}", "+*EURTS": "{^} \u2026\u2026\u2026\u2026 {^}{-|}", "+A*EURTS": "{} \u2026\u2026\u2026\u2026 {^}{-|}", "+O*EURTS": "{^} \u2026\u2026\u2026\u2026 {}{-|}", "+AO*EURTS": "{} \u2026\u2026\u2026\u2026 {}{-|}", "+FRTS": "{^} !!!! {^}", "+AFRTS": "{} !!!! {^}", "+OFRTS": "{^} !!!! {}", "+AOFRTS": "{} !!!! {}", "+*FRTS": "{^} !!!! {^}{-|}", "+A*FRTS": "{} !!!! {^}{-|}", "+O*FRTS": "{^} !!!! {}{-|}", "+AO*FRTS": "{} !!!! {}{-|}", "+EFRTS": "{^} \u00ac\u00ac\u00ac\u00ac {^}", "+AEFRTS": "{} \u00ac\u00ac\u00ac\u00ac {^}", "+OEFRTS": "{^} \u00ac\u00ac\u00ac\u00ac {}", "+AOEFRTS": "{} \u00ac\u00ac\u00ac\u00ac {}", "+*EFRTS": "{^} \u00ac\u00ac\u00ac\u00ac {^}{-|}", "+A*EFRTS": "{} \u00ac\u00ac\u00ac\u00ac {^}{-|}", "+O*EFRTS": "{^} \u00ac\u00ac\u00ac\u00ac {}{-|}", "+AO*EFRTS": "{} \u00ac\u00ac\u00ac\u00ac {}{-|}", "+UFRTS": "{^} \u21a6\u21a6\u21a6\u21a6 {^}", "+AUFRTS": "{} \u21a6\u21a6\u21a6\u21a6 {^}", "+OUFRTS": "{^} \u21a6\u21a6\u21a6\u21a6 {}", "+AOUFRTS": "{} \u21a6\u21a6\u21a6\u21a6 {}", "+*UFRTS": "{^} \u21a6\u21a6\u21a6\u21a6 {^}{-|}", "+A*UFRTS": "{} \u21a6\u21a6\u21a6\u21a6 {^}{-|}", "+O*UFRTS": "{^} \u21a6\u21a6\u21a6\u21a6 {}{-|}", "+AO*UFRTS": "{} \u21a6\u21a6\u21a6\u21a6 {}{-|}", "+EUFRTS": "{^} \u00a1\u00a1\u00a1\u00a1 {^}", "+AEUFRTS": "{} \u00a1\u00a1\u00a1\u00a1 {^}", "+OEUFRTS": "{^} \u00a1\u00a1\u00a1\u00a1 {}", "+AOEUFRTS": "{} \u00a1\u00a1\u00a1\u00a1 {}", "+*EUFRTS": "{^} \u00a1\u00a1\u00a1\u00a1 {^}{-|}", "+A*EUFRTS": "{} \u00a1\u00a1\u00a1\u00a1 {^}{-|}", "+O*EUFRTS": "{^} \u00a1\u00a1\u00a1\u00a1 {}{-|}", "+AO*EUFRTS": "{} \u00a1\u00a1\u00a1\u00a1 {}{-|}", "+APTS": "{} ```` {^}", "+OPTS": "{^} ```` {}", "+AOPTS": "{} ```` {}", "+*PTS": "{^} ```` {^}{-|}", "+A*PTS": "{} ```` {^}{-|}", "+O*PTS": "{^} ```` {}{-|}", "+AO*PTS": "{} ```` {}{-|}", "+EPTS": "{^} \u2282\u2282\u2282\u2282 {^}", "+AEPTS": "{} \u2282\u2282\u2282\u2282 {^}", "+OEPTS": "{^} \u2282\u2282\u2282\u2282 {}", "+AOEPTS": "{} \u2282\u2282\u2282\u2282 {}", "+*EPTS": "{^} \u2282\u2282\u2282\u2282 {^}{-|}", "+A*EPTS": "{} \u2282\u2282\u2282\u2282 {^}{-|}", "+O*EPTS": "{^} \u2282\u2282\u2282\u2282 {}{-|}", "+AO*EPTS": "{} \u2282\u2282\u2282\u2282 {}{-|}", "+UPTS": "{^} \u2283\u2283\u2283\u2283 {^}", "+AUPTS": "{} \u2283\u2283\u2283\u2283 {^}", "+OUPTS": "{^} \u2283\u2283\u2283\u2283 {}", "+AOUPTS": "{} \u2283\u2283\u2283\u2283 {}", "+*UPTS": "{^} \u2283\u2283\u2283\u2283 {^}{-|}", "+A*UPTS": "{} \u2283\u2283\u2283\u2283 {^}{-|}", "+O*UPTS": "{^} \u2283\u2283\u2283\u2283 {}{-|}", "+AO*UPTS": "{} \u2283\u2283\u2283\u2283 {}{-|}", "+EUPTS": "{^} \u03c0\u03c0\u03c0\u03c0 {^}", "+AEUPTS": "{} \u03c0\u03c0\u03c0\u03c0 {^}", "+OEUPTS": "{^} \u03c0\u03c0\u03c0\u03c0 {}", "+AOEUPTS": "{} \u03c0\u03c0\u03c0\u03c0 {}", "+*EUPTS": "{^} \u03c0\u03c0\u03c0\u03c0 {^}{-|}", "+A*EUPTS": "{} \u03c0\u03c0\u03c0\u03c0 {^}{-|}", "+O*EUPTS": "{^} \u03c0\u03c0\u03c0\u03c0 {}{-|}", "+AO*EUPTS": "{} \u03c0\u03c0\u03c0\u03c0 {}{-|}", "+FPTS": "{^} \"\"\"\" {^}", "+AFPTS": "{} \"\"\"\" {^}", "+OFPTS": "{^} \"\"\"\" {}", "+AOFPTS": "{} \"\"\"\" {}", "+*FPTS": "{^} \"\"\"\" {^}{-|}", "+A*FPTS": "{} \"\"\"\" {^}{-|}", "+O*FPTS": "{^} \"\"\"\" {}{-|}", "+AO*FPTS": "{} \"\"\"\" {}{-|}", "+EFPTS": "{^} \u201c\u201c\u201c\u201c {^}", "+AEFPTS": "{} \u201c\u201c\u201c\u201c {^}", "+OEFPTS": "{^} \u201c\u201c\u201c\u201c {}", "+AOEFPTS": "{} \u201c\u201c\u201c\u201c {}", "+*EFPTS": "{^} \u201c\u201c\u201c\u201c {^}{-|}", "+A*EFPTS": "{} \u201c\u201c\u201c\u201c {^}{-|}", "+O*EFPTS": "{^} \u201c\u201c\u201c\u201c {}{-|}", "+AO*EFPTS": "{} \u201c\u201c\u201c\u201c {}{-|}", "+UFPTS": "{^} \u201d\u201d\u201d\u201d {^}", "+AUFPTS": "{} \u201d\u201d\u201d\u201d {^}", "+OUFPTS": "{^} \u201d\u201d\u201d\u201d {}", "+AOUFPTS": "{} \u201d\u201d\u201d\u201d {}", "+*UFPTS": "{^} \u201d\u201d\u201d\u201d {^}{-|}", "+A*UFPTS": "{} \u201d\u201d\u201d\u201d {^}{-|}", "+O*UFPTS": "{^} \u201d\u201d\u201d\u201d {}{-|}", "+AO*UFPTS": "{} \u201d\u201d\u201d\u201d {}{-|}", "+EUFPTS": "{^} \u201e\u201e\u201e\u201e {^}", "+AEUFPTS": "{} \u201e\u201e\u201e\u201e {^}", "+OEUFPTS": "{^} \u201e\u201e\u201e\u201e {}", "+AOEUFPTS": "{} \u201e\u201e\u201e\u201e {}", "+*EUFPTS": "{^} \u201e\u201e\u201e\u201e {^}{-|}", "+A*EUFPTS": "{} \u201e\u201e\u201e\u201e {^}{-|}", "+O*EUFPTS": "{^} \u201e\u201e\u201e\u201e {}{-|}", "+AO*EUFPTS": "{} \u201e\u201e\u201e\u201e {}{-|}", "+ARPTS": "{} //// {^}", "+ORPTS": "{^} //// {}", "+AORPTS": "{} //// {}", "+*RPTS": "{^} //// {^}{-|}", "+A*RPTS": "{} //// {^}{-|}", "+O*RPTS": "{^} //// {}{-|}", "+AO*RPTS": "{} //// {}{-|}", "+ERPTS": "{^} \u21d2\u21d2\u21d2\u21d2 {^}", "+AERPTS": "{} \u21d2\u21d2\u21d2\u21d2 {^}", "+OERPTS": "{^} \u21d2\u21d2\u21d2\u21d2 {}", "+AOERPTS": "{} \u21d2\u21d2\u21d2\u21d2 {}", "+*ERPTS": "{^} \u21d2\u21d2\u21d2\u21d2 {^}{-|}", "+A*ERPTS": "{} \u21d2\u21d2\u21d2\u21d2 {^}{-|}", "+O*ERPTS": "{^} \u21d2\u21d2\u21d2\u21d2 {}{-|}", "+AO*ERPTS": "{} \u21d2\u21d2\u21d2\u21d2 {}{-|}", "+URPTS": "{^} \u21d4\u21d4\u21d4\u21d4 {^}", "+AURPTS": "{} \u21d4\u21d4\u21d4\u21d4 {^}", "+OURPTS": "{^} \u21d4\u21d4\u21d4\u21d4 {}", "+AOURPTS": "{} \u21d4\u21d4\u21d4\u21d4 {}", "+*URPTS": "{^} \u21d4\u21d4\u21d4\u21d4 {^}{-|}", "+A*URPTS": "{} \u21d4\u21d4\u21d4\u21d4 {^}{-|}", "+O*URPTS": "{^} \u21d4\u21d4\u21d4\u21d4 {}{-|}", "+AO*URPTS": "{} \u21d4\u21d4\u21d4\u21d4 {}{-|}", "+EURPTS": "{^} \u00f7\u00f7\u00f7\u00f7 {^}", "+AEURPTS": "{} \u00f7\u00f7\u00f7\u00f7 {^}", "+OEURPTS": "{^} \u00f7\u00f7\u00f7\u00f7 {}", "+AOEURPTS": "{} \u00f7\u00f7\u00f7\u00f7 {}", "+*EURPTS": "{^} \u00f7\u00f7\u00f7\u00f7 {^}{-|}", "+A*EURPTS": "{} \u00f7\u00f7\u00f7\u00f7 {^}{-|}", "+O*EURPTS": "{^} \u00f7\u00f7\u00f7\u00f7 {}{-|}", "+AO*EURPTS": "{} \u00f7\u00f7\u00f7\u00f7 {}{-|}", "+BTS": "{^} ,,,, {^}", "+ABTS": "{} ,,,, {^}", "+OBTS": "{^} ,,,, {}", "+AOBTS": "{} ,,,, {}", "+*BTS": "{^} ,,,, {^}{-|}", "+A*BTS": "{} ,,,, {^}{-|}", "+O*BTS": "{^} ,,,, {}{-|}", "+AO*BTS": "{} ,,,, {}{-|}", "+EBTS": "{^} \u222a\u222a\u222a\u222a {^}", "+AEBTS": "{} \u222a\u222a\u222a\u222a {^}", "+OEBTS": "{^} \u222a\u222a\u222a\u222a {}", "+AOEBTS": "{} \u222a\u222a\u222a\u222a {}", "+*EBTS": "{^} \u222a\u222a\u222a\u222a {^}{-|}", "+A*EBTS": "{} \u222a\u222a\u222a\u222a {^}{-|}", "+O*EBTS": "{^} \u222a\u222a\u222a\u222a {}{-|}", "+AO*EBTS": "{} \u222a\u222a\u222a\u222a {}{-|}", "+UBTS": "{^} \u2228\u2228\u2228\u2228 {^}", "+AUBTS": "{} \u2228\u2228\u2228\u2228 {^}", "+OUBTS": "{^} \u2228\u2228\u2228\u2228 {}", "+AOUBTS": "{} \u2228\u2228\u2228\u2228 {}", "+*UBTS": "{^} \u2228\u2228\u2228\u2228 {^}{-|}", "+A*UBTS": "{} \u2228\u2228\u2228\u2228 {^}{-|}", "+O*UBTS": "{^} \u2228\u2228\u2228\u2228 {}{-|}", "+AO*UBTS": "{} \u2228\u2228\u2228\u2228 {}{-|}", "+EUBTS": "{^} \u2209\u2209\u2209\u2209 {^}", "+AEUBTS": "{} \u2209\u2209\u2209\u2209 {^}", "+OEUBTS": "{^} \u2209\u2209\u2209\u2209 {}", "+AOEUBTS": "{} \u2209\u2209\u2209\u2209 {}", "+*EUBTS": "{^} \u2209\u2209\u2209\u2209 {^}{-|}", "+A*EUBTS": "{} \u2209\u2209\u2209\u2209 {^}{-|}", "+O*EUBTS": "{^} \u2209\u2209\u2209\u2209 {}{-|}", "+AO*EUBTS": "{} \u2209\u2209\u2209\u2209 {}{-|}", "+FBTS": "{^} \\\\\\\\ {^}", "+AFBTS": "{} \\\\\\\\ {^}", "+OFBTS": "{^} \\\\\\\\ {}", "+AOFBTS": "{} \\\\\\\\ {}", "+*FBTS": "{^} \\\\\\\\ {^}{-|}", "+A*FBTS": "{} \\\\\\\\ {^}{-|}", "+O*FBTS": "{^} \\\\\\\\ {}{-|}", "+AO*FBTS": "{} \\\\\\\\ {}{-|}", "+EFBTS": "{^} \u0394\u0394\u0394\u0394 {^}", "+AEFBTS": "{} \u0394\u0394\u0394\u0394 {^}", "+OEFBTS": "{^} \u0394\u0394\u0394\u0394 {}", "+AOEFBTS": "{} \u0394\u0394\u0394\u0394 {}", "+*EFBTS": "{^} \u0394\u0394\u0394\u0394 {^}{-|}", "+A*EFBTS": "{} \u0394\u0394\u0394\u0394 {^}{-|}", "+O*EFBTS": "{^} \u0394\u0394\u0394\u0394 {}{-|}", "+AO*EFBTS": "{} \u0394\u0394\u0394\u0394 {}{-|}", "+UFBTS": "{^} \u221a\u221a\u221a\u221a {^}", "+AUFBTS": "{} \u221a\u221a\u221a\u221a {^}", "+OUFBTS": "{^} \u221a\u221a\u221a\u221a {}", "+AOUFBTS": "{} \u221a\u221a\u221a\u221a {}", "+*UFBTS": "{^} \u221a\u221a\u221a\u221a {^}{-|}", "+A*UFBTS": "{} \u221a\u221a\u221a\u221a {^}{-|}", "+O*UFBTS": "{^} \u221a\u221a\u221a\u221a {}{-|}", "+AO*UFBTS": "{} \u221a\u221a\u221a\u221a {}{-|}", "+EUFBTS": "{^} \u221e\u221e\u221e\u221e {^}", "+AEUFBTS": "{} \u221e\u221e\u221e\u221e {^}", "+OEUFBTS": "{^} \u221e\u221e\u221e\u221e {}", "+AOEUFBTS": "{} \u221e\u221e\u221e\u221e {}", "+*EUFBTS": "{^} \u221e\u221e\u221e\u221e {^}{-|}", "+A*EUFBTS": "{} \u221e\u221e\u221e\u221e {^}{-|}", "+O*EUFBTS": "{^} \u221e\u221e\u221e\u221e {}{-|}", "+AO*EUFBTS": "{} \u221e\u221e\u221e\u221e {}{-|}", "+ARBTS": "{} ;;;; {^}", "+ORBTS": "{^} ;;;; {}", "+AORBTS": "{} ;;;; {}", "+*RBTS": "{^} ;;;; {^}{-|}", "+A*RBTS": "{} ;;;; {^}{-|}", "+O*RBTS": "{^} ;;;; {}{-|}", "+AO*RBTS": "{} ;;;; {}{-|}", "+ERBTS": "{^} \u2200\u2200\u2200\u2200 {^}", "+AERBTS": "{} \u2200\u2200\u2200\u2200 {^}", "+OERBTS": "{^} \u2200\u2200\u2200\u2200 {}", "+AOERBTS": "{} \u2200\u2200\u2200\u2200 {}", "+*ERBTS": "{^} \u2200\u2200\u2200\u2200 {^}{-|}", "+A*ERBTS": "{} \u2200\u2200\u2200\u2200 {^}{-|}", "+O*ERBTS": "{^} \u2200\u2200\u2200\u2200 {}{-|}", "+AO*ERBTS": "{} \u2200\u2200\u2200\u2200 {}{-|}", "+URBTS": "{^} \u2203\u2203\u2203\u2203 {^}", "+AURBTS": "{} \u2203\u2203\u2203\u2203 {^}", "+OURBTS": "{^} \u2203\u2203\u2203\u2203 {}", "+AOURBTS": "{} \u2203\u2203\u2203\u2203 {}", "+*URBTS": "{^} \u2203\u2203\u2203\u2203 {^}{-|}", "+A*URBTS": "{} \u2203\u2203\u2203\u2203 {^}{-|}", "+O*URBTS": "{^} \u2203\u2203\u2203\u2203 {}{-|}", "+AO*URBTS": "{} \u2203\u2203\u2203\u2203 {}{-|}", "+EURBTS": "{^} \u2204\u2204\u2204\u2204 {^}", "+AEURBTS": "{} \u2204\u2204\u2204\u2204 {^}", "+OEURBTS": "{^} \u2204\u2204\u2204\u2204 {}", "+AOEURBTS": "{} \u2204\u2204\u2204\u2204 {}", "+*EURBTS": "{^} \u2204\u2204\u2204\u2204 {^}{-|}", "+A*EURBTS": "{} \u2204\u2204\u2204\u2204 {^}{-|}", "+O*EURBTS": "{^} \u2204\u2204\u2204\u2204 {}{-|}", "+AO*EURBTS": "{} \u2204\u2204\u2204\u2204 {}{-|}", "+FRBTS": "{^} {#AudioMute}{#AudioMute}{#AudioMute}{#AudioMute} {^}", "+AFRBTS": "{} {#AudioMute}{#AudioMute}{#AudioMute}{#AudioMute} {^}", "+OFRBTS": "{^} {#AudioMute}{#AudioMute}{#AudioMute}{#AudioMute} {}", "+AOFRBTS": "{} {#AudioMute}{#AudioMute}{#AudioMute}{#AudioMute} {}", "+*FRBTS": "{^} {#AudioMute}{#AudioMute}{#AudioMute}{#AudioMute} {^}{-|}", "+A*FRBTS": "{} {#AudioMute}{#AudioMute}{#AudioMute}{#AudioMute} {^}{-|}", "+O*FRBTS": "{^} {#AudioMute}{#AudioMute}{#AudioMute}{#AudioMute} {}{-|}", "+AO*FRBTS": "{} {#AudioMute}{#AudioMute}{#AudioMute}{#AudioMute} {}{-|}", "+EFRBTS": "{^} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {^}", "+AEFRBTS": "{} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {^}", "+OEFRBTS": "{^} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {}", "+AOEFRBTS": "{} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {}", "+*EFRBTS": "{^} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {^}{-|}", "+A*EFRBTS": "{} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {^}{-|}", "+O*EFRBTS": "{^} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {}{-|}", "+AO*EFRBTS": "{} {#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume}{#AudioLowerVolume} {}{-|}", "+UFRBTS": "{^} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {^}", "+AUFRBTS": "{} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {^}", "+OUFRBTS": "{^} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {}", "+AOUFRBTS": "{} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {}", "+*UFRBTS": "{^} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {^}{-|}", "+A*UFRBTS": "{} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {^}{-|}", "+O*UFRBTS": "{^} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {}{-|}", "+AO*UFRBTS": "{} {#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume}{#AudioRaiseVolume} {}{-|}", "+EUFRBTS": "{^} {#Eject}{#Eject}{#Eject}{#Eject} {^}", "+AEUFRBTS": "{} {#Eject}{#Eject}{#Eject}{#Eject} {^}", "+OEUFRBTS": "{^} {#Eject}{#Eject}{#Eject}{#Eject} {}", "+AOEUFRBTS": "{} {#Eject}{#Eject}{#Eject}{#Eject} {}", "+*EUFRBTS": "{^} {#Eject}{#Eject}{#Eject}{#Eject} {^}{-|}", "+A*EUFRBTS": "{} {#Eject}{#Eject}{#Eject}{#Eject} {^}{-|}", "+O*EUFRBTS": "{^} {#Eject}{#Eject}{#Eject}{#Eject} {}{-|}", "+AO*EUFRBTS": "{} {#Eject}{#Eject}{#Eject}{#Eject} {}{-|}", "+APBTS": "{} |||| {^}", "+OPBTS": "{^} |||| {}", "+AOPBTS": "{} |||| {}", "+*PBTS": "{^} |||| {^}{-|}", "+A*PBTS": "{} |||| {^}{-|}", "+O*PBTS": "{^} |||| {}{-|}", "+AO*PBTS": "{} |||| {}{-|}", "+EPBTS": "{^} \u22a4\u22a4\u22a4\u22a4 {^}", "+AEPBTS": "{} \u22a4\u22a4\u22a4\u22a4 {^}", "+OEPBTS": "{^} \u22a4\u22a4\u22a4\u22a4 {}", "+AOEPBTS": "{} \u22a4\u22a4\u22a4\u22a4 {}", "+*EPBTS": "{^} \u22a4\u22a4\u22a4\u22a4 {^}{-|}", "+A*EPBTS": "{} \u22a4\u22a4\u22a4\u22a4 {^}{-|}", "+O*EPBTS": "{^} \u22a4\u22a4\u22a4\u22a4 {}{-|}", "+AO*EPBTS": "{} \u22a4\u22a4\u22a4\u22a4 {}{-|}", "+UPBTS": "{^} \u22a5\u22a5\u22a5\u22a5 {^}", "+AUPBTS": "{} \u22a5\u22a5\u22a5\u22a5 {^}", "+OUPBTS": "{^} \u22a5\u22a5\u22a5\u22a5 {}", "+AOUPBTS": "{} \u22a5\u22a5\u22a5\u22a5 {}", "+*UPBTS": "{^} \u22a5\u22a5\u22a5\u22a5 {^}{-|}", "+A*UPBTS": "{} \u22a5\u22a5\u22a5\u22a5 {^}{-|}", "+O*UPBTS": "{^} \u22a5\u22a5\u22a5\u22a5 {}{-|}", "+AO*UPBTS": "{} \u22a5\u22a5\u22a5\u22a5 {}{-|}", "+EUPBTS": "{^} \u00a6\u00a6\u00a6\u00a6 {^}", "+AEUPBTS": "{} \u00a6\u00a6\u00a6\u00a6 {^}", "+OEUPBTS": "{^} \u00a6\u00a6\u00a6\u00a6 {}", "+AOEUPBTS": "{} \u00a6\u00a6\u00a6\u00a6 {}", "+*EUPBTS": "{^} \u00a6\u00a6\u00a6\u00a6 {^}{-|}", "+A*EUPBTS": "{} \u00a6\u00a6\u00a6\u00a6 {^}{-|}", "+O*EUPBTS": "{^} \u00a6\u00a6\u00a6\u00a6 {}{-|}", "+AO*EUPBTS": "{} \u00a6\u00a6\u00a6\u00a6 {}{-|}", "+FPBTS": "{^} ???? {^}", "+AFPBTS": "{} ???? {^}", "+OFPBTS": "{^} ???? {}", "+AOFPBTS": "{} ???? {}", "+*FPBTS": "{^} ???? {^}{-|}", "+A*FPBTS": "{} ???? {^}{-|}", "+O*FPBTS": "{^} ???? {}{-|}", "+AO*FPBTS": "{} ???? {}{-|}", "+EFPBTS": "{^} \u00bf\u00bf\u00bf\u00bf {^}", "+AEFPBTS": "{} \u00bf\u00bf\u00bf\u00bf {^}", "+OEFPBTS": "{^} \u00bf\u00bf\u00bf\u00bf {}", "+AOEFPBTS": "{} \u00bf\u00bf\u00bf\u00bf {}", "+*EFPBTS": "{^} \u00bf\u00bf\u00bf\u00bf {^}{-|}", "+A*EFPBTS": "{} \u00bf\u00bf\u00bf\u00bf {^}{-|}", "+O*EFPBTS": "{^} \u00bf\u00bf\u00bf\u00bf {}{-|}", "+AO*EFPBTS": "{} \u00bf\u00bf\u00bf\u00bf {}{-|}", "+UFPBTS": "{^} \u221d\u221d\u221d\u221d {^}", "+AUFPBTS": "{} \u221d\u221d\u221d\u221d {^}", "+OUFPBTS": "{^} \u221d\u221d\u221d\u221d {}", "+AOUFPBTS": "{} \u221d\u221d\u221d\u221d {}", "+*UFPBTS": "{^} \u221d\u221d\u221d\u221d {^}{-|}", "+A*UFPBTS": "{} \u221d\u221d\u221d\u221d {^}{-|}", "+O*UFPBTS": "{^} \u221d\u221d\u221d\u221d {}{-|}", "+AO*UFPBTS": "{} \u221d\u221d\u221d\u221d {}{-|}", "+EUFPBTS": "{^} \u203d\u203d\u203d\u203d {^}", "+AEUFPBTS": "{} \u203d\u203d\u203d\u203d {^}", "+OEUFPBTS": "{^} \u203d\u203d\u203d\u203d {}", "+AOEUFPBTS": "{} \u203d\u203d\u203d\u203d {}", "+*EUFPBTS": "{^} \u203d\u203d\u203d\u203d {^}{-|}", "+A*EUFPBTS": "{} \u203d\u203d\u203d\u203d {^}{-|}", "+O*EUFPBTS": "{^} \u203d\u203d\u203d\u203d {}{-|}", "+AO*EUFPBTS": "{} \u203d\u203d\u203d\u203d {}{-|}", "+FRPBTS": "{^} %%%% {^}", "+AFRPBTS": "{} %%%% {^}", "+OFRPBTS": "{^} %%%% {}", "+AOFRPBTS": "{} %%%% {}", "+*FRPBTS": "{^} %%%% {^}{-|}", "+A*FRPBTS": "{} %%%% {^}{-|}", "+O*FRPBTS": "{^} %%%% {}{-|}", "+AO*FRPBTS": "{} %%%% {}{-|}", "+EFRPBTS": "{^} \u2030\u2030\u2030\u2030 {^}", "+AEFRPBTS": "{} \u2030\u2030\u2030\u2030 {^}", "+OEFRPBTS": "{^} \u2030\u2030\u2030\u2030 {}", "+AOEFRPBTS": "{} \u2030\u2030\u2030\u2030 {}", "+*EFRPBTS": "{^} \u2030\u2030\u2030\u2030 {^}{-|}", "+A*EFRPBTS": "{} \u2030\u2030\u2030\u2030 {^}{-|}", "+O*EFRPBTS": "{^} \u2030\u2030\u2030\u2030 {}{-|}", "+AO*EFRPBTS": "{} \u2030\u2030\u2030\u2030 {}{-|}", "+UFRPBTS": "{^} \u2031\u2031\u2031\u2031 {^}", "+AUFRPBTS": "{} \u2031\u2031\u2031\u2031 {^}", "+OUFRPBTS": "{^} \u2031\u2031\u2031\u2031 {}", "+AOUFRPBTS": "{} \u2031\u2031\u2031\u2031 {}", "+*UFRPBTS": "{^} \u2031\u2031\u2031\u2031 {^}{-|}", "+A*UFRPBTS": "{} \u2031\u2031\u2031\u2031 {^}{-|}", "+O*UFRPBTS": "{^} \u2031\u2031\u2031\u2031 {}{-|}", "+AO*UFRPBTS": "{} \u2031\u2031\u2031\u2031 {}{-|}", "+EUFRPBTS": "{^} \u03c6\u03c6\u03c6\u03c6 {^}", "+AEUFRPBTS": "{} \u03c6\u03c6\u03c6\u03c6 {^}", "+OEUFRPBTS": "{^} \u03c6\u03c6\u03c6\u03c6 {}", "+AOEUFRPBTS": "{} \u03c6\u03c6\u03c6\u03c6 {}", "+*EUFRPBTS": "{^} \u03c6\u03c6\u03c6\u03c6 {^}{-|}", "+A*EUFRPBTS": "{} \u03c6\u03c6\u03c6\u03c6 {^}{-|}", "+O*EUFRPBTS": "{^} \u03c6\u03c6\u03c6\u03c6 {}{-|}", "+AO*EUFRPBTS": "{} \u03c6\u03c6\u03c6\u03c6 {}{-|}", "+LTS": "{^} **** {^}", "+ALTS": "{} **** {^}", "+OLTS": "{^} **** {}", "+AOLTS": "{} **** {}", "+*LTS": "{^} **** {^}{-|}", "+A*LTS": "{} **** {^}{-|}", "+O*LTS": "{^} **** {}{-|}", "+AO*LTS": "{} **** {}{-|}", "+ELTS": "{^} \u220f\u220f\u220f\u220f {^}", "+AELTS": "{} \u220f\u220f\u220f\u220f {^}", "+OELTS": "{^} \u220f\u220f\u220f\u220f {}", "+AOELTS": "{} \u220f\u220f\u220f\u220f {}", "+*ELTS": "{^} \u220f\u220f\u220f\u220f {^}{-|}", "+A*ELTS": "{} \u220f\u220f\u220f\u220f {^}{-|}", "+O*ELTS": "{^} \u220f\u220f\u220f\u220f {}{-|}", "+AO*ELTS": "{} \u220f\u220f\u220f\u220f {}{-|}", "+ULTS": "{^} \u00a7\u00a7\u00a7\u00a7 {^}", "+AULTS": "{} \u00a7\u00a7\u00a7\u00a7 {^}", "+OULTS": "{^} \u00a7\u00a7\u00a7\u00a7 {}", "+AOULTS": "{} \u00a7\u00a7\u00a7\u00a7 {}", "+*ULTS": "{^} \u00a7\u00a7\u00a7\u00a7 {^}{-|}", "+A*ULTS": "{} \u00a7\u00a7\u00a7\u00a7 {^}{-|}", "+O*ULTS": "{^} \u00a7\u00a7\u00a7\u00a7 {}{-|}", "+AO*ULTS": "{} \u00a7\u00a7\u00a7\u00a7 {}{-|}", "+EULTS": "{^} \u00d7\u00d7\u00d7\u00d7 {^}", "+AEULTS": "{} \u00d7\u00d7\u00d7\u00d7 {^}", "+OEULTS": "{^} \u00d7\u00d7\u00d7\u00d7 {}", "+AOEULTS": "{} \u00d7\u00d7\u00d7\u00d7 {}", "+*EULTS": "{^} \u00d7\u00d7\u00d7\u00d7 {^}{-|}", "+A*EULTS": "{} \u00d7\u00d7\u00d7\u00d7 {^}{-|}", "+O*EULTS": "{^} \u00d7\u00d7\u00d7\u00d7 {}{-|}", "+AO*EULTS": "{} \u00d7\u00d7\u00d7\u00d7 {}{-|}", "+FLTS": "{^} {*-|}{*-|}{*-|}{*-|} {^}", "+AFLTS": "{} {*-|}{*-|}{*-|}{*-|} {^}", "+OFLTS": "{^} {*-|}{*-|}{*-|}{*-|} {}", "+AOFLTS": "{} {*-|}{*-|}{*-|}{*-|} {}", "+*FLTS": "{^} {*-|}{*-|}{*-|}{*-|} {^}{-|}", "+A*FLTS": "{} {*-|}{*-|}{*-|}{*-|} {^}{-|}", "+O*FLTS": "{^} {*-|}{*-|}{*-|}{*-|} {}{-|}", "+AO*FLTS": "{} {*-|}{*-|}{*-|}{*-|} {}{-|}", "+EFLTS": "{^} {*<}{*<}{*<}{*<} {^}", "+AEFLTS": "{} {*<}{*<}{*<}{*<} {^}", "+OEFLTS": "{^} {*<}{*<}{*<}{*<} {}", "+AOEFLTS": "{} {*<}{*<}{*<}{*<} {}", "+*EFLTS": "{^} {*<}{*<}{*<}{*<} {^}{-|}", "+A*EFLTS": "{} {*<}{*<}{*<}{*<} {^}{-|}", "+O*EFLTS": "{^} {*<}{*<}{*<}{*<} {}{-|}", "+AO*EFLTS": "{} {*<}{*<}{*<}{*<} {}{-|}", "+UFLTS": "{^} {<}{<}{<}{<} {^}", "+AUFLTS": "{} {<}{<}{<}{<} {^}", "+OUFLTS": "{^} {<}{<}{<}{<} {}", "+AOUFLTS": "{} {<}{<}{<}{<} {}", "+*UFLTS": "{^} {<}{<}{<}{<} {^}{-|}", "+A*UFLTS": "{} {<}{<}{<}{<} {^}{-|}", "+O*UFLTS": "{^} {<}{<}{<}{<} {}{-|}", "+AO*UFLTS": "{} {<}{<}{<}{<} {}{-|}", "+EUFLTS": "{^} {*>}{*>}{*>}{*>} {^}", "+AEUFLTS": "{} {*>}{*>}{*>}{*>} {^}", "+OEUFLTS": "{^} {*>}{*>}{*>}{*>} {}", "+AOEUFLTS": "{} {*>}{*>}{*>}{*>} {}", "+*EUFLTS": "{^} {*>}{*>}{*>}{*>} {^}{-|}", "+A*EUFLTS": "{} {*>}{*>}{*>}{*>} {^}{-|}", "+O*EUFLTS": "{^} {*>}{*>}{*>}{*>} {}{-|}", "+AO*EUFLTS": "{} {*>}{*>}{*>}{*>} {}{-|}", "+APLTS": "{} ---- {^}", "+OPLTS": "{^} ---- {}", "+AOPLTS": "{} ---- {}", "+*PLTS": "{^} ---- {^}{-|}", "+A*PLTS": "{} ---- {^}{-|}", "+O*PLTS": "{^} ---- {}{-|}", "+AO*PLTS": "{} ---- {}{-|}", "+EPLTS": "{^} \u2212\u2212\u2212\u2212 {^}", "+AEPLTS": "{} \u2212\u2212\u2212\u2212 {^}", "+OEPLTS": "{^} \u2212\u2212\u2212\u2212 {}", "+AOEPLTS": "{} \u2212\u2212\u2212\u2212 {}", "+*EPLTS": "{^} \u2212\u2212\u2212\u2212 {^}{-|}", "+A*EPLTS": "{} \u2212\u2212\u2212\u2212 {^}{-|}", "+O*EPLTS": "{^} \u2212\u2212\u2212\u2212 {}{-|}", "+AO*EPLTS": "{} \u2212\u2212\u2212\u2212 {}{-|}", "+UPLTS": "{^} \u2013\u2013\u2013\u2013 {^}", "+AUPLTS": "{} \u2013\u2013\u2013\u2013 {^}", "+OUPLTS": "{^} \u2013\u2013\u2013\u2013 {}", "+AOUPLTS": "{} \u2013\u2013\u2013\u2013 {}", "+*UPLTS": "{^} \u2013\u2013\u2013\u2013 {^}{-|}", "+A*UPLTS": "{} \u2013\u2013\u2013\u2013 {^}{-|}", "+O*UPLTS": "{^} \u2013\u2013\u2013\u2013 {}{-|}", "+AO*UPLTS": "{} \u2013\u2013\u2013\u2013 {}{-|}", "+EUPLTS": "{^} \u2014\u2014\u2014\u2014 {^}", "+AEUPLTS": "{} \u2014\u2014\u2014\u2014 {^}", "+OEUPLTS": "{^} \u2014\u2014\u2014\u2014 {}", "+AOEUPLTS": "{} \u2014\u2014\u2014\u2014 {}", "+*EUPLTS": "{^} \u2014\u2014\u2014\u2014 {^}{-|}", "+A*EUPLTS": "{} \u2014\u2014\u2014\u2014 {^}{-|}", "+O*EUPLTS": "{^} \u2014\u2014\u2014\u2014 {}{-|}", "+AO*EUPLTS": "{} \u2014\u2014\u2014\u2014 {}{-|}", "+FPLTS": "{^} (((( {^}", "+AFPLTS": "{} (((( {^}", "+OFPLTS": "{^} (((( {}", "+AOFPLTS": "{} (((( {}", "+*FPLTS": "{^} (((( {^}{-|}", "+A*FPLTS": "{} (((( {^}{-|}", "+O*FPLTS": "{^} (((( {}{-|}", "+AO*FPLTS": "{} (((( {}{-|}", "+EFPLTS": "{^} [[[[ {^}", "+AEFPLTS": "{} [[[[ {^}", "+OEFPLTS": "{^} [[[[ {}", "+AOEFPLTS": "{} [[[[ {}", "+*EFPLTS": "{^} [[[[ {^}{-|}", "+A*EFPLTS": "{} [[[[ {^}{-|}", "+O*EFPLTS": "{^} [[[[ {}{-|}", "+AO*EFPLTS": "{} [[[[ {}{-|}", "+UFPLTS": "{^} <<<< {^}", "+AUFPLTS": "{} <<<< {^}", "+OUFPLTS": "{^} <<<< {}", "+AOUFPLTS": "{} <<<< {}", "+*UFPLTS": "{^} <<<< {^}{-|}", "+A*UFPLTS": "{} <<<< {^}{-|}", "+O*UFPLTS": "{^} <<<< {}{-|}", "+AO*UFPLTS": "{} <<<< {}{-|}", "+EUFPLTS": "{^} {{{{ {^}", "+AEUFPLTS": "{} {{{{ {^}", "+OEUFPLTS": "{^} {{{{ {}", "+AOEUFPLTS": "{} {{{{ {}", "+*EUFPLTS": "{^} {{{{ {^}{-|}", "+A*EUFPLTS": "{} {{{{ {^}{-|}", "+O*EUFPLTS": "{^} {{{{ {}{-|}", "+AO*EUFPLTS": "{} {{{{ {}{-|}", "+FPBLTS": "{^} \u2191\u2191\u2191\u2191 {^}", "+AFPBLTS": "{} \u2191\u2191\u2191\u2191 {^}", "+OFPBLTS": "{^} \u2191\u2191\u2191\u2191 {}", "+AOFPBLTS": "{} \u2191\u2191\u2191\u2191 {}", "+*FPBLTS": "{^} \u2191\u2191\u2191\u2191 {^}{-|}", "+A*FPBLTS": "{} \u2191\u2191\u2191\u2191 {^}{-|}", "+O*FPBLTS": "{^} \u2191\u2191\u2191\u2191 {}{-|}", "+AO*FPBLTS": "{} \u2191\u2191\u2191\u2191 {}{-|}", "+EFPBLTS": "{^} \u2190\u2190\u2190\u2190 {^}", "+AEFPBLTS": "{} \u2190\u2190\u2190\u2190 {^}", "+OEFPBLTS": "{^} \u2190\u2190\u2190\u2190 {}", "+AOEFPBLTS": "{} \u2190\u2190\u2190\u2190 {}", "+*EFPBLTS": "{^} \u2190\u2190\u2190\u2190 {^}{-|}", "+A*EFPBLTS": "{} \u2190\u2190\u2190\u2190 {^}{-|}", "+O*EFPBLTS": "{^} \u2190\u2190\u2190\u2190 {}{-|}", "+AO*EFPBLTS": "{} \u2190\u2190\u2190\u2190 {}{-|}", "+UFPBLTS": "{^} \u2192\u2192\u2192\u2192 {^}", "+AUFPBLTS": "{} \u2192\u2192\u2192\u2192 {^}", "+OUFPBLTS": "{^} \u2192\u2192\u2192\u2192 {}", "+AOUFPBLTS": "{} \u2192\u2192\u2192\u2192 {}", "+*UFPBLTS": "{^} \u2192\u2192\u2192\u2192 {^}{-|}", "+A*UFPBLTS": "{} \u2192\u2192\u2192\u2192 {^}{-|}", "+O*UFPBLTS": "{^} \u2192\u2192\u2192\u2192 {}{-|}", "+AO*UFPBLTS": "{} \u2192\u2192\u2192\u2192 {}{-|}", "+EUFPBLTS": "{^} \u2193\u2193\u2193\u2193 {^}", "+AEUFPBLTS": "{} \u2193\u2193\u2193\u2193 {^}", "+OEUFPBLTS": "{^} \u2193\u2193\u2193\u2193 {}", "+AOEUFPBLTS": "{} \u2193\u2193\u2193\u2193 {}", "+*EUFPBLTS": "{^} \u2193\u2193\u2193\u2193 {^}{-|}", "+A*EUFPBLTS": "{} \u2193\u2193\u2193\u2193 {^}{-|}", "+O*EUFPBLTS": "{^} \u2193\u2193\u2193\u2193 {}{-|}", "+AO*EUFPBLTS": "{} \u2193\u2193\u2193\u2193 {}{-|}", "+ARPBLTS": "{} $$$$ {^}", "+ORPBLTS": "{^} $$$$ {}", "+AORPBLTS": "{} $$$$ {}", "+*RPBLTS": "{^} $$$$ {^}{-|}", "+A*RPBLTS": "{} $$$$ {^}{-|}", "+O*RPBLTS": "{^} $$$$ {}{-|}", "+AO*RPBLTS": "{} $$$$ {}{-|}", "+ERPBLTS": "{^} \u00a5\u00a5\u00a5\u00a5 {^}", "+AERPBLTS": "{} \u00a5\u00a5\u00a5\u00a5 {^}", "+OERPBLTS": "{^} \u00a5\u00a5\u00a5\u00a5 {}", "+AOERPBLTS": "{} \u00a5\u00a5\u00a5\u00a5 {}", "+*ERPBLTS": "{^} \u00a5\u00a5\u00a5\u00a5 {^}{-|}", "+A*ERPBLTS": "{} \u00a5\u00a5\u00a5\u00a5 {^}{-|}", "+O*ERPBLTS": "{^} \u00a5\u00a5\u00a5\u00a5 {}{-|}", "+AO*ERPBLTS": "{} \u00a5\u00a5\u00a5\u00a5 {}{-|}", "+URPBLTS": "{^} \u20ac\u20ac\u20ac\u20ac {^}", "+AURPBLTS": "{} \u20ac\u20ac\u20ac\u20ac {^}", "+OURPBLTS": "{^} \u20ac\u20ac\u20ac\u20ac {}", "+AOURPBLTS": "{} \u20ac\u20ac\u20ac\u20ac {}", "+*URPBLTS": "{^} \u20ac\u20ac\u20ac\u20ac {^}{-|}", "+A*URPBLTS": "{} \u20ac\u20ac\u20ac\u20ac {^}{-|}", "+O*URPBLTS": "{^} \u20ac\u20ac\u20ac\u20ac {}{-|}", "+AO*URPBLTS": "{} \u20ac\u20ac\u20ac\u20ac {}{-|}", "+EURPBLTS": "{^} \u00a3\u00a3\u00a3\u00a3 {^}", "+AEURPBLTS": "{} \u00a3\u00a3\u00a3\u00a3 {^}", "+OEURPBLTS": "{^} \u00a3\u00a3\u00a3\u00a3 {}", "+AOEURPBLTS": "{} \u00a3\u00a3\u00a3\u00a3 {}", "+*EURPBLTS": "{^} \u00a3\u00a3\u00a3\u00a3 {^}{-|}", "+A*EURPBLTS": "{} \u00a3\u00a3\u00a3\u00a3 {^}{-|}", "+O*EURPBLTS": "{^} \u00a3\u00a3\u00a3\u00a3 {}{-|}", "+AO*EURPBLTS": "{} \u00a3\u00a3\u00a3\u00a3 {}{-|}", "+GTS": "{^} ++++ {^}", "+AGTS": "{} ++++ {^}", "+OGTS": "{^} ++++ {}", "+AOGTS": "{} ++++ {}", "+*GTS": "{^} ++++ {^}{-|}", "+A*GTS": "{} ++++ {^}{-|}", "+O*GTS": "{^} ++++ {}{-|}", "+AO*GTS": "{} ++++ {}{-|}", "+EGTS": "{^} \u2211\u2211\u2211\u2211 {^}", "+AEGTS": "{} \u2211\u2211\u2211\u2211 {^}", "+OEGTS": "{^} \u2211\u2211\u2211\u2211 {}", "+AOEGTS": "{} \u2211\u2211\u2211\u2211 {}", "+*EGTS": "{^} \u2211\u2211\u2211\u2211 {^}{-|}", "+A*EGTS": "{} \u2211\u2211\u2211\u2211 {^}{-|}", "+O*EGTS": "{^} \u2211\u2211\u2211\u2211 {}{-|}", "+AO*EGTS": "{} \u2211\u2211\u2211\u2211 {}{-|}", "+UGTS": "{^} \u00b6\u00b6\u00b6\u00b6 {^}", "+AUGTS": "{} \u00b6\u00b6\u00b6\u00b6 {^}", "+OUGTS": "{^} \u00b6\u00b6\u00b6\u00b6 {}", "+AOUGTS": "{} \u00b6\u00b6\u00b6\u00b6 {}", "+*UGTS": "{^} \u00b6\u00b6\u00b6\u00b6 {^}{-|}", "+A*UGTS": "{} \u00b6\u00b6\u00b6\u00b6 {^}{-|}", "+O*UGTS": "{^} \u00b6\u00b6\u00b6\u00b6 {}{-|}", "+AO*UGTS": "{} \u00b6\u00b6\u00b6\u00b6 {}{-|}", "+EUGTS": "{^} \u00b1\u00b1\u00b1\u00b1 {^}", "+AEUGTS": "{} \u00b1\u00b1\u00b1\u00b1 {^}", "+OEUGTS": "{^} \u00b1\u00b1\u00b1\u00b1 {}", "+AOEUGTS": "{} \u00b1\u00b1\u00b1\u00b1 {}", "+*EUGTS": "{^} \u00b1\u00b1\u00b1\u00b1 {^}{-|}", "+A*EUGTS": "{} \u00b1\u00b1\u00b1\u00b1 {^}{-|}", "+O*EUGTS": "{^} \u00b1\u00b1\u00b1\u00b1 {}{-|}", "+AO*EUGTS": "{} \u00b1\u00b1\u00b1\u00b1 {}{-|}", "+FGTS": "{^} {#Tab}{#Tab}{#Tab}{#Tab} {^}", "+AFGTS": "{} {#Tab}{#Tab}{#Tab}{#Tab} {^}", "+OFGTS": "{^} {#Tab}{#Tab}{#Tab}{#Tab} {}", "+AOFGTS": "{} {#Tab}{#Tab}{#Tab}{#Tab} {}", "+*FGTS": "{^} {#Tab}{#Tab}{#Tab}{#Tab} {^}{-|}", "+A*FGTS": "{} {#Tab}{#Tab}{#Tab}{#Tab} {^}{-|}", "+O*FGTS": "{^} {#Tab}{#Tab}{#Tab}{#Tab} {}{-|}", "+AO*FGTS": "{} {#Tab}{#Tab}{#Tab}{#Tab} {}{-|}", "+EFGTS": "{^} {#Backspace}{#Backspace}{#Backspace}{#Backspace} {^}", "+AEFGTS": "{} {#Backspace}{#Backspace}{#Backspace}{#Backspace} {^}", "+OEFGTS": "{^} {#Backspace}{#Backspace}{#Backspace}{#Backspace} {}", "+AOEFGTS": "{} {#Backspace}{#Backspace}{#Backspace}{#Backspace} {}", "+*EFGTS": "{^} {#Backspace}{#Backspace}{#Backspace}{#Backspace} {^}{-|}", "+A*EFGTS": "{} {#Backspace}{#Backspace}{#Backspace}{#Backspace} {^}{-|}", "+O*EFGTS": "{^} {#Backspace}{#Backspace}{#Backspace}{#Backspace} {}{-|}", "+AO*EFGTS": "{} {#Backspace}{#Backspace}{#Backspace}{#Backspace} {}{-|}", "+UFGTS": "{^} {#Delete}{#Delete}{#Delete}{#Delete} {^}", "+AUFGTS": "{} {#Delete}{#Delete}{#Delete}{#Delete} {^}", "+OUFGTS": "{^} {#Delete}{#Delete}{#Delete}{#Delete} {}", "+AOUFGTS": "{} {#Delete}{#Delete}{#Delete}{#Delete} {}", "+*UFGTS": "{^} {#Delete}{#Delete}{#Delete}{#Delete} {^}{-|}", "+A*UFGTS": "{} {#Delete}{#Delete}{#Delete}{#Delete} {^}{-|}", "+O*UFGTS": "{^} {#Delete}{#Delete}{#Delete}{#Delete} {}{-|}", "+AO*UFGTS": "{} {#Delete}{#Delete}{#Delete}{#Delete} {}{-|}", "+EUFGTS": "{^} {#Escape}{#Escape}{#Escape}{#Escape} {^}", "+AEUFGTS": "{} {#Escape}{#Escape}{#Escape}{#Escape} {^}", "+OEUFGTS": "{^} {#Escape}{#Escape}{#Escape}{#Escape} {}", "+AOEUFGTS": "{} {#Escape}{#Escape}{#Escape}{#Escape} {}", "+*EUFGTS": "{^} {#Escape}{#Escape}{#Escape}{#Escape} {^}{-|}", "+A*EUFGTS": "{} {#Escape}{#Escape}{#Escape}{#Escape} {^}{-|}", "+O*EUFGTS": "{^} {#Escape}{#Escape}{#Escape}{#Escape} {}{-|}", "+AO*EUFGTS": "{} {#Escape}{#Escape}{#Escape}{#Escape} {}{-|}", "+ARPGTS": "{} ^^^^ {^}", "+ORPGTS": "{^} ^^^^ {}", "+AORPGTS": "{} ^^^^ {}", "+*RPGTS": "{^} ^^^^ {^}{-|}", "+A*RPGTS": "{} ^^^^ {^}{-|}", "+O*RPGTS": "{^} ^^^^ {}{-|}", "+AO*RPGTS": "{} ^^^^ {}{-|}", "+ERPGTS": "{^} \u00ab\u00ab\u00ab\u00ab {^}", "+AERPGTS": "{} \u00ab\u00ab\u00ab\u00ab {^}", "+OERPGTS": "{^} \u00ab\u00ab\u00ab\u00ab {}", "+AOERPGTS": "{} \u00ab\u00ab\u00ab\u00ab {}", "+*ERPGTS": "{^} \u00ab\u00ab\u00ab\u00ab {^}{-|}", "+A*ERPGTS": "{} \u00ab\u00ab\u00ab\u00ab {^}{-|}", "+O*ERPGTS": "{^} \u00ab\u00ab\u00ab\u00ab {}{-|}", "+AO*ERPGTS": "{} \u00ab\u00ab\u00ab\u00ab {}{-|}", "+URPGTS": "{^} \u00bb\u00bb\u00bb\u00bb {^}", "+AURPGTS": "{} \u00bb\u00bb\u00bb\u00bb {^}", "+OURPGTS": "{^} \u00bb\u00bb\u00bb\u00bb {}", "+AOURPGTS": "{} \u00bb\u00bb\u00bb\u00bb {}", "+*URPGTS": "{^} \u00bb\u00bb\u00bb\u00bb {^}{-|}", "+A*URPGTS": "{} \u00bb\u00bb\u00bb\u00bb {^}{-|}", "+O*URPGTS": "{^} \u00bb\u00bb\u00bb\u00bb {}{-|}", "+AO*URPGTS": "{} \u00bb\u00bb\u00bb\u00bb {}{-|}", "+EURPGTS": "{^} \u00b0\u00b0\u00b0\u00b0 {^}", "+AEURPGTS": "{} \u00b0\u00b0\u00b0\u00b0 {^}", "+OEURPGTS": "{^} \u00b0\u00b0\u00b0\u00b0 {}", "+AOEURPGTS": "{} \u00b0\u00b0\u00b0\u00b0 {}", "+*EURPGTS": "{^} \u00b0\u00b0\u00b0\u00b0 {^}{-|}", "+A*EURPGTS": "{} \u00b0\u00b0\u00b0\u00b0 {^}{-|}", "+O*EURPGTS": "{^} \u00b0\u00b0\u00b0\u00b0 {}{-|}", "+AO*EURPGTS": "{} \u00b0\u00b0\u00b0\u00b0 {}{-|}", "+BGTS": "{^} ____ {^}", "+ABGTS": "{} ____ {^}", "+OBGTS": "{^} ____ {}", "+AOBGTS": "{} ____ {}", "+*BGTS": "{^} ____ {^}{-|}", "+A*BGTS": "{} ____ {^}{-|}", "+O*BGTS": "{^} ____ {}{-|}", "+AO*BGTS": "{} ____ {}{-|}", "+EBGTS": "{^} \u2264\u2264\u2264\u2264 {^}", "+AEBGTS": "{} \u2264\u2264\u2264\u2264 {^}", "+OEBGTS": "{^} \u2264\u2264\u2264\u2264 {}", "+AOEBGTS": "{} \u2264\u2264\u2264\u2264 {}", "+*EBGTS": "{^} \u2264\u2264\u2264\u2264 {^}{-|}", "+A*EBGTS": "{} \u2264\u2264\u2264\u2264 {^}{-|}", "+O*EBGTS": "{^} \u2264\u2264\u2264\u2264 {}{-|}", "+AO*EBGTS": "{} \u2264\u2264\u2264\u2264 {}{-|}", "+UBGTS": "{^} \u2265\u2265\u2265\u2265 {^}", "+AUBGTS": "{} \u2265\u2265\u2265\u2265 {^}", "+OUBGTS": "{^} \u2265\u2265\u2265\u2265 {}", "+AOUBGTS": "{} \u2265\u2265\u2265\u2265 {}", "+*UBGTS": "{^} \u2265\u2265\u2265\u2265 {^}{-|}", "+A*UBGTS": "{} \u2265\u2265\u2265\u2265 {^}{-|}", "+O*UBGTS": "{^} \u2265\u2265\u2265\u2265 {}{-|}", "+AO*UBGTS": "{} \u2265\u2265\u2265\u2265 {}{-|}", "+EUBGTS": "{^} \u00b5\u00b5\u00b5\u00b5 {^}", "+AEUBGTS": "{} \u00b5\u00b5\u00b5\u00b5 {^}", "+OEUBGTS": "{^} \u00b5\u00b5\u00b5\u00b5 {}", "+AOEUBGTS": "{} \u00b5\u00b5\u00b5\u00b5 {}", "+*EUBGTS": "{^} \u00b5\u00b5\u00b5\u00b5 {^}{-|}", "+A*EUBGTS": "{} \u00b5\u00b5\u00b5\u00b5 {^}{-|}", "+O*EUBGTS": "{^} \u00b5\u00b5\u00b5\u00b5 {}{-|}", "+AO*EUBGTS": "{} \u00b5\u00b5\u00b5\u00b5 {}{-|}", "+FBGTS": "{^} &&&& {^}", "+AFBGTS": "{} &&&& {^}", "+OFBGTS": "{^} &&&& {}", "+AOFBGTS": "{} &&&& {}", "+*FBGTS": "{^} &&&& {^}{-|}", "+A*FBGTS": "{} &&&& {^}{-|}", "+O*FBGTS": "{^} &&&& {}{-|}", "+AO*FBGTS": "{} &&&& {}{-|}", "+EFBGTS": "{^} \u2229\u2229\u2229\u2229 {^}", "+AEFBGTS": "{} \u2229\u2229\u2229\u2229 {^}", "+OEFBGTS": "{^} \u2229\u2229\u2229\u2229 {}", "+AOEFBGTS": "{} \u2229\u2229\u2229\u2229 {}", "+*EFBGTS": "{^} \u2229\u2229\u2229\u2229 {^}{-|}", "+A*EFBGTS": "{} \u2229\u2229\u2229\u2229 {^}{-|}", "+O*EFBGTS": "{^} \u2229\u2229\u2229\u2229 {}{-|}", "+AO*EFBGTS": "{} \u2229\u2229\u2229\u2229 {}{-|}", "+UFBGTS": "{^} \u2227\u2227\u2227\u2227 {^}", "+AUFBGTS": "{} \u2227\u2227\u2227\u2227 {^}", "+OUFBGTS": "{^} \u2227\u2227\u2227\u2227 {}", "+AOUFBGTS": "{} \u2227\u2227\u2227\u2227 {}", "+*UFBGTS": "{^} \u2227\u2227\u2227\u2227 {^}{-|}", "+A*UFBGTS": "{} \u2227\u2227\u2227\u2227 {^}{-|}", "+O*UFBGTS": "{^} \u2227\u2227\u2227\u2227 {}{-|}", "+AO*UFBGTS": "{} \u2227\u2227\u2227\u2227 {}{-|}", "+EUFBGTS": "{^} \u2208\u2208\u2208\u2208 {^}", "+AEUFBGTS": "{} \u2208\u2208\u2208\u2208 {^}", "+OEUFBGTS": "{^} \u2208\u2208\u2208\u2208 {}", "+AOEUFBGTS": "{} \u2208\u2208\u2208\u2208 {}", "+*EUFBGTS": "{^} \u2208\u2208\u2208\u2208 {^}{-|}", "+A*EUFBGTS": "{} \u2208\u2208\u2208\u2208 {^}{-|}", "+O*EUFBGTS": "{^} \u2208\u2208\u2208\u2208 {}{-|}", "+AO*EUFBGTS": "{} \u2208\u2208\u2208\u2208 {}{-|}", "+ARBGTS": "{} )))) {^}", "+ORBGTS": "{^} )))) {}", "+AORBGTS": "{} )))) {}", "+*RBGTS": "{^} )))) {^}{-|}", "+A*RBGTS": "{} )))) {^}{-|}", "+O*RBGTS": "{^} )))) {}{-|}", "+AO*RBGTS": "{} )))) {}{-|}", "+ERBGTS": "{^} ]]]] {^}", "+AERBGTS": "{} ]]]] {^}", "+OERBGTS": "{^} ]]]] {}", "+AOERBGTS": "{} ]]]] {}", "+*ERBGTS": "{^} ]]]] {^}{-|}", "+A*ERBGTS": "{} ]]]] {^}{-|}", "+O*ERBGTS": "{^} ]]]] {}{-|}", "+AO*ERBGTS": "{} ]]]] {}{-|}", "+URBGTS": "{^} >>>> {^}", "+AURBGTS": "{} >>>> {^}", "+OURBGTS": "{^} >>>> {}", "+AOURBGTS": "{} >>>> {}", "+*URBGTS": "{^} >>>> {^}{-|}", "+A*URBGTS": "{} >>>> {^}{-|}", "+O*URBGTS": "{^} >>>> {}{-|}", "+AO*URBGTS": "{} >>>> {}{-|}", "+EURBGTS": "{^} }}}} {^}", "+AEURBGTS": "{} }}}} {^}", "+OEURBGTS": "{^} }}}} {}", "+AOEURBGTS": "{} }}}} {}", "+*EURBGTS": "{^} }}}} {^}{-|}", "+A*EURBGTS": "{} }}}} {^}{-|}", "+O*EURBGTS": "{^} }}}} {}{-|}", "+AO*EURBGTS": "{} }}}} {}{-|}", "+FRBGTS": "{^} {#AudioPlay}{#AudioPlay}{#AudioPlay}{#AudioPlay} {^}", "+AFRBGTS": "{} {#AudioPlay}{#AudioPlay}{#AudioPlay}{#AudioPlay} {^}", "+OFRBGTS": "{^} {#AudioPlay}{#AudioPlay}{#AudioPlay}{#AudioPlay} {}", "+AOFRBGTS": "{} {#AudioPlay}{#AudioPlay}{#AudioPlay}{#AudioPlay} {}", "+*FRBGTS": "{^} {#AudioPlay}{#AudioPlay}{#AudioPlay}{#AudioPlay} {^}{-|}", "+A*FRBGTS": "{} {#AudioPlay}{#AudioPlay}{#AudioPlay}{#AudioPlay} {^}{-|}", "+O*FRBGTS": "{^} {#AudioPlay}{#AudioPlay}{#AudioPlay}{#AudioPlay} {}{-|}", "+AO*FRBGTS": "{} {#AudioPlay}{#AudioPlay}{#AudioPlay}{#AudioPlay} {}{-|}", "+EFRBGTS": "{^} {#AudioPrev}{#AudioPrev}{#AudioPrev}{#AudioPrev} {^}", "+AEFRBGTS": "{} {#AudioPrev}{#AudioPrev}{#AudioPrev}{#AudioPrev} {^}", "+OEFRBGTS": "{^} {#AudioPrev}{#AudioPrev}{#AudioPrev}{#AudioPrev} {}", "+AOEFRBGTS": "{} {#AudioPrev}{#AudioPrev}{#AudioPrev}{#AudioPrev} {}", "+*EFRBGTS": "{^} {#AudioPrev}{#AudioPrev}{#AudioPrev}{#AudioPrev} {^}{-|}", "+A*EFRBGTS": "{} {#AudioPrev}{#AudioPrev}{#AudioPrev}{#AudioPrev} {^}{-|}", "+O*EFRBGTS": "{^} {#AudioPrev}{#AudioPrev}{#AudioPrev}{#AudioPrev} {}{-|}", "+AO*EFRBGTS": "{} {#AudioPrev}{#AudioPrev}{#AudioPrev}{#AudioPrev} {}{-|}", "+UFRBGTS": "{^} {#AudioNext}{#AudioNext}{#AudioNext}{#AudioNext} {^}", "+AUFRBGTS": "{} {#AudioNext}{#AudioNext}{#AudioNext}{#AudioNext} {^}", "+OUFRBGTS": "{^} {#AudioNext}{#AudioNext}{#AudioNext}{#AudioNext} {}", "+AOUFRBGTS": "{} {#AudioNext}{#AudioNext}{#AudioNext}{#AudioNext} {}", "+*UFRBGTS": "{^} {#AudioNext}{#AudioNext}{#AudioNext}{#AudioNext} {^}{-|}", "+A*UFRBGTS": "{} {#AudioNext}{#AudioNext}{#AudioNext}{#AudioNext} {^}{-|}", "+O*UFRBGTS": "{^} {#AudioNext}{#AudioNext}{#AudioNext}{#AudioNext} {}{-|}", "+AO*UFRBGTS": "{} {#AudioNext}{#AudioNext}{#AudioNext}{#AudioNext} {}{-|}", "+EUFRBGTS": "{^} {#AudioStop}{#AudioStop}{#AudioStop}{#AudioStop} {^}", "+AEUFRBGTS": "{} {#AudioStop}{#AudioStop}{#AudioStop}{#AudioStop} {^}", "+OEUFRBGTS": "{^} {#AudioStop}{#AudioStop}{#AudioStop}{#AudioStop} {}", "+AOEUFRBGTS": "{} {#AudioStop}{#AudioStop}{#AudioStop}{#AudioStop} {}", "+*EUFRBGTS": "{^} {#AudioStop}{#AudioStop}{#AudioStop}{#AudioStop} {^}{-|}", "+A*EUFRBGTS": "{} {#AudioStop}{#AudioStop}{#AudioStop}{#AudioStop} {^}{-|}", "+O*EUFRBGTS": "{^} {#AudioStop}{#AudioStop}{#AudioStop}{#AudioStop} {}{-|}", "+AO*EUFRBGTS": "{} {#AudioStop}{#AudioStop}{#AudioStop}{#AudioStop} {}{-|}", "+FPBGTS": "{^} ~~~~ {^}", "+AFPBGTS": "{} ~~~~ {^}", "+OFPBGTS": "{^} ~~~~ {}", "+AOFPBGTS": "{} ~~~~ {}", "+*FPBGTS": "{^} ~~~~ {^}{-|}", "+A*FPBGTS": "{} ~~~~ {^}{-|}", "+O*FPBGTS": "{^} ~~~~ {}{-|}", "+AO*FPBGTS": "{} ~~~~ {}{-|}", "+EFPBGTS": "{^} \u2286\u2286\u2286\u2286 {^}", "+AEFPBGTS": "{} \u2286\u2286\u2286\u2286 {^}", "+OEFPBGTS": "{^} \u2286\u2286\u2286\u2286 {}", "+AOEFPBGTS": "{} \u2286\u2286\u2286\u2286 {}", "+*EFPBGTS": "{^} \u2286\u2286\u2286\u2286 {^}{-|}", "+A*EFPBGTS": "{} \u2286\u2286\u2286\u2286 {^}{-|}", "+O*EFPBGTS": "{^} \u2286\u2286\u2286\u2286 {}{-|}", "+AO*EFPBGTS": "{} \u2286\u2286\u2286\u2286 {}{-|}", "+UFPBGTS": "{^} \u2287\u2287\u2287\u2287 {^}", "+AUFPBGTS": "{} \u2287\u2287\u2287\u2287 {^}", "+OUFPBGTS": "{^} \u2287\u2287\u2287\u2287 {}", "+AOUFPBGTS": "{} \u2287\u2287\u2287\u2287 {}", "+*UFPBGTS": "{^} \u2287\u2287\u2287\u2287 {^}{-|}", "+A*UFPBGTS": "{} \u2287\u2287\u2287\u2287 {^}{-|}", "+O*UFPBGTS": "{^} \u2287\u2287\u2287\u2287 {}{-|}", "+AO*UFPBGTS": "{} \u2287\u2287\u2287\u2287 {}{-|}", "+EUFPBGTS": "{^} \u02dc\u02dc\u02dc\u02dc {^}", "+AEUFPBGTS": "{} \u02dc\u02dc\u02dc\u02dc {^}", "+OEUFPBGTS": "{^} \u02dc\u02dc\u02dc\u02dc {}", "+AOEUFPBGTS": "{} \u02dc\u02dc\u02dc\u02dc {}", "+*EUFPBGTS": "{^} \u02dc\u02dc\u02dc\u02dc {^}{-|}", "+A*EUFPBGTS": "{} \u02dc\u02dc\u02dc\u02dc {^}{-|}", "+O*EUFPBGTS": "{^} \u02dc\u02dc\u02dc\u02dc {}{-|}", "+AO*EUFPBGTS": "{} \u02dc\u02dc\u02dc\u02dc {}{-|}", "+ARPBGTS": "{} {#Up}{#Up}{#Up}{#Up} {^}", "+ORPBGTS": "{^} {#Up}{#Up}{#Up}{#Up} {}", "+AORPBGTS": "{} {#Up}{#Up}{#Up}{#Up} {}", "+*RPBGTS": "{^} {#Up}{#Up}{#Up}{#Up} {^}{-|}", "+A*RPBGTS": "{} {#Up}{#Up}{#Up}{#Up} {^}{-|}", "+O*RPBGTS": "{^} {#Up}{#Up}{#Up}{#Up} {}{-|}", "+AO*RPBGTS": "{} {#Up}{#Up}{#Up}{#Up} {}{-|}", "+ERPBGTS": "{^} {#Left}{#Left}{#Left}{#Left} {^}", "+AERPBGTS": "{} {#Left}{#Left}{#Left}{#Left} {^}", "+OERPBGTS": "{^} {#Left}{#Left}{#Left}{#Left} {}", "+AOERPBGTS": "{} {#Left}{#Left}{#Left}{#Left} {}", "+*ERPBGTS": "{^} {#Left}{#Left}{#Left}{#Left} {^}{-|}", "+A*ERPBGTS": "{} {#Left}{#Left}{#Left}{#Left} {^}{-|}", "+O*ERPBGTS": "{^} {#Left}{#Left}{#Left}{#Left} {}{-|}", "+AO*ERPBGTS": "{} {#Left}{#Left}{#Left}{#Left} {}{-|}", "+URPBGTS": "{^} {#Right}{#Right}{#Right}{#Right} {^}", "+AURPBGTS": "{} {#Right}{#Right}{#Right}{#Right} {^}", "+OURPBGTS": "{^} {#Right}{#Right}{#Right}{#Right} {}", "+AOURPBGTS": "{} {#Right}{#Right}{#Right}{#Right} {}", "+*URPBGTS": "{^} {#Right}{#Right}{#Right}{#Right} {^}{-|}", "+A*URPBGTS": "{} {#Right}{#Right}{#Right}{#Right} {^}{-|}", "+O*URPBGTS": "{^} {#Right}{#Right}{#Right}{#Right} {}{-|}", "+AO*URPBGTS": "{} {#Right}{#Right}{#Right}{#Right} {}{-|}", "+EURPBGTS": "{^} {#Down}{#Down}{#Down}{#Down} {^}", "+AEURPBGTS": "{} {#Down}{#Down}{#Down}{#Down} {^}", "+OEURPBGTS": "{^} {#Down}{#Down}{#Down}{#Down} {}", "+AOEURPBGTS": "{} {#Down}{#Down}{#Down}{#Down} {}", "+*EURPBGTS": "{^} {#Down}{#Down}{#Down}{#Down} {^}{-|}", "+A*EURPBGTS": "{} {#Down}{#Down}{#Down}{#Down} {^}{-|}", "+O*EURPBGTS": "{^} {#Down}{#Down}{#Down}{#Down} {}{-|}", "+AO*EURPBGTS": "{} {#Down}{#Down}{#Down}{#Down} {}{-|}", "+FRPBGTS": "{^} {#Page_Up}{#Page_Up}{#Page_Up}{#Page_Up} {^}", "+AFRPBGTS": "{} {#Page_Up}{#Page_Up}{#Page_Up}{#Page_Up} {^}", "+OFRPBGTS": "{^} {#Page_Up}{#Page_Up}{#Page_Up}{#Page_Up} {}", "+AOFRPBGTS": "{} {#Page_Up}{#Page_Up}{#Page_Up}{#Page_Up} {}", "+*FRPBGTS": "{^} {#Page_Up}{#Page_Up}{#Page_Up}{#Page_Up} {^}{-|}", "+A*FRPBGTS": "{} {#Page_Up}{#Page_Up}{#Page_Up}{#Page_Up} {^}{-|}", "+O*FRPBGTS": "{^} {#Page_Up}{#Page_Up}{#Page_Up}{#Page_Up} {}{-|}", "+AO*FRPBGTS": "{} {#Page_Up}{#Page_Up}{#Page_Up}{#Page_Up} {}{-|}", "+EFRPBGTS": "{^} {#Home}{#Home}{#Home}{#Home} {^}", "+AEFRPBGTS": "{} {#Home}{#Home}{#Home}{#Home} {^}", "+OEFRPBGTS": "{^} {#Home}{#Home}{#Home}{#Home} {}", "+AOEFRPBGTS": "{} {#Home}{#Home}{#Home}{#Home} {}", "+*EFRPBGTS": "{^} {#Home}{#Home}{#Home}{#Home} {^}{-|}", "+A*EFRPBGTS": "{} {#Home}{#Home}{#Home}{#Home} {^}{-|}", "+O*EFRPBGTS": "{^} {#Home}{#Home}{#Home}{#Home} {}{-|}", "+AO*EFRPBGTS": "{} {#Home}{#Home}{#Home}{#Home} {}{-|}", "+UFRPBGTS": "{^} {#End}{#End}{#End}{#End} {^}", "+AUFRPBGTS": "{} {#End}{#End}{#End}{#End} {^}", "+OUFRPBGTS": "{^} {#End}{#End}{#End}{#End} {}", "+AOUFRPBGTS": "{} {#End}{#End}{#End}{#End} {}", "+*UFRPBGTS": "{^} {#End}{#End}{#End}{#End} {^}{-|}", "+A*UFRPBGTS": "{} {#End}{#End}{#End}{#End} {^}{-|}", "+O*UFRPBGTS": "{^} {#End}{#End}{#End}{#End} {}{-|}", "+AO*UFRPBGTS": "{} {#End}{#End}{#End}{#End} {}{-|}", "+EUFRPBGTS": "{^} {#Page_Down}{#Page_Down}{#Page_Down}{#Page_Down} {^}", "+AEUFRPBGTS": "{} {#Page_Down}{#Page_Down}{#Page_Down}{#Page_Down} {^}", "+OEUFRPBGTS": "{^} {#Page_Down}{#Page_Down}{#Page_Down}{#Page_Down} {}", "+AOEUFRPBGTS": "{} {#Page_Down}{#Page_Down}{#Page_Down}{#Page_Down} {}", "+*EUFRPBGTS": "{^} {#Page_Down}{#Page_Down}{#Page_Down}{#Page_Down} {^}{-|}", "+A*EUFRPBGTS": "{} {#Page_Down}{#Page_Down}{#Page_Down}{#Page_Down} {^}{-|}", "+O*EUFRPBGTS": "{^} {#Page_Down}{#Page_Down}{#Page_Down}{#Page_Down} {}{-|}", "+AO*EUFRPBGTS": "{} {#Page_Down}{#Page_Down}{#Page_Down}{#Page_Down} {}{-|}", "+LGTS": "{^} :::: {^}", "+ALGTS": "{} :::: {^}", "+OLGTS": "{^} :::: {}", "+AOLGTS": "{} :::: {}", "+*LGTS": "{^} :::: {^}{-|}", "+A*LGTS": "{} :::: {^}{-|}", "+O*LGTS": "{^} :::: {}{-|}", "+AO*LGTS": "{} :::: {}{-|}", "+ELGTS": "{^} \u220b\u220b\u220b\u220b {^}", "+AELGTS": "{} \u220b\u220b\u220b\u220b {^}", "+OELGTS": "{^} \u220b\u220b\u220b\u220b {}", "+AOELGTS": "{} \u220b\u220b\u220b\u220b {}", "+*ELGTS": "{^} \u220b\u220b\u220b\u220b {^}{-|}", "+A*ELGTS": "{} \u220b\u220b\u220b\u220b {^}{-|}", "+O*ELGTS": "{^} \u220b\u220b\u220b\u220b {}{-|}", "+AO*ELGTS": "{} \u220b\u220b\u220b\u220b {}{-|}", "+ULGTS": "{^} \u2235\u2235\u2235\u2235 {^}", "+AULGTS": "{} \u2235\u2235\u2235\u2235 {^}", "+OULGTS": "{^} \u2235\u2235\u2235\u2235 {}", "+AOULGTS": "{} \u2235\u2235\u2235\u2235 {}", "+*ULGTS": "{^} \u2235\u2235\u2235\u2235 {^}{-|}", "+A*ULGTS": "{} \u2235\u2235\u2235\u2235 {^}{-|}", "+O*ULGTS": "{^} \u2235\u2235\u2235\u2235 {}{-|}", "+AO*ULGTS": "{} \u2235\u2235\u2235\u2235 {}{-|}", "+EULGTS": "{^} \u2234\u2234\u2234\u2234 {^}", "+AEULGTS": "{} \u2234\u2234\u2234\u2234 {^}", "+OEULGTS": "{^} \u2234\u2234\u2234\u2234 {}", "+AOEULGTS": "{} \u2234\u2234\u2234\u2234 {}", "+*EULGTS": "{^} \u2234\u2234\u2234\u2234 {^}{-|}", "+A*EULGTS": "{} \u2234\u2234\u2234\u2234 {^}{-|}", "+O*EULGTS": "{^} \u2234\u2234\u2234\u2234 {}{-|}", "+AO*EULGTS": "{} \u2234\u2234\u2234\u2234 {}{-|}", "+FRLGTS": "{^} #### {^}", "+AFRLGTS": "{} #### {^}", "+OFRLGTS": "{^} #### {}", "+AOFRLGTS": "{} #### {}", "+*FRLGTS": "{^} #### {^}{-|}", "+A*FRLGTS": "{} #### {^}{-|}", "+O*FRLGTS": "{^} #### {}{-|}", "+AO*FRLGTS": "{} #### {}{-|}", "+EFRLGTS": "{^} \u00a9\u00a9\u00a9\u00a9 {^}", "+AEFRLGTS": "{} \u00a9\u00a9\u00a9\u00a9 {^}", "+OEFRLGTS": "{^} \u00a9\u00a9\u00a9\u00a9 {}", "+AOEFRLGTS": "{} \u00a9\u00a9\u00a9\u00a9 {}", "+*EFRLGTS": "{^} \u00a9\u00a9\u00a9\u00a9 {^}{-|}", "+A*EFRLGTS": "{} \u00a9\u00a9\u00a9\u00a9 {^}{-|}", "+O*EFRLGTS": "{^} \u00a9\u00a9\u00a9\u00a9 {}{-|}", "+AO*EFRLGTS": "{} \u00a9\u00a9\u00a9\u00a9 {}{-|}", "+UFRLGTS": "{^} \u00ae\u00ae\u00ae\u00ae {^}", "+AUFRLGTS": "{} \u00ae\u00ae\u00ae\u00ae {^}", "+OUFRLGTS": "{^} \u00ae\u00ae\u00ae\u00ae {}", "+AOUFRLGTS": "{} \u00ae\u00ae\u00ae\u00ae {}", "+*UFRLGTS": "{^} \u00ae\u00ae\u00ae\u00ae {^}{-|}", "+A*UFRLGTS": "{} \u00ae\u00ae\u00ae\u00ae {^}{-|}", "+O*UFRLGTS": "{^} \u00ae\u00ae\u00ae\u00ae {}{-|}", "+AO*UFRLGTS": "{} \u00ae\u00ae\u00ae\u00ae {}{-|}", "+EUFRLGTS": "{^} \u2122\u2122\u2122\u2122 {^}", "+AEUFRLGTS": "{} \u2122\u2122\u2122\u2122 {^}", "+OEUFRLGTS": "{^} \u2122\u2122\u2122\u2122 {}", "+AOEUFRLGTS": "{} \u2122\u2122\u2122\u2122 {}", "+*EUFRLGTS": "{^} \u2122\u2122\u2122\u2122 {^}{-|}", "+A*EUFRLGTS": "{} \u2122\u2122\u2122\u2122 {^}{-|}", "+O*EUFRLGTS": "{^} \u2122\u2122\u2122\u2122 {}{-|}", "+AO*EUFRLGTS": "{} \u2122\u2122\u2122\u2122 {}{-|}", "+APBLGTS": "{} ==== {^}", "+OPBLGTS": "{^} ==== {}", "+AOPBLGTS": "{} ==== {}", "+*PBLGTS": "{^} ==== {^}{-|}", "+A*PBLGTS": "{} ==== {^}{-|}", "+O*PBLGTS": "{^} ==== {}{-|}", "+AO*PBLGTS": "{} ==== {}{-|}", "+EPBLGTS": "{^} \u2261\u2261\u2261\u2261 {^}", "+AEPBLGTS": "{} \u2261\u2261\u2261\u2261 {^}", "+OEPBLGTS": "{^} \u2261\u2261\u2261\u2261 {}", "+AOEPBLGTS": "{} \u2261\u2261\u2261\u2261 {}", "+*EPBLGTS": "{^} \u2261\u2261\u2261\u2261 {^}{-|}", "+A*EPBLGTS": "{} \u2261\u2261\u2261\u2261 {^}{-|}", "+O*EPBLGTS": "{^} \u2261\u2261\u2261\u2261 {}{-|}", "+AO*EPBLGTS": "{} \u2261\u2261\u2261\u2261 {}{-|}", "+UPBLGTS": "{^} \u2248\u2248\u2248\u2248 {^}", "+AUPBLGTS": "{} \u2248\u2248\u2248\u2248 {^}", "+OUPBLGTS": "{^} \u2248\u2248\u2248\u2248 {}", "+AOUPBLGTS": "{} \u2248\u2248\u2248\u2248 {}", "+*UPBLGTS": "{^} \u2248\u2248\u2248\u2248 {^}{-|}", "+A*UPBLGTS": "{} \u2248\u2248\u2248\u2248 {^}{-|}", "+O*UPBLGTS": "{^} \u2248\u2248\u2248\u2248 {}{-|}", "+AO*UPBLGTS": "{} \u2248\u2248\u2248\u2248 {}{-|}", "+EUPBLGTS": "{^} \u2260\u2260\u2260\u2260 {^}", "+AEUPBLGTS": "{} \u2260\u2260\u2260\u2260 {^}", "+OEUPBLGTS": "{^} \u2260\u2260\u2260\u2260 {}", "+AOEUPBLGTS": "{} \u2260\u2260\u2260\u2260 {}", "+*EUPBLGTS": "{^} \u2260\u2260\u2260\u2260 {^}{-|}", "+A*EUPBLGTS": "{} \u2260\u2260\u2260\u2260 {^}{-|}", "+O*EUPBLGTS": "{^} \u2260\u2260\u2260\u2260 {}{-|}", "+AO*EUPBLGTS": "{} \u2260\u2260\u2260\u2260 {}{-|}", "+FRPBLGTS": "{^} @@@@ {^}", "+AFRPBLGTS": "{} @@@@ {^}", "+OFRPBLGTS": "{^} @@@@ {}", "+AOFRPBLGTS": "{} @@@@ {}", "+*FRPBLGTS": "{^} @@@@ {^}{-|}", "+A*FRPBLGTS": "{} @@@@ {^}{-|}", "+O*FRPBLGTS": "{^} @@@@ {}{-|}", "+AO*FRPBLGTS": "{} @@@@ {}{-|}", "+EFRPBLGTS": "{^} \u2295\u2295\u2295\u2295 {^}", "+AEFRPBLGTS": "{} \u2295\u2295\u2295\u2295 {^}", "+OEFRPBLGTS": "{^} \u2295\u2295\u2295\u2295 {}", "+AOEFRPBLGTS": "{} \u2295\u2295\u2295\u2295 {}", "+*EFRPBLGTS": "{^} \u2295\u2295\u2295\u2295 {^}{-|}", "+A*EFRPBLGTS": "{} \u2295\u2295\u2295\u2295 {^}{-|}", "+O*EFRPBLGTS": "{^} \u2295\u2295\u2295\u2295 {}{-|}", "+AO*EFRPBLGTS": "{} \u2295\u2295\u2295\u2295 {}{-|}", "+UFRPBLGTS": "{^} \u2297\u2297\u2297\u2297 {^}", "+AUFRPBLGTS": "{} \u2297\u2297\u2297\u2297 {^}", "+OUFRPBLGTS": "{^} \u2297\u2297\u2297\u2297 {}", "+AOUFRPBLGTS": "{} \u2297\u2297\u2297\u2297 {}", "+*UFRPBLGTS": "{^} \u2297\u2297\u2297\u2297 {^}{-|}", "+A*UFRPBLGTS": "{} \u2297\u2297\u2297\u2297 {^}{-|}", "+O*UFRPBLGTS": "{^} \u2297\u2297\u2297\u2297 {}{-|}", "+AO*UFRPBLGTS": "{} \u2297\u2297\u2297\u2297 {}{-|}", "+EUFRPBLGTS": "{^} \u2205\u2205\u2205\u2205 {^}", "+AEUFRPBLGTS": "{} \u2205\u2205\u2205\u2205 {^}", "+OEUFRPBLGTS": "{^} \u2205\u2205\u2205\u2205 {}", "+AOEUFRPBLGTS": "{} \u2205\u2205\u2205\u2205 {}", "+*EUFRPBLGTS": "{^} \u2205\u2205\u2205\u2205 {^}{-|}", "+A*EUFRPBLGTS": "{} \u2205\u2205\u2205\u2205 {^}{-|}", "+O*EUFRPBLGTS": "{^} \u2205\u2205\u2205\u2205 {}{-|}", "+AO*EUFRPBLGTS": "{} \u2205\u2205\u2205\u2205 {}{-|}"} \ No newline at end of file diff --git a/extra/fcitx-table-extra.patch b/extra/fcitx-table-extra.patch deleted file mode 100644 index c11ac7f9..00000000 --- a/extra/fcitx-table-extra.patch +++ /dev/null @@ -1,980 +0,0 @@ -diff --git a/tables/CMakeLists.txt b/tables/CMakeLists.txt -index f24f528..2810887 100644 ---- a/tables/CMakeLists.txt -+++ b/tables/CMakeLists.txt -@@ -6,6 +6,7 @@ - t9 - wubi98 wubi98-pinyin wubi98-single - wubi98-large -+ sitelen-pona - ) - - set(MB_FILE) - -diff --git a/tables/sitelen-pona.conf.in b/tables/sitelen-pona.conf.in -new file mode 100644 -index 0000000..2f5cd3b ---- /dev/null -+++ b/tables/sitelen-pona.conf.in -@@ -0,0 +1,40 @@ -+[InputMethod] -+Name=sitelen pona -+Icon=fcitx-sitelen-pona -+Label=󱥬 -+LangCode=tok -+Addon=table -+Configurable=True -+ -+[Table] -+File=table/sitelen-pona.main.dict -+OrderPolicy=No -+PinyinKey=^ -+AutoSelect=False -+MatchingKey=@ -+ExactMatch=False -+Hint=True -+DisplayCustomHint=True -+IgnorePunc=True -+PageSize=9 -+CandidateLayoutHint=Vertical -+ -+[Table/Selection] -+0=Alt+1 -+1=Alt+2 -+2=Alt+3 -+3=Alt+4 -+4=Alt+5 -+5=Alt+6 -+6=Alt+7 -+7=Alt+8 -+8=Alt+9 -+9=Alt+0 -+ -+[Table/PrevPage] -+0=Up -+1=Page_Up -+ -+[Table/NextPage] -+0=Down -+1=Page_Down -diff --git a/tables/sitelen-pona.txt b/tables/sitelen-pona.txt -new file mode 100644 -index 0000000..3eea26e ---- /dev/null -+++ b/tables/sitelen-pona.txt -@@ -0,0 +1,915 @@ -+Length=32 -+KeyCode=abcdefghijklmnopqrstuvwxyz[]_'<>-1234567890 -+[Data] -+a 󱤀 -+akesi 󱤁 -+ala 󱤂 -+alasa 󱤃 -+ale 󱤄 -+anpa 󱤅 -+ante 󱤆 -+anu 󱤇 -+awen 󱤈 -+e 󱤉 -+en 󱤊 -+esun 󱤋 -+ijo �� -+ike 󱤍 -+ilo 󱤎 -+insa 󱤏 -+jaki 󱤐 -+jan 󱤑 -+jelo 󱤒 -+jo 󱤓 -+kala 󱤔 -+kalama 󱤕 -+kama 󱤖 -+kasi 󱤗 -+ken 󱤘 -+kepeken 󱤙 -+kili 󱤚 -+kiwen 󱤛 -+ko 󱤜 -+kon �� -+kule 󱤞 -+kulupu 󱤟 -+kute 󱤠 -+la 󱤡 -+lape 󱤢 -+laso 󱤣 -+lawa 󱤤 -+len 󱤥 -+lete 󱤦 -+li 󱤧 -+lili 󱤨 -+linja 󱤩 -+lipu 󱤪 -+loje 󱤫 -+lon 󱤬 -+luka 󱤭 -+lukin 󱤮 -+lupa 󱤯 -+ma 󱤰 -+mama 󱤱 -+mani 󱤲 -+meli 󱤳 -+mi 󱤴 -+mije 󱤵 -+moku 󱤶 -+moli 󱤷 -+monsi 󱤸 -+mu 󱤹 -+mun 󱤺 -+musi 󱤻 -+mute 󱤼 -+nanpa 󱤽 -+nasa 󱤾 -+nasin �� -+nena 󱥀 -+ni 󱥁 -+nimi 󱥂 -+noka 󱥃 -+o 󱥄 -+olin 󱥅 -+ona 󱥆 -+open 󱥇 -+pakala 󱥈 -+pali 󱥉 -+palisa 󱥊 -+pan 󱥋 -+pana 󱥌 -+pi 󱥍 -+pilin 󱥎 -+pimeja 󱥏 -+pini 󱥐 -+pipi 󱥑 -+poka 󱥒 -+poki 󱥓 -+pona 󱥔 -+pu 󱥕 -+sama 󱥖 -+seli 󱥗 -+selo 󱥘 -+seme 󱥙 -+sewi 󱥚 -+sijelo �� -+sike 󱥜 -+sin 󱥝 -+sina 󱥞 -+sinpin 󱥟 -+sitelen 󱥠 -+sona 󱥡 -+soweli 󱥢 -+suli 󱥣 -+suno 󱥤 -+supa 󱥥 -+suwi 󱥦 -+tan 󱥧 -+taso 󱥨 -+tawa 󱥩 -+telo 󱥪 -+tenpo �� -+toki 󱥬 -+tomo 󱥭 -+tu 󱥮 -+unpa 󱥯 -+uta 󱥰 -+utala 󱥱 -+walo 󱥲 -+wan 󱥳 -+waso 󱥴 -+wawa 󱥵 -+weka 󱥶 -+wile 󱥷 -+namako 󱥸 -+kin 󱥹 -+oko 󱥺 -+kipisi 󱥻 -+leko 󱥼 -+monsuta 󱥽 -+tonsi 󱥾 -+jasima 󱥿 -+kijetesantakalu 󱦀 -+soko 󱦁 -+meso 󱦂 -+epiku 󱦃 -+kokosila 󱦄 -+lanpan 󱦅 -+n 󱦆 -+misikeke 󱦇 -+ku 󱦈 -+pake 󱦠 -+apeja 󱦡 -+majuna 󱦢 -+powe 󱦣 -+[ 󱦐 -+] 󱦑 -+_ 󱦒 -+pi_ 󱦓 -+' 󱦔 -+anpa-lawa 󿤀 -+ijo-akesi 󿤁 -+ijo-ala 󿤂 -+ijo-alasa 󿤃 -+ijo-ale 󿤄 -+ijo-anpa 󿤅 -+ijo-ante 󿤆 -+ijo-anu 󿤇 -+ijo-apeja 󿤈 -+ijo-awen 󿤉 -+ijo-en 󿤊 -+ijo-esun 󿤋 -+ijo-ike 󿤌 -+ijo-ilo 󿤍 -+ijo-insa 󿤎 -+ijo-jaki 󿤏 -+ijo-jan 󿤐 -+ijo-jelo 󿤑 -+ijo-jo 󿤒 -+ijo-kala 󿤓 -+ijo-kalama 󿤔 -+ijo-kama 󿤕 -+ijo-kasi 󿤖 -+ijo-ken 󿤗 -+ijo-kepeken 󿤘 -+ijo-kijetesantakalu 󿤙 -+ijo-kili 󿤚 -+ijo-kin 󿤛 -+ijo-kipisi 󿤜 -+ijo-kiwen 󿤝 -+ijo-ko 󿤞 -+ijo-kon 󿤟 -+ijo-kule 󿤠 -+ijo-kulupu 󿤡 -+ijo-kute 󿤢 -+ijo-lape 󿤣 -+ijo-laso 󿤤 -+ijo-lawa 󿤥 -+ijo-leko 󿤦 -+ijo-len 󿤧 -+ijo-lete 󿤨 -+ijo-lili 󿤩 -+ijo-linja 󿤪 -+ijo-lipu 󿤫 -+ijo-loje 󿤬 -+ijo-lon 󿤭 -+ijo-luka 󿤮 -+ijo-lukin 󿤯 -+ijo-lupa 󿤰 -+ijo-ma 󿤱 -+ijo-mama 󿤲 -+ijo-mani 󿤳 -+ijo-meli 󿤴 -+ijo-mi 󿤵 -+ijo-mije 󿤶 -+ijo-moku 󿤷 -+ijo-moli 󿤸 -+ijo-monsi 󿤹 -+ijo-monsuta 󿤺 -+ijo-mu 󿤻 -+ijo-mun 󿤼 -+ijo-musi 󿤽 -+ijo-mute 󿤾 -+ijo-namako 󿤿 -+ijo-nanpa 󿥀 -+ijo-nasa 󿥁 -+ijo-nasin 󿥂 -+ijo-nena 󿥃 -+ijo-ni 󿥄 -+ijo-nimi 󿥅 -+ijo-noka 󿥆 -+ijo-oko 󿥇 -+ijo-olin 󿥈 -+ijo-ona 󿥉 -+ijo-open 󿥊 -+ijo-pakala 󿥋 -+ijo-pake 󿥌 -+ijo-pali 󿥍 -+ijo-palisa 󿥎 -+ijo-pan 󿥏 -+ijo-pana 󿥐 -+ijo-pilin 󿥑 -+ijo-pimeja 󿥒 -+ijo-pini 󿥓 -+ijo-pipi 󿥔 -+ijo-poka 󿥕 -+ijo-poki 󿥖 -+ijo-pona 󿥗 -+ijo-pu 󿥘 -+ijo-sama 󿥙 -+ijo-seli 󿥚 -+ijo-selo 󿥛 -+ijo-seme 󿥜 -+ijo-sewi 󿥝 -+ijo-sijelo 󿥞 -+ijo-sike 󿥟 -+ijo-sin 󿥠 -+ijo-sina 󿥡 -+ijo-sinpin 󿥢 -+ijo-sitelen 󿥣 -+ijo-sona 󿥤 -+ijo-soweli 󿥥 -+ijo-suli 󿥦 -+ijo-suno 󿥧 -+ijo-supa 󿥨 -+ijo-suwi 󿥩 -+ijo-tan 󿥪 -+ijo-taso 󿥫 -+ijo-tawa 󿥬 -+ijo-telo 󿥭 -+ijo-tenpo 󿥮 -+ijo-toki 󿥯 -+ijo-tomo 󿥰 -+ijo-tonsi 󿥱 -+ijo-tu 󿥲 -+ijo-unpa 󿥳 -+ijo-uta 󿥴 -+ijo-utala 󿥵 -+ijo-walo 󿥶 -+ijo-wan 󿥷 -+ijo-waso 󿥸 -+ijo-wawa 󿥹 -+ijo-weka 󿥺 -+ijo-wile 󿥻 -+ike-ala 󿥼 -+ike-lili 󿥽 -+ike-lukin 󿥾 -+ilo-kipisi 󿥿 -+ilo-lape �� -+ilo-lukin 󿦁 -+ilo-moli 󿦂 -+ilo-musi 󿦃 -+ilo-nanpa 󿦄 -+ilo-oko 󿦅 -+ilo-open 󿦆 -+ilo-suno 󿦇 -+ilo-toki 󿦈 -+jan-ala 󿦉 -+jan-alasa 󿦊 -+jan-ale 󿦋 -+jan-ante 󿦌 -+jan-ike 󿦍 -+jan-kala 󿦎 -+jan-kalama 󿦏 -+jan-kasi 󿦐 -+jan-kulupu 󿦑 -+jan-lawa 󿦒 -+jan-lili �� -+jan-monsuta 󿦔 -+jan-mute 󿦕 -+jan-nasa 󿦖 -+jan-olin 󿦗 -+jan-pakala 󿦘 -+jan-pali 󿦙 -+jan-poka 󿦚 -+jan-pona 󿦛 -+jan-sama 󿦜 -+jan-seme 󿦝 -+jan-sewi 󿦞 -+jan-sin 󿦟 -+jan-sona 󿦠 -+jan-suli 󿦡 -+jan-suwi 󿦢 -+jan-toki 󿦣 -+jan-unpa 󿦤 -+jan-utala 󿦥 -+jan-wawa 󿦦 -+kala-lete 󿦧 -+kala-lili 󿦨 -+kalama-musi 󿦩 -+kasi-jelo 󿦪 -+kasi-kule 󿦫 -+kasi-laso 󿦬 -+kasi-lili 󿦭 -+kasi-loje 󿦮 -+kasi-pimeja 󿦯 -+kasi-walo 󿦰 -+kili-jelo 󿦱 -+kili-laso 󿦲 -+kili-lili 󿦳 -+kili-loje 󿦴 -+kili-palisa 󿦵 -+kili-pimeja 󿦶 -+kili-suwi 󿦷 -+kili-walo 󿦸 -+kiwen-jelo 󿦹 -+kiwen-kasi 󿦺 -+kiwen-laso 󿦻 -+kiwen-lete 󿦼 -+kiwen-lili 󿦽 -+kiwen-loje 󿦾 -+kiwen-mun 󿦿 -+kiwen-pimeja 󿧀 -+kiwen-seli 󿧁 -+kiwen-suno 󿧂 -+kiwen-walo 󿧃 -+ko-jaki 󿧄 -+ko-jelo 󿧅 -+ko-kasi 󿧆 -+ko-kule 󿧇 -+ko-laso 󿧈 -+ko-lete �� -+ko-lili 󿧊 -+ko-loje 󿧋 -+ko-nasa 󿧌 -+ko-pimeja �� -+ko-seli 󿧎 -+ko-walo 󿧏 -+kon-lete 󿧐 -+len-jan 󿧑 -+len-jelo 󿧒 -+len-laso 󿧓 -+len-lawa 󿧔 -+len-lili 󿧕 -+len-loje 󿧖 -+len-luka 󿧗 -+len-noka 󿧘 -+len-pimeja 󿧙 -+len-sin 󿧚 -+len-walo 󿧛 -+linja-lili 󿧜 -+linja-pona 󿧝 -+lipu-kasi 󿧞 -+lipu-nanpa 󿧟 -+lipu-sewi 󿧠 -+lipu-sona 󿧡 -+lipu-toki 󿧢 -+luka-luka 󿧣 -+lupa-jaki 󿧤 -+lupa-kiwen 󿧥 -+lupa-kute 󿧦 -+lupa-lili 󿧧 -+lupa-meli 󿧨 -+lupa-monsi 󿧩 -+lupa-nena 󿧪 -+lupa-tomo 󿧫 -+ma-ale 󿧬 -+ma-kasi 󿧭 -+ma-tomo 󿧮 -+mama-mama 󿧯 -+mama-meli 󿧰 -+mama-mije 󿧱 -+meli-ike 󿧲 -+meli-lili 󿧳 -+meli-pona 󿧴 -+meli-sama 󿧵 -+meli-unpa 󿧶 -+mije-ike 󿧷 -+mije-lili 󿧸 -+mije-pona 󿧹 -+mije-sama 󿧺 -+mije-unpa 󿧻 -+mije-wawa 󿧼 -+musi-lili 󿧽 -+nena-kon 󿧾 -+nena-kute 󿧿 -+nena-lili 󿨀 -+nena-mama 󿨁 -+nena-meli 󿨂 -+palisa-lili 󿨃 -+pilin-ala 󿨄 -+pilin-ike 󿨅 -+pilin-nasa 󿨆 -+pilin-pakala 󿨇 -+pilin-pona 󿨈 -+pilin-sama 󿨉 -+poki-kon 󿨊 -+poki-len 󿨋 -+poki-lete 󿨌 -+poki-lili 󿨍 -+poki-seli 󿨎 -+poki-telo 󿨏 -+pona-ala 󿨐 -+pona-lili 󿨑 -+pona-lukin 󿨒 -+selo-len 󿨓 -+selo-soweli 󿨔 -+sike-lili 󿨕 -+sitelen-ike 󿨖 -+sitelen-ma 󿨗 -+sitelen-monsuta 󿨘 -+sitelen-pona 󿨙 -+sitelen-sitelen 󿨚 -+sitelen-tawa 󿨛 -+sitelen-toki 󿨜 -+sona-ala 󿨝 -+sona-ike 󿨞 -+sona-lili 󿨟 -+sona-ma 󿨠 -+sona-nanpa 󿨡 -+sona-pona 󿨢 -+sona-sijelo 󿨣 -+sona-tenpo 󿨤 -+sona-toki 󿨥 -+sona-utala 󿨦 -+supa-lape 󿨧 -+supa-lawa 󿨨 -+supa-lupa 󿨩 -+supa-moku 󿨪 -+supa-monsi 󿨫 -+supa-pali 󿨬 -+telo-lete 󿨭 -+telo-lili 󿨮 -+toki-ala 󿨯 -+toki-ike 󿨰 -+toki-pona 󿨱 -+toki-sin 󿨲 -+toki-sona 󿨳 -+toki-utala 󿨴 -+tomo-lape 󿨵 -+tomo-mani 󿨶 -+tomo-moku 󿨷 -+tomo-monsuta 󿨸 -+tomo-nasin 󿨹 -+tomo-pali 󿨺 -+tomo-sona 󿨻 -+tomo-tawa 󿨼 -+tomo-unpa 󿨽 -+tomo-utala 󿨾 -+tu-tu 󿨿 -+tu-wan 󿩀 -+wan-tu 󿩁 -+luka-wan 󿩂 -+wan-luka 󿩃 -+luka-tu 󿩄 -+tu-luka 󿩅 -+luka-tu-wan 󿩆 -+luka-wan-tu 󿩇 -+luka-tu-tu 󿩈 -+luka-luka 󿩉 -+luka-luka-wan 󿩊 -+luka-luka-tu 󿩋 -+luka-luka-tu-wan 󿩌 -+luka-luka-wan-tu 󿩍 -+luka-luka-tu-tu 󿩎 -+luka-luka-luka 󿩏 -+a> 󿩒 -+ala> 󿩓 -+ 󿩕 -+awen> 󿩖 -+ 󿩘 -+esun> 󿩙 -+ 󿩛 -+ 󿩝 -+kepeken> 󿩞 -+len> 󿩟 -+ 󿩡 -+linja> 󿩢 -+lon> 󿩣 -+ �� -+luka> 󿩦 -+meli> 󿩧 -+ 󿩩 -+hmi 󿩪 -+mije> 󿩫 -+ 󿩭 -+moku> 󿩮 -+monsi> 󿩯 -+mute> 󿩰 -+ 󿩲 -+nanpa> 󿩳 -+ 󿩵 -+nena> 󿩶 -+ 󿩸 -+ 󿩺 -+pana> 󿩻 -+pi> 󿩼 -+pini> 󿩽 -+ 󿩿 -+selo> 󿪀 -+ 󿪂 -+sewi> 󿪃 -+sijelo> 󿪄 -+ 󿪆 -+ 󿪈 -+ 󿪊 -+supa> 󿪋 -+ 󿪍 -+taso> 󿪎 -+tawa> 󿪏 -+ 󿪒 -+ 󿪔 -+oko> 󿪕 -+ 󿪘 -+meso> 󿪙 -+ 󿪛 -+lanpan> 󿪜 -+n> 󿪝 -+ 󿪟 -+kala2 󿪠 -+meli2 󿪡 -+mije2 󿪢 -+olin2 󿪣 -+sewi2 󿪤 -+uta2 󿪥 -+wile2 󿪦 -+namako1 󿪧 -+namako2 󿪨 -+meso1 󿪩 -+meso2 󿪪 -+epiku1 󿪫 -+epiku2 󿪬 -+kokosila1 󿪭 -+kokosila2 󿪮 -+lanpan1 󿪯 -+lanpan2 󿪰 -+lanpan3 󿪱 -+majuna1 󿪲 -+majuna2 󿪳 -+sewi2> 󿪴 -+ 󿪶 -+lanpan2> 󿪷 -++pana 󿪸 -+lkijetesantakalu1 󿪹 -+lkijetesantakalu2 󿪺 -+lkijetesantakalu 󿪻 -+lkijetesantakalu> 󿪼 -+nata 󿪽 -+lipamanka 󿪾 -+melinjakulekule 󿪿 -+isipin 󿫀 -+kapesi 󿫁 -+kapesi2 󿫂 -+kiki 󿫃 -+linluwi 󿫄 -+linluwi> 󿫅 -+ 󿫇 -+mulapisu 󿫈 -+samu 󿫉 -+unu 󿫊 -+wa 󿫋 -+ete 󿫌 -+ete2 󿫍 -+ete2> 󿫎 -+kan 󿫏 -+kuntu 󿫐 -+loka 󿫑 -+misa 󿫒 -+misa2 󿫓 -+misa3 󿫔 -+misa4 󿫕 -+misa5 󿫖 -+misa6 󿫗 -+waleja 󿫘 -+ewe 󿫙 -+kamalawala 󿫚 -+ke 󿫛 -+ke> 󿫜 -+ 󿫞 -+kese 󿫟 -+ 󿫪 -+san 󿫫 -+soto 󿫬 -+taki 󿫭 -+taki2 󿫮 -+teje 󿫯 -+te 󿫰 -+to 󿫱 -+umesu 󿫲 -+umesu> 󿫳 -+ 󿫵 -+usawi 󿫶 -+wasoweli 󿫷 -+wasoweli> 󿫸 -+ 󿫺 -+sutopatikuna 󿫻 -+yupekosi 󿫼 -+pingo 󿫽 -+kalamarr 󿫾 -+akesi 󿫿 -+niL 󿬀 -+niU 󿬁 -+niR 󿬂 -+niD 󿬃 -+mi1 󿬄 -+mi2 󿬅 -+sina1 󿬆 -+sina2 󿬇 -+ona1 󿬈 -+ona2 󿬉 -+iki1 󿬊 -+iki2 󿬋 -+ipi1 󿬌 -+ipi2 󿬍 -+wi1 󿬎 -+wi2 󿬏 -+a1 󿬐 -+a2 󿬑 -+o1 󿬒 -+o2 󿬓 -+kin1 󿬔 -+kin2 󿬕 -+n1 󿬖 -+n1> 󿬗 -+ 󿬙 -+n2 󿬚 -+n2> 󿬛 -+ 󿬝 -+wa1 󿬞 -+wa2 󿬟 -+ke1 󿬠 -+ke1> 󿬡 -+ 󿬣 -+ke2 󿬤 -+ke2> 󿬥 -+ 󿬧 -+je1 󿬨 -+je2 󿬩 -+ako 󿬪 -+ako2 󿬫 -+ju 󿬬 -+lu 󿬭 -+nu 󿬮 -+su 󿬯 -+u 󿬰 -+jami �� -+melome 󿬲 -+melome> 󿬳 -+ 󿬵 -+mijomi 󿬶 -+mijomi> 󿬷 -+ 󿬹 -+natu 󿬺 -+omekapo 󿬻 -+puwa 󿬼 -+su 󿬽 -+wekama 󿬾 -+ 󿭂 -+enko1 󿭃 -+enko2 󿭄 -+enko3 󿭅 -+i 󿭆 -+iki 󿭇 -+ipi 󿭈 -+itomi 󿭉 -+itomi> 󿭊 -+ 󿭌 -+jaku 󿭍 -+je 󿭎 -+jonke 󿭏 -+ 󿭒 -+ 󿭔 -+ki 󿭕 -+ki> 󿭖 -+kisa 󿭗 -+konwe 󿭘 -+kosan 󿭙 -+kosan> 󿭚 -+ 󿭜 -+kulu 󿭝 -+lokon 󿭞 -+molusa 󿭟 -+nja 󿭠 -+okepuma 󿭡 -+omen 󿭢 -+oni1 󿭣 -+oni2 󿭤 -+owe 󿭥 -+pa 󿭦 -+pasila 󿭧 -+pasila> �� -+peta 󿭩 -+pika 󿭪 -+pipo 󿭫 -+sikomo 󿭬 -+sikomo> �� -+ 󿭯 -+tokana 󿭰 -+wawajete 󿭱 -+we 󿭲 -+ako 󿭳 -+jume 󿭴 -+konsi 󿭵 -+konsi> 󿭶 -+kutopoma 󿭷 -+lijokuku1 󿭸 -+lijokuku2 󿭹 -+lo 󿭺 -+lo> �� -+me 󿭼 -+nele 󿭽 -+nu 󿭾 -+nuwa 󿭿 -+poni 󿮀 -+sipi �� -+wi 󿮂 -+wi> 󿮃 -+oki 󿮄 -+to 󿮅 -+sowoli 󿮆 -+sowoli> 󿮇 -+ 󿮉 -+kulepiku 󿮊 -+epikule 󿮋 -+yutu 󿮌 -+slape 󿮍 -+jans 󿮎 -+jew 󿮏 -+a-suli �� -+asuto 󿮑 -+eko 󿮒 -+jan-jan 󿮓 -+kapilu 󿮔 -+kili-ma 󿮕 -+kulupu-en 󿮖 -+kulupu-kasi 󿮗 -+nili 󿮘 -+unikijetesantakalu 󿮙 -+waso-pimeja 󿮚 -+weko 󿮛 -+nasulin 󿮜 -+juniko 󿮝 -+sijesuwa 󿮞 -+jusijesuwa 󿮟 -+kalijopilale 󿮠 -+kijosin 󿮡 -+kijosin> 󿮢 -+ 󿮤 -+linluwi2 󿮥 -+linluwi2> 󿮦 -+ 󿮨 -+mamasi 󿮩 -+waken 󿮪 -+lansan 󿮫 -+wiki 󿮬 -+ten 󿮭 -+tona 󿮮 -+poki-tona 󿮯 -+ijo-meli 󿮰 -+ijo-mije 󿮱 -+ijo-namako 󿮲 -+ijo-olin 󿮳 -+ijo-sewi 󿮴 -+ijo-uta 󿮵 -+ijo-wile 󿮶 -+jan-olin 󿮷 -+jan-sewi 󿮸 -+kala-lete 󿮹 -+kala-lete 󿮺 -+kala-lili 󿮻 -+kala-lili 󿮼 -+laso-kasi 󿮽 -+laso-mun 󿮾 -+laso-sewi 󿮿 -+laso-sewi 󿯀 -+laso-telo 󿯁 -+lipu-nimi 󿯂 -+lipu-sewi 󿯃 -+lipu-tenpo 󿯄 -+loje-jelo 󿯅 -+loje-walo 󿯆 -+luka-luka 󿯇 -+luka-luka-luka-tu 󿯈 -+luka-luka-luka-tu-tu 󿯉 -+luka-luka-luka-tu-wan 󿯊 -+luka-luka-luka-wan 󿯋 -+luka-luka-luka-wan-tu 󿯌 -+luka-tu �� -+luka-wan 󿯎 -+lupa-meli 󿯏 -+mama-meli2 󿯐 -+mama-mije2 󿯑 -+mama-tonsi 󿯒 -+meli2-ike 󿯓 -+meli2-lili 󿯔 -+meli2-pona 󿯕 -+meli2-sama 󿯖 -+meli-tonsi 󿯗 -+meli2-tonsi 󿯘 -+meli2-unpa 󿯙 -+meli-wawa 󿯚 -+meli2-wawa 󿯛 -+mije2-ike 󿯜 -+mije2-lili 󿯝 -+mije2-pona �� -+mije2-sama 󿯟 -+mije-tonsi 󿯠 -+mije2-tonsi 󿯡 -+mije2-unpa 󿯢 -+mije2-wawa 󿯣 -+nena-meli2 󿯤 -+tonsi-ike 󿯥 -+tonsi-lili 󿯦 -+tonsi-pona 󿯧 -+tonsi-sama �� -+tonsi-sin 󿯩 -+tonsi-unpa 󿯪 -+tonsi-wawa 󿯫 -+walo-pimeja 󿯬 -+wawa-tenpo 󿯭 -+ẞ 󿯮 -+ß 󿯯 -+ma-pona-pi-toki-pona 󿯰 -+ma-pi-nasin-sitelen 󿯱 -+linku 󿯲 -+lipu-wesi-pi-toki-pona 󿯳 -+linja-sike 󿯴 -+linja-suwi 󿯵 -+nasin-nanpa 󿯶 -+nasin-nanpa2 󿯷 -+nasin-sitelen 󿯸 -+sitelen-seli-kiwen 󿯹 -+nimi-sin 󿯺 -+nimi-sin2 󿯻 -+amonka 󿯼 -+manka 󿯽 -+nutan 󿯾 -+ijo-ni-li-seme 󿯿 diff --git a/extra/keyboard/symbols b/extra/keyboard/symbols deleted file mode 100644 index 0fdbc39c..00000000 --- a/extra/keyboard/symbols +++ /dev/null @@ -1,172 +0,0 @@ -// German Neo-Layout Version 2 -// adopted 2004 by Hanno Behrens -// inspired by Dvorak/de-ergo http://www.goebel-consult.de/de-ergo/ -// -// Authors: Stephan Hilb -// -// Benjamin Kellermann -// Erik Streb -// and many other contributors -// -// https://www.neo-layout.org - -partial alphanumeric_keys modifier_keys keypad_keys -xkb_symbols "neo_zlr_base" { - - // The different layers and how to reach them - // -------------------------------------------------------------- - // Ebene 1: normal - // Ebene 2: Shift - // Ebene 3: Caps or Bksl ("Mod three") - // Ebene 4: Lsgt or RAlt ("Mod four") (for selecting, use also Shift) - // Ebene 5: Shift + Caps/Bksl - // Ebene 6: Caps/Bksl + Lsgt/RAlt - // Locking uppercase: left Shift + right Shift - // Locking Ebene 4: Shift + Caps + Tab, or Lsgt + RAlt - - - // Captions for the large table below - // -------------------------------------------------------------- - // Xorg: Level1 Level2 Level3 Level4 Level5 Level6 Level7 Level8 - // Neo: Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Pseudo-Ebene Ebene6 - // Access key: none Shift Caps/Bksl Shift + Caps/Bksl Lsgt/RAlt Shift + Lsgt/RAlt Caps/Bksl + Lsgt/RAlt - - - // Alphanumeric-keys - // ================= - key.type[Group1] = "EIGHT_LEVEL_WITH_LEVEL5_LOCK"; - - // The Tab key has Compose on the third layer (Caps + Tab) - // -------------------------------------------------------------- - key { [ Tab, ISO_Left_Tab, Multi_key, ISO_Level5_Lock, NoSymbol, NoSymbol, NoSymbol, ISO_Level5_Lock ] }; - - // Number row - // -------------------------------------------------------------- - key { [ dead_circumflex, dead_caron, U21BB, U02DE, dead_abovedot, Pointer_EnableKeys, dead_belowdot, NoSymbol ] }; - - key { [ 1, UED8B, onesuperior, onesubscript, ordfeminine, NoSymbol, notsign, NoSymbol ] }; - key { [ 2, UED8C, twosuperior, twosubscript, masculine, NoSymbol, logicalor, NoSymbol ] }; - key { [ 3, UED8D, threesuperior, threesubscript, numerosign, NoSymbol, logicaland, NoSymbol ] }; - key { [ 4, UED8E, U203A, femalesymbol, NoSymbol, NoSymbol, U22A5, NoSymbol ] }; - key { [ 5, guillemotleft, U2039, malesymbol, periodcentered, NoSymbol, U2221, NoSymbol ] }; - key { [ 6, dollar, cent, U26A5, sterling, NoSymbol, U2225, NoSymbol ] }; - - key { [ 7, EuroSign, yen, U03F0, currency, NoSymbol, rightarrow, NoSymbol ] }; - key { [ 8, doublelowquotemark, singlelowquotemark, U27E8, Tab, ISO_Left_Tab, U221E, NoSymbol ] }; - key { [ 9, leftdoublequotemark, leftsinglequotemark, U27E9, KP_Divide, KP_Divide, variation, NoSymbol ] }; - key { [ 0, rightdoublequotemark, rightsinglequotemark, zerosubscript, KP_Multiply, KP_Multiply, emptyset, NoSymbol ] }; - - key { [ UED9B, UED99, NoSymbol, U2011, KP_Subtract, KP_Subtract, hyphen, NoSymbol ] }; - key { [ dead_grave, dead_cedilla, dead_abovering, dead_dasia, dead_diaeresis, NoSymbol, dead_macron, NoSymbol ] }; - - // Top row - // -------------------------------------------------------------- - key.type[Group1] = "EIGHT_LEVEL_ALPHABETIC_WITH_LEVEL5_LOCK"; - key { [ UED88, UED88, ellipsis, Greek_xi, Prior, Prior, Greek_XI, NoSymbol ] }; - key { [ UED93, UED93, underscore, NoSymbol, BackSpace, BackSpace, radical, NoSymbol ] }; - key { [ UED84, UED84, bracketleft, Greek_lambda, Up, Up, Greek_LAMBDA, NoSymbol ] }; - key { [ UED86, UED86, bracketright, Greek_chi, Delete, Delete, U2102, NoSymbol ] }; - key { [ UEDAB, UEDAB, asciicircum, Greek_omega, Next, Next, Greek_OMEGA, NoSymbol ] }; - - key { [ UED82, UED82, exclam, Greek_kappa, exclamdown, NoSymbol, multiply, NoSymbol ] }; - key { [ UED8A, UED8A, less, Greek_psi, KP_7, KP_7, Greek_PSI, NoSymbol ] }; - key { [ UED92, UED92, greater, Greek_gamma, KP_8, KP_8, Greek_GAMMA, NoSymbol ] }; - key { [ UED83, UED83, equal, Greek_phi, KP_9, KP_9, Greek_PHI, NoSymbol ] }; - key { [ UEDAA, UEDAA, ampersand, U03D5, KP_Add, KP_Add, U211A, NoSymbol ] }; - - key { [ UEDA9, U1E9E, U017F, Greek_finalsmallsigma, U2212, NoSymbol, jot, NoSymbol ] }; - - key.type[Group1] = "EIGHT_LEVEL_WITH_LEVEL5_LOCK"; - key { [ dead_acute, dead_tilde, dead_stroke, dead_psili, dead_doubleacute, NoSymbol, dead_breve, NoSymbol ] }; - - // Middle row - // -------------------------------------------------------------- - key.type[Group1] = "EIGHT_LEVEL_ALPHABETIC_WITH_LEVEL5_LOCK"; - key { [ UEDA4, UEDB4, backslash, NoSymbol, Home, Home, includedin, NoSymbol ] }; - key { [ UEDA2, UEDB2, slash, Greek_iota, Left, Left, integral, NoSymbol ] }; - key { [ UEDA0, UEDB0, braceleft, Greek_alpha, Down, Down, U2200, NoSymbol ] }; - key { [ UEDA1, UEDB1, braceright, Greek_epsilon, Right, Right, U2203, NoSymbol ] }; - key { [ UEDA3, UEDB3, asterisk, Greek_omicron, End, End, elementof, NoSymbol ] }; - - key { [ UED85, UED85, question, Greek_sigma, questiondown, NoSymbol, Greek_SIGMA, NoSymbol ] }; - key { [ UED97, UED97, parenleft, Greek_nu, KP_4, KP_4, U2115, NoSymbol ] }; - key { [ UED94, UED94, parenright, Greek_rho, KP_5, KP_5, U211D, NoSymbol ] }; - key { [ UED81, UED81, minus, Greek_tau, KP_6, KP_6, partialderivative, NoSymbol ] }; - key { [ UED91, UED91, colon, Greek_delta, KP_Separator, comma, Greek_DELTA, NoSymbol ] }; - - key { [ UEDA5, UEDB5, at, Greek_upsilon, period, KP_Decimal, nabla, NoSymbol ] }; - - // Bottom row - // -------------------------------------------------------------- - key { [ UEDA7, UEDB7, numbersign, NoSymbol, Escape, Escape, union, NoSymbol ] }; - key { [ UEDA8, UEDB8, dollar, U03F5, Tab, Tab, intersection, NoSymbol ] }; - key { [ UEDA6, UEDB6, bar, Greek_eta, Insert, Insert, U2135, NoSymbol ] }; - key { [ UED80, UED80, asciitilde, Greek_pi, Return, Return, Greek_PI, NoSymbol ] }; - key { [ UED95, UED95, grave, Greek_zeta, Undo, Redo, U2124, NoSymbol ] }; - - key { [ UED90, UED90, plus, Greek_beta, colon, NoSymbol, U21D0, NoSymbol ] }; - key { [ UED87, UED87, percent, Greek_mu, KP_1, KP_1, ifonlyif, NoSymbol ] }; - key.type[Group1] = "EIGHT_LEVEL_WITH_LEVEL5_LOCK"; - key { [ UED98, comma, quotedbl, U03F1, KP_2, KP_2, U21D2, NoSymbol ] }; - key { [ UED89, period, apostrophe, U03D1, KP_3, KP_3, U21A6, NoSymbol ] }; - key.type[Group1] = "EIGHT_LEVEL_ALPHABETIC_WITH_LEVEL5_LOCK"; - key { [ UED96, UED96, semicolon, Greek_theta, semicolon, NoSymbol, Greek_THETA, NoSymbol ] }; - - // Space key - // -------------------------------------------------------------- - key.type[Group1] = "EIGHT_LEVEL_WITH_LEVEL5_LOCK"; - key { [ space, space, space, nobreakspace, KP_0, KP_0, U202F, NoSymbol ] }; - - - // Keypad-keys - // =========== - - // The former Numlock key: - key { [ Tab, ISO_Left_Tab, equal, approxeq, notequal, Pointer_EnableKeys, identical, NoSymbol ] }; - - // Topmost row - // -------------------------------------------------------------- - key { [ KP_Divide, KP_Divide, division, U2300, U2044, NoSymbol, U2223, NoSymbol ] }; - key { [ KP_Multiply, KP_Multiply, U22C5, U2299, multiply, NoSymbol, U2297, NoSymbol ] }; - key { [ KP_Subtract, KP_Subtract, U2212, U2296, U2216, NoSymbol, U2238, NoSymbol ] }; - - // Top row - // -------------------------------------------------------------- - key { [ KP_7, U2714, U2195, U226A, KP_Home, KP_Home, upstile, NoSymbol ] }; - key { [ KP_8, U2718, uparrow, intersection, KP_Up, KP_Up, U22C2, NoSymbol ] }; - key { [ KP_9, dagger, U20D7, U226B, KP_Prior, KP_Prior, U2309, NoSymbol ] }; - key { [ KP_Add, KP_Add, plusminus, U2295, U2213, NoSymbol, U2214, NoSymbol ] }; - - // Middle row - // -------------------------------------------------------------- - key { [ KP_4, club, leftarrow, includedin, KP_Left, KP_Left, U2286, NoSymbol ] }; - key { [ KP_5, EuroSign, colon, U22B6, KP_Begin, KP_Begin, U22B7, NoSymbol ] }; - key { [ KP_6, U2023, rightarrow, includes, KP_Right, KP_Right, U2287, NoSymbol ] }; - - // Bottom row - // -------------------------------------------------------------- - key { [ KP_1, diamond, U2194, lessthanequal, KP_End, KP_End, downstile, NoSymbol ] }; - key { [ KP_2, heart, downarrow, union, KP_Down, KP_Down, U22C3, NoSymbol ] }; - key { [ KP_3, U2660, U21CC, greaterthanequal, KP_Next, KP_Next, U230B, NoSymbol ] }; - key { [ KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, NoSymbol ] }; - key { [ KP_Equal, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] }; - - // Bottommost row - // -------------------------------------------------------------- - key { [ KP_0, U2423, percent, U2030, KP_Insert, KP_Insert, U25A1, NoSymbol ] }; - key { [ KP_Separator, period, comma, minutes, KP_Delete, KP_Delete, seconds, NoSymbol ] }; -}; - -partial alphanumeric_keys modifier_keys keypad_keys -xkb_symbols "neo_zlr" { - - include "de(neo_zlr_base)" - - name[Group1]= "Lojban (Neo 2)"; - - include "shift(both_capslock)" - include "level3(caps_switch)" - include "level3(bksl_switch)" - include "level5(lsgt_switch_lock)" - include "level5(ralt_switch_lock)" -}; diff --git a/extra/linux/config-nutty-noon.nix b/extra/linux/config-nutty-noon.nix deleted file mode 100644 index ecb42d61..00000000 --- a/extra/linux/config-nutty-noon.nix +++ /dev/null @@ -1,241 +0,0 @@ -'' - PERF_EVENTS_INTEL_RAPL y - ACPI_BUTTON y - ACPI_TINY_POWER_BUTTON y - X86_ACPI_CPUFREQ y - KVM y - KVM_AMD y - BLK_DEV_INTEGRITY_T10 y - ZSMALLOC y - PACKET y - NET_IP_TUNNEL y - NET_UDP_TUNNEL y - INET_DIAG y - INET_TCP_DIAG y - INET_MPTCP_DIAG y - NETFILTER_NETLINK y - NF_CONNTRACK y - NF_LOG_SYSLOG y - NF_TABLES y - NFT_COUNTER y - NFT_COMPAT y - NETFILTER_XTABLES y - NETFILTER_XT_TARGET_LOG y - NETFILTER_XT_MATCH_CONNTRACK y - NETFILTER_XT_MATCH_PKTTYPE y - NF_DEFRAG_IPV4 y - IP_NF_IPTABLES y - IP_NF_MATCH_RPFILTER y - IP_NF_MANGLE y - IP_NF_RAW y - NF_LOG_IPV6 y - IP6_NF_IPTABLES y - IP6_NF_MATCH_RPFILTER y - IP6_NF_MANGLE y - IP6_NF_RAW y - NF_DEFRAG_IPV6 y - STP y - BRIDGE y - VLAN_8021Q y - LLC y - NET_SCH_FQ_CODEL y - BT y - CFG80211 y - RFKILL y - NET_SELFTESTS y - EFI_VARS_PSTORE y - CDROM y - ZRAM y - BLK_DEV_LOOP y - NVME_CORE y - BLK_DEV_NVME y - SCSI_MOD y - SCSI_COMMON y - SCSI y - BLK_DEV_SD y - BLK_DEV_SR y - ATA y - SATA_AHCI y - SATA_AHCI_PLATFORM y - SATA_ACARD_AHCI y - BLK_DEV_DM y - DM_CRYPT y - MAC_EMUMOUSEBTN y - WIREGUARD y - MACVLAN y - MACVTAP y - TUN y - TAP y - R8169 y - PHYLIB y - FIXED_PHY y - REALTEK_PHY y - MDIO_DEVICE y - MDIO_BUS y - FWNODE_MDIO y - ACPI_MDIO y - MDIO_DEVRES y - INPUT_LEDS y - INPUT_MOUSEDEV y - INPUT_EVDEV y - KEYBOARD_ATKBD y - INPUT_UINPUT y - SERIO y - SERIO_I8042 y - SERIO_LIBPS2 y - HW_RANDOM y - TCG_TPM y - TCG_TIS_CORE y - TCG_TIS y - TCG_CRB y - I2C y - I2C_ALGOBIT y - I2C_PIIX4 y - PINCTRL_AMD y - GPIO_GENERIC y - GPIO_AMDPT y - SENSORS_K10TEMP y - WATCHDOG_CORE y - SP5100_TCO y - AGP y - DRM y - DRM_KMS_HELPER y - DRM_TTM y - DRM_TTM_HELPER y - DRM_SCHED y - DRM_AMDGPU y - FB_SYS_FILLRECT y - FB_SYS_COPYAREA y - FB_SYS_IMAGEBLIT y - FB_SYS_FOPS y - BACKLIGHT_CLASS_DEVICE y - SOUND y - SND y - SND_TIMER y - SND_PCM y - SND_HWDEP y - SND_SEQ_DEVICE y - SND_HRTIMER y - SND_CTL_LED y - SND_SEQUENCER y - SND_SEQ_DUMMY y - SND_HDA y - SND_HDA_INTEL y - SND_HDA_CODEC_REALTEK y - SND_HDA_CODEC_HDMI y - SND_HDA_GENERIC y - SND_HDA_CORE y - SND_INTEL_DSP_CONFIG y - SND_INTEL_SOUNDWIRE_ACPI y - HID y - HID_GENERIC y - USB_HID y - USB_COMMON y - USB y - USB_XHCI_HCD y - USB_XHCI_PCI y - USB_XHCI_PCI_RENESAS y - LEDS_CLASS y - LEDS_TRIGGER_AUDIO y - EDAC y - EDAC_DECODE_MCE y - RTC_I2C_AND_SPI y - RTC_DRV_CMOS y - IRQ_BYPASS_MANAGER y - ACPI_WMI y - WMI_BMOF y - AMD_IOMMU_V2 y - INTEL_RAPL_CORE y - INTEL_RAPL y - TEE y - AUTOFS_FS y - FUSE_FS y - FAT_FS y - VFAT_FS y - CONFIGFS_FS y - EFIVAR_FS y - PSTORE y - NLS_CODEPAGE_437 y - NLS_ISO8859_1 y - TRUSTED_KEYS y - ENCRYPTED_KEYS y - CRYPTO_AEAD y - CRYPTO_RNG y - CRYPTO_RNG_DEFAULT y - CRYPTO_NULL y - CRYPTO_CRYPTD y - CRYPTO_AUTHENC y - CRYPTO_SIMD y - CRYPTO_ECC y - CRYPTO_ECDH y - CRYPTO_CURVE25519_X86 y - CRYPTO_CCM y - CRYPTO_CBC y - CRYPTO_CTR y - CRYPTO_ECB y - CRYPTO_XTS y - CRYPTO_NHPOLY1305 y - CRYPTO_NHPOLY1305_SSE2 y - CRYPTO_NHPOLY1305_AVX2 y - CRYPTO_ADIANTUM y - CRYPTO_ESSIV y - CRYPTO_CMAC y - CRYPTO_CRC32C y - CRYPTO_CRC32C_INTEL y - CRYPTO_CRC32_PCLMUL y - CRYPTO_BLAKE2S_X86 y - CRYPTO_CRCT10DIF y - CRYPTO_CRCT10DIF_PCLMUL y - CRYPTO_POLY1305_X86_64 y - CRYPTO_MD4 y - CRYPTO_SHA512_SSSE3 y - CRYPTO_SHA512 y - CRYPTO_GHASH_CLMUL_NI_INTEL y - CRYPTO_AES y - CRYPTO_AES_NI_INTEL y - CRYPTO_DES y - CRYPTO_CHACHA20 y - CRYPTO_CHACHA20_X86_64 y - CRYPTO_SERPENT y - CRYPTO_SERPENT_SSE2_X86_64 y - CRYPTO_SERPENT_AVX_X86_64 y - CRYPTO_SERPENT_AVX2_X86_64 y - CRYPTO_DEFLATE y - CRYPTO_842 y - CRYPTO_LZ4 y - CRYPTO_LZ4HC y - CRYPTO_ZSTD y - CRYPTO_DRBG_MENU y - CRYPTO_DRBG y - CRYPTO_JITTERENTROPY y - CRYPTO_USER_API y - CRYPTO_USER_API_HASH y - CRYPTO_USER_API_SKCIPHER y - CRYPTO_USER_API_AEAD y - CRYPTO_LIB_AES y - CRYPTO_ARCH_HAVE_LIB_BLAKE2S y - CRYPTO_LIB_BLAKE2S_GENERIC y - CRYPTO_LIB_BLAKE2S y - CRYPTO_ARCH_HAVE_LIB_CHACHA y - CRYPTO_LIB_CHACHA_GENERIC y - CRYPTO_LIB_CHACHA y - CRYPTO_ARCH_HAVE_LIB_CURVE25519 y - CRYPTO_LIB_CURVE25519_GENERIC y - CRYPTO_LIB_CURVE25519 y - CRYPTO_LIB_DES y - CRYPTO_ARCH_HAVE_LIB_POLY1305 y - CRYPTO_LIB_POLY1305_GENERIC y - CRYPTO_LIB_POLY1305 y - CRYPTO_LIB_CHACHA20POLY1305 y - CRC16 y - CRC_T10DIF y - LIBCRC32C y - 842_COMPRESS y - 842_DECOMPRESS y - LZ4_COMPRESS y - LZ4HC_COMPRESS y - ZSTD_COMPRESS y - ASN1_ENCODER y - SCHED_AUTOGROUP y - SCHED_AUTOGROUP_DEFAULT_ENABLED y -'' diff --git a/extra/mc-catppuccin.ini b/extra/mc-catppuccin.ini deleted file mode 100644 index 4d162669..00000000 --- a/extra/mc-catppuccin.ini +++ /dev/null @@ -1,140 +0,0 @@ -[skin] - description = Catppuccin - -[Lines] - horiz = ─ - vert = │ - lefttop = ╭ - righttop = ╮ - leftbottom = ╰ - rightbottom = ╯ - topmiddle = ┬ - bottommiddle = ┴ - leftmiddle = ├ - rightmiddle = ┤ - cross = ┼ - dhoriz = ─ - dvert = │ - dlefttop = ╭ - drighttop = ╮ - dleftbottom = ╰ - drightbottom = ╯ - dtopmiddle = ┬ - dbottommiddle = ┴ - dleftmiddle = ├ - drightmiddle = ┤ - -[filehighlight] - directory = blue; - executable = red; - symlink = cyan; - hardlink = cyan; - stalelink = cyan; - device = brightgreen; - special = green; - core = red; - temp = brightgreen; - archive = red; - doc = yellow; - source = brightcyan; - media = brightgreen; - graph = cyan; - database = brightred; - -[core] - _default_ = magenta;default - selected = black;cyan - marked = black;cyan - markselect = black;blue - gauge = black;magenta - input = blue;black - inputmark = black;red - inputunchanged = red;black - commandlinemark = white;red - reverse = black;magenta - header = black;magenta - -[dialog] - _default_ = magenta;gray - dfocus = black;magenta - dhotnormal = gray;magenta - dhotfocus = gray;magenta - dtitle = magenta;gray - -[error] - _default_ = red;gray - errdfocus = black;red - errdhotnormal = red;black - errdhotfocus = yellow;red - errdtitle = gray;red - -[menu] - _default_ = white;black - menusel = black;cyan - menuhot = black;cyan - menuhotsel = cyan;black - menuinactive = white;black - -[help] - _default_ = magenta;gray - helpitalic = red;black;italic - helpbold = brightgreen;black;bold - helplink = blue;black - helpslink = gray;blue - helptitle = gray;magenta - -[editor] - _default_ = magenta;default - editbold = brightgreen;black - editmarked = black;cyan - editwhitespace = brightblue;black - editlinestate = white;black - bookmark = black;red - bookmarkfound = black;brightgreen - editrightmargin = brightblue;black - editframe = brightgreen; - editframeactive = white; - editframedrag = brightblue; - -[viewer] - _default_ = magenta;default - viewbold = green;black;bold - viewunderline = red;black - viewselected = blue;black - -[popupmenu] - _default_ = white;black - menusel = black;cyan - menutitle = white;black - -[buttonbar] - hotkey = black;cyan - button = white;black - -[statusbar] - _default_ = white;black - -[diffviewer] - added = black;green - changedline = black;cyan - changednew = red;cyan - changed = black;yellow - removed = black;red - error = red;white - -[widget-common] - sort-sign-up = ↑ - sort-sign-down = ↓ - -[widget-panel] - hiddenfiles-sign-show = • - hiddenfiles-sign-hide = ○ - history-prev-item-sign = « - history-next-item-sign = » - history-show-list-sign = ^ - filename-scroll-left-char = « - filename-scroll-right-char = » - -[widget-editor] - window-state-char = ↕ - window-close-char = ✕ diff --git a/extra/shitalloverme.html b/extra/shitalloverme.html deleted file mode 100644 index 5dd4cc7c..00000000 --- a/extra/shitalloverme.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - Shit all over me - - - - - - - - - - - - - Charlotte Raccoon on all fours shitting on the foor and racs legs. Rac is also peeing into racs only partially removed panties. Rac is surrounded by a clear, flexible pipe that has shit flowing through it. There is a second panel that points at racs face, showing rac, with the end of said tube in racs shit-stained mouth. Rac is looking very strained as the fetid mess is relentlessly forced into racs body. Art By rexyi - -

- The contents on this site are for adults only and contains scat and force-feeding. -

- - diff --git a/extra/theme.nix b/extra/theme.nix deleted file mode 100644 index edc4dcd8..00000000 --- a/extra/theme.nix +++ /dev/null @@ -1,33 +0,0 @@ -rec { - name = "Catppuccin Mocha Theme"; - - rosewater = "f5e0dc"; - flamingo = "f2cdcd"; - pink = "f5c2e7"; - mauve = "cba6f7"; - red = "f38ba8"; - maroon = "eba0ac"; - peach = "fab387"; - yellow = "f9e2af"; - green = "a6e3a1"; - teal = "94e2d5"; - sky = "89dceb"; - sapphire = "74c7ec"; - blue = "89b4fa"; - lavender = "b4befe"; - text = "cdd6f4"; - subtext1 = "bac2de"; - subtext0 = "a6adc8"; - overlay2 = "9399b2"; - overlay1 = "7f849c"; - overlay0 = "6c7086"; - surface2 = "585b70"; - surface1 = "45475a"; - surface0 = "313244"; - base = "1e1e2e"; - mantle = "181825"; - crust = "11111b"; - - cssColor = color: "#${color}"; - alacrittyColor = color: "0x${color}"; -} diff --git a/extra/user.yaml b/extra/user.yaml deleted file mode 100644 index 00cbd23d..00000000 --- a/extra/user.yaml +++ /dev/null @@ -1,45 +0,0 @@ -bananas: - - PWA/TPHA/TPHAS - - PWA/TPHA/TPHAZ -bruh: - - PWRU -fursona: - - TPUR/SO/TPHA -I didn’t have: - - KWR*EUF -lol: - - HROL -Lotte: - - HROT/TE -nonbinary: - - TPWOPB/PWAOEUPB/AER -otherkin: - - OER/KEUPB -Sergal: - - SER/TKPWAL - - SERLG -serval: - - SER/SRAL -solder: - - SOL/TKER -tbh: - - TPWH* -therian: - - THER/KWRAPB -to be honest: - - TPWH -"{^ty}": - - TEU -yiff: - - KWREUF -# Typographically correct strokes -'{^’}': - - AE -'{‘^}': - - A*E -'{^”}': - - KR-GS -'{“^}': - - KW-GS -—: - - TK-RB diff --git a/extra/worth.yml b/extra/worth.yml deleted file mode 100644 index 91f7e1af..00000000 --- a/extra/worth.yml +++ /dev/null @@ -1,1129 +0,0 @@ - - -# Maintained by Vinyl Da.i'gyu-Kazotetsu [https://www.queengoob.org] -# Initialy created by X00LA: https://github.com/X00LA/Bukkit-Essentials-worth.yml -# License: GNU General Public License v2.0 -# Compatible MC Version: 1.13.x+ -# Latest MC Version: 1.18.x -# Optimized for ideal balanced Economy! -# Report any issues by commenting on the GitHub Gist (https://gist.github.com/queengooborg/92d08120f0d6d25175f6c7a30e3ccac7) or via Vinyl's website - -# Known Issues/To-Do: -# Firework Rockets have a flat price and need different pricing for each type - -# Changelog: -# 1.18.x: -# Add items introduced in 1.18.x -# Reduce price of copper -# Reduce price of raw/ore minerals to 80% -# Fix prices for Amethyst-based items -# -# 1.17.x (Part 2): -# Reduce price of Nether/Warped Wart Block -# Reduce price of Firework Rocket -# Reduce price of Crying Obsidian (now Obsidian * 3) -# Reduce price of Amethyst by 1/5 -# -# 1.17.x (Part 1): -# Add items introduced in 1.17.x -# Add missing items from earlier releases -# Triple price for Elytra (from 2000.00 to 6000.00) -# Fix a typo for Dark Prismarine Stairs -# Drop price of black dye from 178.4 to 3.3 -# Update prices for pumpkin items (from MCTzOCK's fork) -# -# 1.16.x: -# Add items introduced in 1.16.x -# Adjust price for Bottle o' Enchanting (25.00) -# Fix doubled entry for Hay Bale -# -# 1.15.x: -# Add items introduced in 1.15.x -# Drop magma blocks from 101.06 to 41.06 -# Separate potion prices once again (thanks Yaroster & Roukaysa!) -# Raise price for Elytra to 2000.00 -# Drop price of Netherrack from 5.50 to 0.75 -# -# 1.14.x (Initial Version After Fork): -# Modify existing entries to work with 1.13.x+ -# Add items introduced in 1.13.x and 1.14.x -# Add price for Obsidian (130.80), roughly based on default value -# Simplify potion prices (flat 100.00 rate) -# Add price for Splash Potion (40.72) -# Adjust price for Lingering Potion (50.20) - -worth: - acaciaboat: 15.16 - acaciabutton: 3.03 - acaciadoor: 6.06 - acaciafence: 5.1 - acaciafencegate: 12.43 - acacialeaves: 2.2 - acacialog: 11.0 - acaciaplanks: 2.21 - acaciapressureplate: 6.06 - acaciasapling: 1.8 - acaciasign: 6.59 - acaciaslab: 1.52 - acaciastairs: 4.55 - acaciatrapdoor: 9.1 - acaciawood: 41.8 - activatorrail: 20.82 - allium: 5.5 - amethystblock: 30.6 - amethystcluster: 8.58 - amethystshard: 9.0 - ancientdebris: 605.0 - andesite: 1.1 - andesiteslab: 0.58 - andesitestairs: 1.73 - andesitewall: 1.16 - anvil: 627.72 - apple: 3.3 - armorstand: 10.16 - arrow: 0.69 - axolotlbucket: 67.31 - azalea: 2.8 - azalealeaves: 2.2 - azalealeavesflowers: 2.6 - azurebluet: 1.93 - bakedpotato: 1.73 - bamboo: 0.81 - barrel: 22.74 - basalt: 0.26 - beacon: 471.1 - beef: 5.5 - beehive: 5.0 - beenest: 5.0 - beetroot: 0.66 - beetrootseeds: 0.22 - beetrootsoup: 6.55 - bell: 147.28 - bigdripleaf: 2.3 - birchboat: 15.16 - birchbutton: 3.03 - birchdoor: 6.06 - birchfence: 5.1 - birchfencegate: 12.43 - birchleaves: 2.2 - birchlog: 11.0 - birchplanks: 2.21 - birchpressureplate: 6.06 - birchsapling: 1.8 - birchsign: 6.59 - birchslab: 1.52 - birchstairs: 4.55 - birchtrapdoor: 9.1 - birchwood: 41.8 - blackbanner: 59.8 - blackbed: 26.42 - blackcandle: 8.95 - blackcarpet: 19.4 - blackconcrete: 1.06 - blackconcretepowder: 1.01 - blackdye: 3.3 - blackglazedterracotta: 19.03 - blackshulkerbox: 90.84 - blackstainedglass: 2.25 - blackstainedglasspane: 0.89 - blackstone: 1.54 - blackstoneslab: 0.81 - blackstonestairs: 2.42 - blackstonewall: 1.62 - blackterracotta: 16.57 - blackwool: 9.24 - blastfurnace: 108.55 - blazepowder: 57.75 - blazerod: 110.0 - bluebanner: 59.8 - bluebed: 26.42 - bluecandle: 8.95 - bluecarpet: 19.4 - blueconcrete: 1.06 - blueconcretepowder: 1.01 - bluedye: 3.3 - blueglazedterracotta: 19.03 - blueice: 15.4 - blueorchid: 1.1 - blueshulkerbox: 90.84 - bluestainedglass: 2.25 - bluestainedglasspane: 0.89 - blueterracotta: 16.75 - bluewool: 9.24 - bone: 1.75 - boneblock: 18.19 - bonemeal: 0.61 - book: 10.48 - bookshelf: 51.21 - bow: 9.97 - bowl: 2.27 - braincoral: 2.87 - braincoralblock: 3.43 - braincoralfan: 3.17 - bread: 10.4 - brewingstand: 118.97 - brick: 4.62 - bricks: 19.4 - brickslab: 10.19 - brickstairs: 30.56 - brickwall: 20.46 - brownbanner: 74.36 - brownbed: 26.42 - browncandle: 11.15 - browncarpet: 24.26 - brownconcrete: 1.36 - brownconcretepowder: 1.30 - browndye: 5.5 - brownglazedterracotta: 19.34 - brownmushroom: 1.1 - brownmushroomblock: 2.2 - brownshulkerbox: 93.15 - brownstainedglass: 2.54 - brownstainedglasspane: 1.0 - brownterracotta: 16.57 - brownwool: 11.55 - bubblecoral: 2.87 - bubblecoralblock: 3.43 - bubblecoralfan: 3.17 - bucket: 58.21 - buddingamethyst: 39.69 - bundle: 10.04 - cactus: 5.5 - cake: 13.92 - calcite: 1.1 - campfire: 44.04 - candle: 6.15 - carrot: 0.83 - carrotonastick: 9.52 - cartographytable: 54.89 - carvedpumpkin: 12.69 - cauldron: 135.83 - chain: 17.10 - chainmailboots: 330.0 - chainmailchestplate: 715.0 - chainmailhelmet: 330.0 - chainmailleggings: 550.0 - charcoal: 12.71 - chest: 24.26 - chestminecart: 127.34 - chicken: 2.75 - chippedanvil: 313.86 - chiseleddeepslate: 3.21 - chiselednetherbricks: 31.97 - chiseledpolishedblackstone: 2.67 - chiseledquartzblock: 22.28 - chiseledredsandstone: 8.02 - chiseledsandstone: 2.55 - chiseledstonebricks: 2.67 - chorusflower: 27.5 - chorusfruit: 5.5 - chorusplant: 31.6 - clay: 3.3 - clayball: 13.86 - clock: 250.87 - coal: 8.8 - coalblock: 83.16 - coalore: 11.0 - coarsedirt: 0.58 - cobbleddeepslate: 1.32 - cobbleddeepslateslab: 0.7 - cobbleddeepslatestairs: 2.08 - cobbleddeepslatewall: 1.39 - cobblestone: 1.1 - cobblestoneslab: 0.58 - cobblestonestairs: 1.73 - cobblestonewall: 1.16 - cobweb: 0.01 - cocoabeans: 4.56 - cod: 3.3 - codbucket: 67.31 - comparator: 313.9 - compass: 158.7 - composter: 29.83 - conduit: 99.13 - cookedbeef: 6.93 - cookedchicken: 4.04 - cookedcod: 4.62 - cookedmutton: 2.31 - cookedporkchop: 5.78 - cookedrabbit: 2.89 - cookedsalmon: 4.91 - cookie: 1.59 - copperblock: 115.47 - copperingot: 12.83 - copperore: 10.26 - cornflower: 2.75 - crackeddeepslatebricks: 4.45 - crackeddeepslatetiles: 4.67 - crackednetherbricks: 44.31 - crackedpolishedblackstone: 3.70 - crackedpolishedblackstonebricks: 3.89 - crackedstonebricks: 3.7 - craftingtable: 12.13 - creeperbannerpattern: 5041.8 - creeperhead: 5000.0 - crimsonbutton: 3.64 - crimsondoor: 7.27 - crimsonfence: 61.2 - crimsonfencegate: 14.92 - crimsonfungus: 1.32 - crimsonhyphae: 41.8 - crimsonnylium: 2.25 - crimsonplanks: 2.65 - crimsonpressureplate: 7.27 - crimsonroots: 0.03 - crimsonsign: 7.91 - crimsonslab: 1.82 - crimsonstairs: 5.46 - crimsonstem: 13.2 - crimsontrapdoor: 10.92 - crossbow: 58.1 - cryingobsidian: 392.40 - cutcopper: 121.47 - cutcopperslab: 63.62 - cutcopperstairs: 200.87 - cutredsandstone: 7.28 - cutredsandstoneslab: 3.84 - cutsandstone: 2.43 - cutsandstoneslab: 1.28 - cyanbanner: 73.5 - cyanbed: 26.42 - cyancandle: 11.05 - cyancarpet: 23.97 - cyanconcrete: 1.35 - cyanconcretepowder: 1.28 - cyandye: 5.40 - cyanglazedterracotta: 19.32 - cyanshulkerbox: 93.02 - cyanstainedglass: 2.52 - cyanstainedglasspane: 0.99 - cyanterracotta: 16.57 - cyanwool: 11.41 - damagedanvil: 156.93 - dandelion: 1.32 - darkoakboat: 15.16 - darkoakbutton: 3.03 - darkoakdoor: 6.06 - darkoakfence: 5.1 - darkoakfencegate: 12.43 - darkoakleaves: 2.2 - darkoaklog: 11.0 - darkoakplanks: 2.21 - darkoakpressureplate: 6.06 - darkoaksapling: 1.8 - darkoaksign: 6.59 - darkoakslab: 1.52 - darkoakstairs: 4.55 - darkoaktrapdoor: 9.1 - darkoakwood: 41.8 - darkprismarine: 49.67 - darkprismarineslab: 26.19 - darkprismarinestairs: 78.12 - daylightdetector: 70.87 - deadbraincoral: 0.01 - deadbraincoralblock: 0.01 - deadbraincoralfan: 0.02 - deadbubblecoral: 0.01 - deadbubblecoralblock: 0.01 - deadbubblecoralfan: 0.02 - deadbush: 0.01 - deadfirecoral: 0.01 - deadfirecoralblock: 0.01 - deadfirecoralfan: 0.02 - deadhorncoral: 0.01 - deadhorncoralblock: 0.01 - deadhorncoralfan: 0.02 - deadtubecoral: 0.01 - deadtubecoralblock: 0.01 - deadtubecoralfan: 0.02 - deepslate: 2.77 - deepslatebricks: 2.92 - deepslatebrickslab: 1.52 - deepslatebrickstairs: 4.58 - deepslatebrickwall: 3.07 - deepslatecoalore: 11.0 - deepslatecopperore: 11.41 - deepslatediamondore: 555.5 - deepslateemeraldore: 60.5 - deepslategoldore: 46.0 - deepslateironore: 14.2 - deepslatelapisore: 22.0 - deepslateredstoneore: 16.5 - deepslatetiles: 3.07 - deepslatetileslab: 1.61 - deepslatetilestairs: 5.08 - deepslatetilewall: 1.54 - detectorrail: 20.83 - diamond: 550.0 - diamondaxe: 1735.68 - diamondblock: 5197.5 - diamondboots: 2310.0 - diamondchestplate: 4620.0 - diamondhelmet: 2887.5 - diamondhoe: 1158.18 - diamondhorsearmor: 3300.0 - diamondleggings: 4042.5 - diamondore: 555.5 - diamondpickaxe: 1735.68 - diamondshovel: 580.68 - diamondsword: 1156.59 - diorite: 1.1 - dioriteslab: 0.58 - dioritestairs: 1.73 - dioritewall: 1.16 - dirt: 0.53 - dispenser: 22.02 - dragonbreath: 110.0 - dragonegg: 1100.0 - dragonhead: 25000.0 - driedkelp: 3.85 - driedkelpblock: 36.38 - dripstoneblock: 1.82 - dropper: 8.09 - egg: 0.55 - elytra: 6000.0 - emerald: 55.0 - emeraldblock: 519.75 - emeraldore: 60.5 - enchantedbook: 89.3 - enchantedgoldenapple: 4679.34 - enchantingtable: 1397.01 - endcrystal: 223.67 - enderchest: 429.09 - endereye: 118.39 - enderpearl: 55.0 - endrod: 30.69 - endstone: 11.0 - endstonebricks: 11.57 - endstonebrickslab: 5.8 - endstonebrickstairs: 17.3 - endstonebrickwall: 11.6 - endstoneslab: 5.8 - endstonestairs: 17.3 - endstonewall: 11.6 - experiencebottle: 25.0 - exposedcopper: 57.74 - exposedcutcopper: 60.74 - exposedcutcopperslab: 31.82 - exposedcutcopperstairs: 100.44 - farmland: 0.58 - feather: 0.55 - fermentedspidereye: 5.23 - fern: 0.01 - filledmap: 10.0 - firecharge: 81.43 - firecoral: 2.87 - firecoralblock: 3.43 - firecoralfan: 3.17 - fireworkrocket: 11.12 - fireworkstar: 101.75 - fishingrod: 8.24 - fletchingtable: 13.23 - flint: 0.55 - flintandsteel: 19.98 - flowerbannerpattern: 3.83 - floweringazalea: 3.0 - flowerpot: 14.55 - furnace: 9.24 - furnaceminecart: 111.57 - ghasttear: 82.5 - gildedblackstone: 58.0 - glass: 1.73 - glassbottle: 1.82 - glasspane: 0.68 - glisteringmelonslice: 8.95 - globebannerpattern: 481.8 - glowberries: 3.3 - glowinksac: 3.35 - glowitemframe: 24.08 - glowlichen: 6.7 - glowstone: 36.96 - glowstonedust: 8.8 - goldblock: 556.65 - goldenapple: 61.19 - goldenaxe: 188.73 - goldenboots: 247.4 - goldencarrot: 58.59 - goldenchestplate: 494.8 - goldenhelmet: 309.25 - goldenhoe: 126.88 - goldenhorsearmor: 385.0 - goldenleggings: 432.95 - goldenpickaxe: 188.73 - goldenshovel: 65.03 - goldensword: 125.29 - goldingot: 58.91 - goldnugget: 6.87 - goldore: 44.0 - granite: 1.1 - graniteslab: 0.58 - granitestairs: 1.73 - granitewall: 1.16 - grass: 0.01 - grassblock: 0.63 - gravel: 0.55 - graybanner: 56.12 - graybed: 26.42 - graycandle: 7.7 - graycarpet: 18.18 - grayconcrete: 0.88 - grayconcretepowder: 0.84 - graydye: 2.05 - grayglazedterracotta: 18.86 - grayshulkerbox: 90.26 - graystainedglass: 2.18 - graystainedglasspane: 0.86 - grayterracotta: 19.96 - graywool: 8.66 - greenbanner: 83.82 - greenbed: 26.42 - greencandle: 12.64 - greencarpet: 27.41 - greenconcrete: 1.57 - greenconcretepowder: 1.49 - greendye: 6.99 - greenglazedterracotta: 19.54 - greenshulkerbox: 94.66 - greenstainedglass: 2.73 - greenstainedglasspane: 1.07 - greenterracotta: 16.72 - greenwool: 13.05 - grindstone: 11.77 - gunpowder: 11.0 - hayblock: 31.19 - heartofthesea: 44.39 - heavyweightedpressureplate: 38.81 - honeyblock: 9.0 - honeybottle: 3.25 - honeycomb: 6.0 - honeycombblock: 8.0 - hopper: 122.49 - hopperminecart: 230.48 - horncoral: 2.87 - horncoralblock: 3.43 - horncoralfan: 3.17 - ice: 7.7 - inksac: 3.3 - ironaxe: 61.4 - ironbars: 7.28 - ironblock: 174.64 - ironboots: 77.62 - ironchestplate: 155.23 - irondoor: 38.81 - ironhelmet: 97.02 - ironhoe: 41.99 - ironhorsearmor: 132.0 - ironingot: 18.48 - ironleggings: 135.83 - ironnugget: 2.16 - ironore: 13.2 - ironpickaxe: 61.4 - ironshovel: 22.59 - ironsword: 40.4 - irontrapdoor: 77.62 - itemframe: 21.4 - jackolantern: 14.39 - jukebox: 601.76 - jungleboat: 15.16 - junglebutton: 3.03 - jungledoor: 6.06 - junglefence: 5.1 - junglefencegate: 12.43 - jungleleaves: 2.2 - junglelog: 11.0 - jungleplanks: 2.21 - junglepressureplate: 6.06 - junglesapling: 1.8 - junglesign: 6.59 - jungleslab: 1.52 - junglestairs: 4.55 - jungletrapdoor: 9.1 - junglewood: 41.8 - kelp: 3.13 - ladder: 3.71 - lantern: 19.99 - lapisblock: 31.19 - lapislazuli: 13.25 - lapisore: 22.0 - largeamethystbud: 7.17 - largefern: 0.01 - lavabucket: 62.28 - lead: 9.24 - leather: 5.25 - leatherboots: 34.65 - leatherchestplate: 69.3 - leatherhelmet: 43.31 - leatherhorsearmor: 41.98 - leatherleggings: 60.64 - lectern: 57.59 - lever: 2.75 - lightbluebanner: 56.12 - lightbluebed: 26.42 - lightbluecandle: 7.7 - lightbluecarpet: 18.18 - lightblueconcrete: 0.88 - lightblueconcretepowder: 0.84 - lightbluedye: 2.05 - lightblueglazedterracotta: 18.86 - lightblueshulkerbox: 90.26 - lightbluestainedglass: 2.18 - lightbluestainedglasspane: 0.86 - lightblueterracotta: 21.59 - lightbluewool: 8.66 - lightgraybanner: 53.73 - lightgraybed: 26.42 - lightgraycandle: 7.0 - lightgraycarpet: 17.38 - lightgrayconcrete: 0.79 - lightgrayconcretepowder: 0.75 - lightgraydye: 1.35 - lightgrayglazedterracotta: 18.77 - lightgrayshulkerbox: 89.88 - lightgraystainedglass: 2.13 - lightgraystainedglasspane: 0.84 - lightgrayterracotta: 18.32 - lightgraywool: 8.28 - lightningrod: 33.23 - lightweightedpressureplate: 123.7 - lilac: 2.75 - lilyofthevalley: 2.75 - lilypad: 3.3 - limebanner: 68.73 - limebed: 26.42 - limecandle: 9.64 - limecarpet: 22.38 - limeconcrete: 1.15 - limeconcretepowder: 1.10 - limedye: 3.99 - limeglazedterracotta: 19.03 - limeshulkerbox: 92.26 - limestainedglass: 2.43 - limestainedglasspane: 0.96 - limeterracotta: 16.7 - limewool: 10.66 - lingeringpotion: 50.20 - lodestone: 1803.52 - loom: 7.92 - magentabanner: 49.61 - magentabed: 26.42 - magentacandle: 7.02 - magentacarpet: 16.0 - magentaconcrete: 0.79 - magentaconcretepowder: 0.75 - magentadye: 1.37 - magentaglazedterracotta: 18.77 - magentashulkerbox: 89.23 - magentastainedglass: 2.05 - magentastainedglasspane: 0.81 - magentaterracotta: 16.71 - magentawool: 7.62 - magmablock: 41.06 - magmacream: 24.06 - map: 171.48 - mediumamethystbud: 4.69 - melon: 15.59 - melonblock: 15.59 - melonseeds: 16.5 - melonslice: 1.65 - milkbucket: 61.7 - minecart: 97.02 - mojangbannerpattern: 4721.14 - mossblock: 2.2 - mosscarpet: 1.47 - mossycobblestone: 6.93 - mossycobblestoneslab: 3.65 - mossycobblestonestairs: 10.9 - mossycobblestonewall: 7.28 - mossystonebricks: 8.32 - mossystonebrickslab: 4.39 - mossystonebrickstairs: 13.08 - mossystonebrickwall: 8.77 - mushroomstem: 2.2 - mushroomstew: 4.7 - musicdisc11: 132.0 - musicdisc13: 132.0 - musicdiscblocks: 132.0 - musicdisccat: 132.0 - musicdiscchirp: 132.0 - musicdiscfar: 132.0 - musicdiscmall: 132.0 - musicdiscmellohi: 132.0 - musicdiscotherside: 132.0 - musicdiscpigstep: 132.0 - musicdiscstal: 132.0 - musicdiscstrad: 132.0 - musicdiscwait: 132.0 - musicdiscward: 132.0 - mutton: 1.1 - mycelium: 11.0 - nametag: 55.0 - nautilusshell: 6.58 - netherbrick: 6.93 - netherbrickfence: 45.84 - netherbricks: 29.1 - netherbrickslab: 15.28 - netherbrickstairs: 45.84 - netherbrickwall: 7.31 - nethergoldore: 46.0 - netheriteaxe: 4416.93 - netheriteblock: 16891.88 - netheriteboots: 4991.25 - netheritechestplate: 7301.25 - netheritehelmet: 5568.75 - netheritehoe: 3839.43 - netheriteingot: 1787.50 - netheriteleggings: 6723.75 - netheritepickaxe: 4416.93 - netheritescrap: 632.50 - netheriteshovel: 3261.93 - netheritesword: 3837.84 - netherquartzore: 22.0 - netherrack: 1.75 - nethersprouts: 0.02 - netherstar: 275.0 - netherwart: 16.5 - netherwartblock: 118.8 - noteblock: 27.72 - oakboat: 15.16 - oakbutton: 3.03 - oakdoor: 6.06 - oakfence: 5.1 - oakfencegate: 12.43 - oakleaves: 2.2 - oaklog: 11.0 - oakplanks: 2.21 - oakpressureplate: 6.06 - oaksapling: 1.8 - oaksign: 6.59 - oakslab: 1.52 - oakstairs: 4.55 - oaktrapdoor: 9.1 - oakwood: 41.8 - observer: 34.07 - obsidian: 130.80 - orangebanner: 41.99 - orangebed: 26.42 - orangecandle: 6.29 - orangecarpet: 13.46 - orangeconcrete: 0.69 - orangeconcretepowder: 0.66 - orangedye: 0.64 - orangeglazedterracotta: 18.67 - orangeshulkerbox: 88.02 - orangestainedglass: 1.9 - orangestainedglasspane: 0.75 - orangeterracotta: 18.66 - orangetulip: 1.93 - orangewool: 6.41 - oxeyedaisy: 1.65 - oxidizedcopper: 34.64 - oxidizedcutcopper: 36.44 - oxidizedcutcopperslab: 19.09 - oxidizedcutcopperstairs: 60.27 - packedice: 16.5 - painting: 18.51 - paper: 0.58 - peony: 1.1 - phantommembrane: 1.4 - piglinbannerpattern: 5832.25 - pinkbanner: 46.67 - pinkbed: 26.42 - pinkcandle: 6.25 - pinkcarpet: 15.02 - pinkconcrete: 0.68 - pinkconcretepowder: 0.65 - pinkdye: 0.60 - pinkglazedterracotta: 18.66 - pinkshulkerbox: 88.76 - pinkstainedglass: 1.99 - pinkstainedglasspane: 0.78 - pinkterracotta: 19.3 - pinktulip: 1.93 - pinkwool: 7.15 - piston: 36.58 - playerhead: 5000.0 - podzol: 2.63 - pointeddripstone: 1.01 - poisonouspotato: 0.28 - polishedandesite: 1.16 - polishedandesiteslab: 0.61 - polishedandesitestairs: 1.82 - polishedbasalt: 0.32 - polishedblackstone: 2.31 - polishedblackstonebricks: 2.43 - polishedblackstonebrickslab: 1.27 - polishedblackstonebrickstairs: 3.82 - polishedblackstonebrickwall: 2.56 - polishedblackstonebutton: 4.85 - polishedblackstonepressureplate: 4.85 - polishedblackstoneslab: 1.21 - polishedblackstonestairs: 3.82 - polishedblackstonewall: 1.86 - polisheddeepslate: 4.16 - polisheddeepslateslab: 2.18 - polisheddeepslatestairs: 6.88 - polisheddeepslatewall: 2.09 - polisheddiorite: 1.16 - polisheddioriteslab: 0.61 - polisheddioritestairs: 1.82 - polishedgranite: 1.16 - polishedgraniteslab: 0.61 - polishedgranitestairs: 1.82 - poppedchorusfruit: 6.93 - poppy: 1.1 - porkchop: 4.4 - potato: 0.55 - potion: 100.0 - potion{Potion:fireresistance}: 45.56 - potion{Potion:harming}: 30.44 - potion{Potion:healing}: 29.69 - potion{Potion:invisibility}: 91.4 - potion{Potion:longfireresistance}: 51.31 - potion{Potion:longinvisibility}: 99.43 - potion{Potion:longnightvision}: 89.38 - potion{Potion:longpoison}: 28.42 - potion{Potion:longregeneration}: 115.73 - potion{Potion:longslowness}: 59.36 - potion{Potion:longstrength}: 88.45 - potion{Potion:longswiftness}: 25.41 - potion{Potion:longwaterbreathing}: 30.84 - potion{Potion:longweakness}: 11.23 - potion{Potion:nightvision}: 81.82 - potion{Potion:poison}: 23.76 - potion{Potion:regeneration}: 106.92 - potion{Potion:slowness}: 53.33 - potion{Potion:strength}: 80.93 - potion{Potion:strongharming}: 41.2 - potion{Potion:stronghealing}: 40.42 - potion{Potion:strongleaping}: 455.01 - potion{Potion:strongpoison}: 34.19 - potion{Potion:strongregeneration}: 121.51 - potion{Potion:strongstrengh}: 94.22 - potion{Potion:strongswiftness}: 31.19 - potion{Potion:swiftness}: 20.9 - potion{Potion:waterbreathing}: 26.07 - potion{Potion:weakness}: 7.49 - powderedsnowbucket: 62.54 - poweredrail: 62.69 - prismarine: 23.1 - prismarinebricks: 51.98 - prismarinebrickslab: 27.41 - prismarinebrickstairs: 81.75 - prismarinecrystals: 8.25 - prismarineshard: 5.5 - prismarineslab: 12.18 - prismarinestairs: 36.33 - prismarinewall: 24.36 - pufferfish: 5.5 - pufferfishbucket: 67.31 - pumpkin: 30.0 - pumpkinpie: 40.73 - pumpkinseeds: 4.5 - purplebanner: 51.44 - purplebed: 26.42 - purplecandle: 7.66 - purplecarpet: 16.62 - purpleconcrete: 0.88 - purpleconcretepowder: 0.84 - purpledye: 2.01 - purpleglazedterracotta: 18.86 - purpleshulkerbox: 83.22 - purplestainedglass: 2.09 - purplestainedglasspane: 0.82 - purpleterracotta: 17.22 - purplewool: 7.91 - purpurblock: 29.11 - purpurpillar: 32.09 - purpurslab: 15.28 - purpurstairs: 45.84 - quartz: 19.25 - quartzblock: 80.85 - quartzbricks: 85.05 - quartzpillar: 84.89 - quartzslab: 42.45 - quartzstairs: 127.34 - rabbit: 1.65 - rabbitfoot: 22.0 - rabbithide: 1.31 - rabbitstew: 9.26 - rail: 18.32 - rail: 7.38 - rawcopper: 10.26 - rawcopperblock: 103.84 - rawgold: 44.0 - rawgoldblock: 445.32 - rawiron: 13.2 - rawironblock: 139.71 - redbanner: 41.79 - redbed: 26.42 - redcandle: 6.18 - redcarpet: 13.4 - redconcrete: 0.67 - redconcretepowder: 0.64 - reddye: 0.53 - redglazedterracotta: 18.65 - redmushroom: 1.1 - redmushroomblock: 2.2 - rednetherbricks: 38.12 - rednetherbrickslab: 27.41 - rednetherbrickstairs: 59.95 - rednetherbrickwall: 40.2 - redsand: 1.63 - redsandstone: 6.93 - redsandstoneslab: 3.82 - redsandstonestairs: 10.91 - redsandstonewall: 7.31 - redshulkerbox: 87.99 - redstainedglass: 1.89 - redstainedglasspane: 0.75 - redstone: 3.3 - redstoneblock: 31.19 - redstonelamp: 52.67 - redstoneore: 16.5 - redstonetorch: 5.06 - redterracotta: 16.85 - redtulip: 1.93 - redwool: 6.38 - repeater: 21.36 - respawnanchor: 18810.00 - rooteddirt: 0.58 - rosebush: 1.1 - rottenflesh: 1.1 - saddle: 110.0 - salmon: 3.58 - salmonbucket: 67.31 - sand: 0.55 - sandstone: 2.31 - sandstoneslab: 1.21 - sandstonestairs: 0.87 - sandstonewall: 2.44 - scaffolding: 1.29 - scute: 1.1 - seagrass: 0.02 - sealantern: 66.41 - seapickle: 3.74 - shears: 38.81 - shield: 32.24 - shroomlight: 44.35 - shulkerbox: 76.48 - shulkershell: 34.2 - skeletonbannerpattern: 15041.8 - skeletonskull: 5000.0 - skullbannerpattern: 15041.8 - slimeball: 11.0 - slimeblock: 103.95 - smallamethystbud: 2.25 - smalldripleaf: 3.5 - smithingtable: 45.92 - smoker: 53.84 - smoothbasalt: 0.29 - smoothquartz: 89.14 - smoothquartzslab: 47.0 - smoothquartzstairs: 140.19 - smoothredsandstone: 7.28 - smoothredsandstoneslab: 3.84 - smoothredsandstonestairs: 11.45 - smoothsandstone: 2.43 - smoothsandstoneslab: 1.28 - smoothsandstonestairs: 3.82 - smoothstone: 2.43 - smoothstoneslab: 1.28 - snoutbannerpattern: 5041.8 - snow: 1.4 - snowball: 1.1 - snowblock: 4.4 - soulcampfire: 54.75 - soullantern: 30.7 - soulsand: 11.0 - soulsoil: 11.0 - soultorch: 11.71 - spectralarrow: 18.84 - spidereye: 3.3 - splashpotion: 40.72 - splashpotion{Potion:breathing}: 38.93 - splashpotion{Potion:fireresistance}: 59.39 - splashpotion{Potion:harming}: 43.51 - splashpotion{Potion:healing}: 42.73 - splashpotion{Potion:invisibility}: 107.52 - splashpotion{Potion:longfireresistance}: 65.42 - splashpotion{Potion:longinvisibility}: 115.96 - splashpotion{Potion:longnightvision}: 105.39 - splashpotion{Potion:longregeneration}: 139.13 - splashpotion{Potion:longslowness}: 73.88 - splashpotion{Potion:longstrengh}: 38.23 - splashpotion{Potion:longstrongstrengh}: 38.93 - splashpotion{Potion:longweakness}: 23.34 - splashpotion{Potion:nightvision}: 97.46 - splashpotion{Potion:poison}: 36.5 - splashpotion{Potion:regeneration}: 123.82 - splashpotion{Potion:slowness}: 67.54 - splashpotion{Potion:strengh}: 96.53 - splashpotion{Potion:strongharming}: 54.81 - splashpotion{Potion:stronghealing}: 53.99 - splashpotion{Potion:strongleaping}: 489.32 - splashpotion{Potion:strongpoison}: 41.39 - splashpotion{Potion:strongpoison}: 47.45 - splashpotion{Potion:strongregeneration}: 133.07 - splashpotion{Potion:strongregeneration}: 44.3 - splashpotion{Potion:strongstrengh}: 110.48 - splashpotion{Potion:swiftness}: 33.5 - splashpotion{Potion:weakness}: 19.42 - sponge: 12.71 - spruceboat: 15.16 - sprucebutton: 3.03 - sprucedoor: 6.06 - sprucefence: 5.1 - sprucefencegate: 12.43 - spruceleaves: 2.2 - sprucelog: 11.0 - spruceplanks: 2.21 - sprucepressureplate: 6.06 - sprucesapling: 1.8 - sprucesign: 6.59 - spruceslab: 1.52 - sprucestairs: 4.55 - sprucetrapdoor: 9.1 - sprucewood: 41.8 - spyglass: 27.73 - stick: 1.52 - stickypiston: 49.96 - stone: 2.31 - stoneaxe: 6.65 - stonebricks: 2.43 - stonebrickslab: 1.27 - stonebrickstairs: 3.82 - stonebrickwall: 2.56 - stonebutton: 4.85 - stonecutter: 21.27 - stonehoe: 5.49 - stonepickaxe: 6.65 - stonepressureplate: 4.85 - stoneshovel: 4.34 - stoneslab: 1.21 - stonestairs: 3.82 - stonesword: 3.9 - string: 1.65 - strippedacacialog: 10.35 - strippedacaciawood: 39.33 - strippedbirchlog: 10.35 - strippedbirchwood: 39.33 - strippedcrimsonhyphae: 47.2 - strippedcrimsonstem: 12.42 - strippeddarkoaklog: 10.35 - strippeddarkoakwood: 39.33 - strippedjunglelog: 10.35 - strippedjunglewood: 39.33 - strippedoaklog: 10.35 - strippedoakwood: 39.33 - strippedsprucelog: 10.35 - strippedsprucewood: 39.33 - strippedwarpedhyphae: 47.2 - strippedwarpedstem: 12.42 - sugar: 0.58 - sugarcane: 0.55 - sunflower: 3.3 - suspiciousstew: 5.2 - sweetberries: 3.3 - tallgrass: 0.01 - target: 34.90 - terracotta: 15.71 - tintedglass: 16.79 - tippedarrow: 20.0 - tnt: 60.06 - tntminecart: 164.93 - torch: 2.71 - totemofundying: 320.0 - trappedchest: 38.08 - trident: 78.83 - tripwirehook: 12.01 - tropicalfish: 1.65 - tropicalfishbucket: 67.31 - tubecoral: 2.87 - tubecoralblock: 3.43 - tubecoralfan: 3.17 - tuff: 0.26 - turtleegg: 0.75 - turtlehelmet: 5.6 - twistingvines: 4.45 - vine: 5.5 - warpedbutton: 3.64 - warpeddoor: 7.27 - warpedfence: 61.2 - warpedfencegate: 14.92 - warpedfungus: 1.32 - warpedfungusonastick: 9.52 - warpedhyphae: 41.8 - warpednylium: 2.25 - warpedplanks: 2.65 - warpedpressureplate: 7.27 - warpedroots: 0.03 - warpedsign: 7.91 - warpedslab: 1.82 - warpedstairs: 5.46 - warpedstem: 13.2 - warpedtrapdoor: 10.92 - warpedwartblock: 118.8 - waterbucket: 61.41 - waxedcopperblock: 117.91 - waxedcutcopper: 124.04 - waxedcutcopperslab: 64.98 - waxedcutcopperstairs: 205.13 - waxedexposedcopper: 58.96 - waxedexposedcutcopper: 62.03 - waxedexposedcutcopperslab: 32.49 - waxedexposedcutcopperstairs: 102.57 - waxedoxidizedcopper: 35.38 - waxedoxidizedcutcopper: 37.21 - waxedoxidizedcutcopperslab: 19.49 - waxedoxidizedcutcopperstairs: 61.54 - waxedweatheredcopper: 47.17 - waxedweatheredcutcopper: 49.61 - waxedweatheredcutcopperslab: 25.99 - waxedweatheredcutcopperstairs: 82.05 - weatheredcopper: 46.19 - weatheredcutcopper: 48.59 - weatheredcutcopperslab: 25.45 - weatheredcutcopperstairs: 80.35 - web: 2.48 - weepingvines: 4.45 - wetsponge: 11.0 - wheat: 3.3 - wheatseeds: 1.1 - whitebanner: 36.24 - whitebed: 26.42 - whitecandle: 6.36 - whitecarpet: 11.55 - whiteconcrete: 0.69 - whiteconcretepowder: 0.65 - whitedye: 0.71 - whiteglazedterracotta: 18.66 - whiteshulkerbox: 89.4 - whitestainedglass: 2.07 - whitestainedglasspane: 0.82 - whiteterracotta: 18.66 - whitetulip: 1.93 - whitewool: 5.5 - witherrose: 225.0 - witherskeletonskull: 15000.0 - woodenaxe: 12.28 - woodenhoe: 9.25 - woodenpickaxe: 12.28 - woodenshovel: 6.22 - woodensword: 7.66 - writablebook: 15.05 - writtenbook: 10.48 - yellowbanner: 41.79 - yellowbed: 26.42 - yellowcandle: 6.34 - yellowcarpet: 13.4 - yellowconcrete: 0.70 - yellowconcretepowder: 0.66 - yellowdye: 0.69 - yellowglazedterracotta: 18.68 - yellowshulkerbox: 87.99 - yellowstainedglass: 1.89 - yellowstainedglasspane: 0.75 - yellowterracotta: 16.57 - yellowwool: 6.38 - zombiehead: 5000.0 - diff --git a/flake.lock b/flake.lock index 38f3a171..1777c516 100644 --- a/flake.lock +++ b/flake.lock @@ -1,228 +1,68 @@ { "nodes": { - "admin-fe": { + "base16": { "inputs": { - "devshell": [ - "devshell" - ], - "flake-compat": [ - "flake-compat" - ], - "flake-parts": [ - "flake-parts" - ], - "nixpkgs": "nixpkgs" + "fromYaml": "fromYaml" }, "locked": { - "lastModified": 1719818359, - "narHash": "sha256-xtodS1K89j7uTnnoV0n8i1NFhbuebH6s6jj8qxMSvIA=", - "owner": "DarkKirb", - "repo": "admin-fe", - "rev": "76424b7fe477b5a81b2961e6e8742a12b441f3d3", + "lastModified": 1732200724, + "narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "153d52373b0fb2d343592871009a286ec8837aec", "type": "github" }, "original": { - "owner": "DarkKirb", - "repo": "admin-fe", + "owner": "SenchoPens", + "repo": "base16.nix", "type": "github" } }, - "akkoma": { - "inputs": { - "devshell": [ - "devshell" - ], - "flake-compat": [ - "flake-compat" - ], - "flake-parts": [ - "flake-parts" - ], - "nixpkgs": [ - "nixpkgs" - ] - }, + "base16-fish": { + "flake": false, "locked": { - "lastModified": 1728563845, - "narHash": "sha256-hRWxXnfUMZEORbDm0/GDKJhGy6FIKg3skM93esvSR7E=", - "owner": "DarkKirb", - "repo": "akkoma", - "rev": "38905fcf2fb4a4a9f23b1a3bf23daf78e41f3d3a", + "lastModified": 1622559957, + "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=", + "owner": "tomyun", + "repo": "base16-fish", + "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe", "type": "github" }, "original": { - "owner": "DarkKirb", - "repo": "akkoma", + "owner": "tomyun", + "repo": "base16-fish", "type": "github" } }, - "akkoma-fe": { - "inputs": { - "devshell": [ - "devshell" - ], - "flake-compat": [ - "flake-compat" - ], - "flake-parts": [ - "flake-parts" - ], - "nixpkgs": "nixpkgs_2" - }, + "base16-helix": { + "flake": false, "locked": { - "lastModified": 1728796349, - "narHash": "sha256-4/FIhIx9Ussnt4aQNlhGH/1swHmep45559sRLcLgKHQ=", - "owner": "DarkKirb", - "repo": "akkoma-fe", - "rev": "6914e57a840537f45abbbf3b01d41e56a66d968a", + "lastModified": 1725860795, + "narHash": "sha256-Z2o8VBPW3I+KKTSfe25kskz0EUj7MpUh8u355Z1nVsU=", + "owner": "tinted-theming", + "repo": "base16-helix", + "rev": "7f795bf75d38e0eea9fed287264067ca187b88a9", "type": "github" }, "original": { - "owner": "DarkKirb", - "repo": "akkoma-fe", + "owner": "tinted-theming", + "repo": "base16-helix", "type": "github" } }, - "attic": { - "inputs": { - "crane": [ - "crane" - ], - "flake-compat": [ - "flake-compat" - ], - "flake-parts": "flake-parts", - "nixpkgs": [ - "nixpkgs" - ], - "nixpkgs-stable": "nixpkgs-stable" - }, + "base16-vim": { + "flake": false, "locked": { - "lastModified": 1726060175, - "narHash": "sha256-Iw13A9W1ud7qJlOS76jCRd8bdH8w5qSortgHQJ10xnU=", - "owner": "DarkKirb", - "repo": "attic", - "rev": "79a43f39e3f5f4ff7488b47f16fbe7ddbc1ca6f1", + "lastModified": 1716150083, + "narHash": "sha256-ZMhnNmw34ogE5rJZrjRv5MtG3WaqKd60ds2VXvT6hEc=", + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "6e955d704d046b0dc3e5c2d68a2a6eeffd2b5d3d", "type": "github" }, "original": { - "owner": "DarkKirb", - "repo": "attic", - "type": "github" - } - }, - "cargo2nix": { - "inputs": { - "flake-compat": [ - "flake-compat" - ], - "flake-utils": [ - "flake-utils" - ], - "nixpkgs": [ - "nixpkgs" - ], - "rust-overlay": [ - "rust-overlay" - ] - }, - "locked": { - "lastModified": 1726552619, - "narHash": "sha256-ytTBILVMnRZYvjiLYz+J6IFf/TOXdGuP6RDesMx9qgA=", - "owner": "DarkKirb", - "repo": "cargo2nix", - "rev": "baa12124e2de09e1cbbdac320f14809fa55af1a2", - "type": "github" - }, - "original": { - "owner": "DarkKirb", - "ref": "master", - "repo": "cargo2nix", - "type": "github" - } - }, - "chir-rs": { - "inputs": { - "flake-parts": [ - "flake-parts" - ], - "haskell-flake": "haskell-flake", - "microformats2-parser": "microformats2-parser", - "nixpkgs": [ - "nixpkgs" - ], - "systems": [ - "systems" - ], - "treefmt-nix": "treefmt-nix", - "webauthn": "webauthn" - }, - "locked": { - "lastModified": 1729675675, - "narHash": "sha256-Eo73j7AkSdb8XU7MlAZeuBH+tgRJGMY1tXjlOI//2JU=", - "ref": "refs/heads/main", - "rev": "48e5aade5bcc188d3c2cc4b446d445355b49b458", - "revCount": 380, - "type": "git", - "url": "https://git.chir.rs/chir.rs/chir.rs" - }, - "original": { - "type": "git", - "url": "https://git.chir.rs/chir.rs/chir.rs" - } - }, - "colorpickle": { - "inputs": { - "naersk": [ - "naersk" - ], - "nixpkgs": [ - "nixpkgs" - ], - "utils": [ - "flake-utils" - ] - }, - "locked": { - "lastModified": 1700940986, - "narHash": "sha256-+7eo8Y0YkuQeGDIHtEGPpoJQNGSxpzkg4UPR63xJiss=", - "owner": "AgathaSorceress", - "repo": "colorpickle", - "rev": "61c77e71b5586412b6deecc2389fc39072e4b60f", - "type": "github" - }, - "original": { - "owner": "AgathaSorceress", - "repo": "colorpickle", - "type": "github" - } - }, - "crane": { - "inputs": { - "flake-compat": [ - "flake-compat" - ], - "flake-utils": [ - "flake-utils" - ], - "nixpkgs": [ - "nixpkgs" - ], - "rust-overlay": [ - "rust-overlay" - ] - }, - "locked": { - "lastModified": 1674934931, - "narHash": "sha256-TmGfRDBK7EkR0VY8Jr0WU4WdyzZxiXDGVGUzIXPFXRI=", - "owner": "DarkKirb", - "repo": "crane", - "rev": "42c3f329daa267857c6bc6d21c9eec468e97e2d7", - "type": "github" - }, - "original": { - "owner": "DarkKirb", - "repo": "crane", + "owner": "tinted-theming", + "repo": "base16-vim", "type": "github" } }, @@ -246,26 +86,55 @@ "type": "github" } }, - "dns": { + "disko": { "inputs": { - "flake-utils": [ - "flake-utils" + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1732482708, + "narHash": "sha256-B1MQLiWi4bbeNiRXKxEkpztnKyWae4x0LyK32v3DjLk=", + "owner": "nix-community", + "repo": "disko", + "rev": "47bc8dfb6f48d5f66a3cb3a4cece83d8ace1f61a", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "element-web": { + "inputs": { + "devshell": [ + "devshell" + ], + "flake-compat": [ + "flake-compat" + ], + "flake-parts": [ + "flake-parts" + ], + "matrix-js-sdk": [ + "matrix-js-sdk" ], "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1644390195, - "narHash": "sha256-eU6y5oYs8HUS7Mmo6h8qsl+gLa4zLlhIl0Ryk4e4r2M=", - "owner": "DarkKirb", - "repo": "dns.nix", - "rev": "4d3d32b0fd221895bf3da0e348056260c3a77636", + "lastModified": 1732439059, + "narHash": "sha256-UrOc9NB1UnV01l6xFHZuWIQAGQizB+mytrJE6yfkwWQ=", + "owner": "darkkirb", + "repo": "element-web", + "rev": "96692a8a217ed4ddc0243acdab5d3aefeb9bc9a6", "type": "github" }, "original": { - "owner": "DarkKirb", - "repo": "dns.nix", + "owner": "darkkirb", + "repo": "element-web", "type": "github" } }, @@ -288,11 +157,11 @@ "flake-compat_2": { "flake": false, "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", "owner": "edolstra", "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", "type": "github" }, "original": { @@ -304,58 +173,15 @@ "flake-parts": { "inputs": { "nixpkgs-lib": [ - "attic", "nixpkgs" ] }, "locked": { - "lastModified": 1725234343, - "narHash": "sha256-+ebgonl3NbiKD2UD0x4BszCZQ6sTfL4xioaM49o5B3Y=", + "lastModified": 1730504689, + "narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "567b938d64d4b4112ee253b9274472dc3a346eb6", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_2": { - "inputs": { - "nixpkgs-lib": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1727826117, - "narHash": "sha256-K5ZLCyfO/Zj9mPFldf3iwS6oZStJcU4tSpiXTMYaaL0=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "3d04084d54bedc3d6b8b736c70ef449225c361b1", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_3": { - "inputs": { - "nixpkgs-lib": [ - "hydra", - "nix-eval-jobs", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1722555600, - "narHash": "sha256-XOQkdLafnb/p9ij77byFQjDf5m5QYl9b2REiVClC+x4=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "8471fe90ad337a8074e957b69ca4d0089218391d", + "rev": "506278e768c2a08bec68eb62932193e341f55c90", "type": "github" }, "original": { @@ -371,11 +197,32 @@ ] }, "locked": { - "lastModified": 1726560853, - "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": [ + "stylix", + "systems" + ] + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { @@ -399,6 +246,22 @@ "type": "github" } }, + "fromYaml": { + "flake": false, + "locked": { + "lastModified": 1731966426, + "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "106af9e2f715e2d828df706c386a685698f3223b", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" + } + }, "gitignore": { "inputs": { "nixpkgs": [ @@ -419,41 +282,20 @@ "type": "github" } }, - "gomod2nix": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ], - "utils": [ - "flake-utils" - ] - }, + "gnome-shell": { + "flake": false, "locked": { - "lastModified": 1716265997, - "narHash": "sha256-VzBesOjyiDeD4/hzU9YPPMeMTBAC17b+IY6wG5rfB2E=", - "owner": "DarkKirb", - "repo": "gomod2nix", - "rev": "be72f3daf0d380adc2aa207225336c654b2a6beb", + "lastModified": 1713702291, + "narHash": "sha256-zYP1ehjtcV8fo+c+JFfkAqktZ384Y+y779fzmR9lQAU=", + "owner": "GNOME", + "repo": "gnome-shell", + "rev": "0d0aadf013f78a7f7f1dc984d0d812971864b934", "type": "github" }, "original": { - "owner": "DarkKirb", - "repo": "gomod2nix", - "type": "github" - } - }, - "haskell-flake": { - "locked": { - "lastModified": 1729428816, - "narHash": "sha256-PA3LR2aFS7GDaViGEl4gAbohwGLzU3dvykLCfNTLi+Y=", - "owner": "srid", - "repo": "haskell-flake", - "rev": "688cc5757af330c9c2c53b23a00fec6664ff8852", - "type": "github" - }, - "original": { - "owner": "srid", - "repo": "haskell-flake", + "owner": "GNOME", + "ref": "46.1", + "repo": "gnome-shell", "type": "github" } }, @@ -464,11 +306,11 @@ ] }, "locked": { - "lastModified": 1730016908, - "narHash": "sha256-bFCxJco7d8IgmjfNExNz9knP8wvwbXU4s/d53KOK6U0=", + "lastModified": 1732482255, + "narHash": "sha256-GUffLwzawz5WRVfWaWCg78n/HrBJrOG7QadFY6rtV8A=", "owner": "nix-community", "repo": "home-manager", - "rev": "e83414058edd339148dc142a8437edb9450574c8", + "rev": "a9953635d7f34e7358d5189751110f87e3ac17da", "type": "github" }, "original": { @@ -477,81 +319,65 @@ "type": "github" } }, - "hydra": { + "home-manager_2": { "inputs": { - "lix": "lix", - "nix-eval-jobs": "nix-eval-jobs", - "nixpkgs": "nixpkgs_3" - }, - "locked": { - "lastModified": 1728321752, - "narHash": "sha256-GbBAoBF7ZObz0IP+g0LZKxMafpMvNKjTEu9haiZbV54=", - "ref": "refs/heads/main", - "rev": "ee1234c15cdcb427dbd4828e0add09d02cd606c9", - "revCount": 4220, - "type": "git", - "url": "https://git.lix.systems/lix-project/hydra" - }, - "original": { - "type": "git", - "url": "https://git.lix.systems/lix-project/hydra" - } - }, - "impermanence": { - "locked": { - "lastModified": 1729068498, - "narHash": "sha256-C2sGRJl1EmBq0nO98TNd4cbUy20ABSgnHWXLIJQWRFA=", - "owner": "nix-community", - "repo": "impermanence", - "rev": "e337457502571b23e449bf42153d7faa10c0a562", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "impermanence", - "type": "github" - } - }, - "lib-aggregate": { - "inputs": { - "flake-utils": [ - "flake-utils" - ], - "nixpkgs-lib": [ + "nixpkgs": [ + "plasma-manager", "nixpkgs" ] }, "locked": { - "lastModified": 1730031145, - "narHash": "sha256-GZz0LGkeduajnF7zUuPu5evNyoOATcSsRZCkG1OqiwY=", + "lastModified": 1714377222, + "narHash": "sha256-UsDsjWCKlWn8vbXi8Zza9Hkq3xyk8fpvFNo2VM5S74E=", "owner": "nix-community", - "repo": "lib-aggregate", - "rev": "7d235f23a84b54c39b1579b68b13e1ff83f5b1ad", + "repo": "home-manager", + "rev": "2af7c78b7bb9cf18406a193eba13ef9f99388f49", "type": "github" }, "original": { "owner": "nix-community", - "repo": "lib-aggregate", + "repo": "home-manager", + "type": "github" + } + }, + "impermanence": { + "locked": { + "lastModified": 1731846036, + "narHash": "sha256-vOmxUqGNFjyF4i0hLTI3iNJ3tUJXkPxN+BwPRZFb3FA=", + "owner": "DarkKirb", + "repo": "impermanence", + "rev": "5edca6851b3b65d02cdd68e766ffb7162e17e730", + "type": "github" + }, + "original": { + "owner": "DarkKirb", + "ref": "change-default-link-type", + "repo": "impermanence", "type": "github" } }, "lix": { "inputs": { - "flake-compat": "flake-compat_2", - "nix2container": "nix2container", + "flake-compat": [ + "flake-compat" + ], + "nix2container": [ + "nix2container" + ], "nixpkgs": [ - "hydra", "nixpkgs" ], "nixpkgs-regression": "nixpkgs-regression", - "pre-commit-hooks": "pre-commit-hooks" + "pre-commit-hooks": [ + "pre-commit-hooks" + ] }, "locked": { - "lastModified": 1728163191, - "narHash": "sha256-SW0IEBsPN1EysqzvfDT+8Kimtzy03O1BxQQm7ZB6fRY=", + "lastModified": 1732112222, + "narHash": "sha256-H7GN4++a4vE49SUNojZx+FSk4mmpb2ifJUtJMJHProI=", "ref": "refs/heads/main", - "rev": "ed9b7f4f84fd60ad8618645cc1bae2d686ff0db6", - "revCount": 16323, + "rev": "66f6dbda32959dd5cf3a9aaba15af72d037ab7ff", + "revCount": 16513, "type": "git", "url": "https://git.lix.systems/lix-project/lix" }, @@ -576,11 +402,11 @@ ] }, "locked": { - "lastModified": 1727752861, - "narHash": "sha256-jowmo2aEzrEpPSM96IWtajuogdJm7DjAWxFTEb7Ct0s=", + "lastModified": 1731967274, + "narHash": "sha256-n6dPGRlMGdL8X5gviA6ZuRfUdbdD5KiNN/BpABA5YT0=", "ref": "refs/heads/main", - "rev": "fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d", - "revCount": 116, + "rev": "aa2846680fa9a2032939d720487942567fd9eb63", + "revCount": 119, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -589,164 +415,62 @@ "url": "https://git.lix.systems/lix-project/nixos-module" } }, - "lix_2": { + "matrix-js-sdk": { "inputs": { + "devshell": [ + "devshell" + ], "flake-compat": [ "flake-compat" ], - "nix2container": [ - "nix2container" - ], - "nixpkgs": [ - "nixpkgs" - ], - "nixpkgs-regression": "nixpkgs-regression_2", - "pre-commit-hooks": [ - "pre-commit-hooks" - ] - }, - "locked": { - "lastModified": 1730069651, - "narHash": "sha256-DVzb3RlFOuR72K6BWMRKoJ4mfJmVOUDVjUJKQ/yXMNA=", - "ref": "refs/heads/main", - "rev": "f55ed8399186c25b7d26a8c51f31ba25f5f26a50", - "revCount": 16400, - "type": "git", - "url": "https://git.lix.systems/lix-project/lix" - }, - "original": { - "type": "git", - "url": "https://git.lix.systems/lix-project/lix" - } - }, - "microformats2-parser": { - "flake": false, - "locked": { - "lastModified": 1695821315, - "narHash": "sha256-Et4yYDiIcIeMsEkZI9Y0Unh51fnuMQzScE4dxgXCGzo=", - "owner": "darkkirb", - "repo": "microformats2-parser", - "rev": "4e6b3aac8f5af3306261ef2782f7df990e96f429", - "type": "github" - }, - "original": { - "owner": "darkkirb", - "repo": "microformats2-parser", - "type": "github" - } - }, - "naersk": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1721727458, - "narHash": "sha256-r/xppY958gmZ4oTfLiHN0ZGuQ+RSTijDblVgVLFi1mw=", - "owner": "nix-community", - "repo": "naersk", - "rev": "3fb418eaf352498f6b6c30592e3beb63df42ef11", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "master", - "repo": "naersk", - "type": "github" - } - }, - "nix-eval-jobs": { - "inputs": { - "flake-parts": "flake-parts_3", - "lix": [ - "hydra", - "lix" - ], - "nix-github-actions": "nix-github-actions", - "nixpkgs": [ - "hydra", - "nixpkgs" - ], - "treefmt-nix": "treefmt-nix_2" - }, - "locked": { - "lastModified": 1723579251, - "narHash": "sha256-xnHtfw0gRhV+2S9U7hQwvp2klTy1Iv7FlMMO0/WiMVc=", - "ref": "refs/heads/main", - "rev": "42a160bce2fd9ffebc3809746bc80cc7208f9b08", - "revCount": 609, - "type": "git", - "url": "https://git.lix.systems/lix-project/nix-eval-jobs" - }, - "original": { - "type": "git", - "url": "https://git.lix.systems/lix-project/nix-eval-jobs" - } - }, - "nix-gaming": { - "inputs": { "flake-parts": [ "flake-parts" ], "nixpkgs": [ "nixpkgs" - ], - "umu": "umu" + ] }, "locked": { - "lastModified": 1729993301, - "narHash": "sha256-1SJ5Ky+HSMXAf+uij34MIB2jii0RZwFmOaJg1/e9Rzg=", - "owner": "fufexan", - "repo": "nix-gaming", - "rev": "655bf9e689c9f7b15ba6521b849321120c0af616", + "lastModified": 1732172057, + "narHash": "sha256-WwYQAEIWA1tqCpU1yqrLXnrdUJJIux6OIDtB4svR/G8=", + "owner": "darkkirb", + "repo": "matrix-js-sdk", + "rev": "a0304468b7e4a166da1bbdd7a46629cd1489975f", "type": "github" }, "original": { - "owner": "fufexan", - "repo": "nix-gaming", + "owner": "darkkirb", + "repo": "matrix-js-sdk", "type": "github" } }, - "nix-github-actions": { + "nix-vscode-extensions": { "inputs": { + "flake-compat": [ + "flake-compat" + ], + "flake-utils": [ + "flake-utils" + ], "nixpkgs": [ - "hydra", - "nix-eval-jobs", "nixpkgs" ] }, "locked": { - "lastModified": 1720066371, - "narHash": "sha256-uPlLYH2S0ACj0IcgaK9Lsf4spmJoGejR9DotXiXSBZQ=", + "lastModified": 1732499683, + "narHash": "sha256-Hw95rpgNiyAL4v9pJF2756PMud6O0p/1XQixs5f/Shk=", "owner": "nix-community", - "repo": "nix-github-actions", - "rev": "622f829f5fe69310a866c8a6cd07e747c44ef820", + "repo": "nix-vscode-extensions", + "rev": "b376bfa567fd25f9f22b6f51ffaa4f84d0b7c72f", "type": "github" }, "original": { "owner": "nix-community", - "repo": "nix-github-actions", + "repo": "nix-vscode-extensions", "type": "github" } }, "nix2container": { - "flake": false, - "locked": { - "lastModified": 1720642556, - "narHash": "sha256-qsnqk13UmREKmRT7c8hEnz26X3GFFyIQrqx4EaRc1Is=", - "owner": "nlewo", - "repo": "nix2container", - "rev": "3853e5caf9ad24103b13aa6e0e8bcebb47649fe4", - "type": "github" - }, - "original": { - "owner": "nlewo", - "repo": "nix2container", - "type": "github" - } - }, - "nix2container_2": { "inputs": { "flake-utils": [ "flake-utils" @@ -756,11 +480,11 @@ ] }, "locked": { - "lastModified": 1729339656, - "narHash": "sha256-smV7HQ/OqZeRguQxNjsb3uQDwm0p6zKDbSDbPCav/oY=", + "lastModified": 1730479402, + "narHash": "sha256-79NLeNjpCa4mSasmFsE3QA6obURezF0TUO5Pm+1daog=", "owner": "nlewo", "repo": "nix2container", - "rev": "cc96df7c3747c61c584d757cfc083922b4f4b33e", + "rev": "5fb215a1564baa74ce04ad7f903d94ad6617e17a", "type": "github" }, "original": { @@ -771,11 +495,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1730068391, - "narHash": "sha256-jlAGtfMuI8pUUoUmNkm2P/38pOtHZdcAf3Az8XQLAf4=", + "lastModified": 1732483221, + "narHash": "sha256-kF6rDeCshoCgmQz+7uiuPdREVFuzhIorGOoPXMalL2U=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "6906ac67a1078cf950b8527341e229eeecb5bc30", + "rev": "45348ad6fb8ac0e8415f6e5e96efe47dd7f39405", "type": "github" }, "original": { @@ -784,7 +508,308 @@ "type": "github" } }, - "nixos-vscode-server": { + "nixpkgs": { + "locked": { + "lastModified": 1732519151, + "narHash": "sha256-vmrS4dA44iPPYaafz827nZqStUNk0DioDiJtXm6WPog=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "b9a481fc4ff2abc257e20663591fdc4fb5961e75", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-regression": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + } + }, + "plasma-manager": { + "inputs": { + "home-manager": "home-manager_2", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1732465698, + "narHash": "sha256-xiue+Kj2Jm8PwyZQcHl4CaYmMIgo5oi37hVHqiw2Unk=", + "owner": "nix-community", + "repo": "plasma-manager", + "rev": "16d65cd02b5de665d1bcfec1616c02c71a1014a6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "plasma-manager", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": [ + "flake-compat" + ], + "gitignore": [ + "gitignore" + ], + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1732021966, + "narHash": "sha256-mnTbjpdqF0luOkou8ZFi2asa1N3AA2CchR/RqCNmsGE=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "3308484d1a443fc5bc92012435d79e80458fe43c", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "riscv-overlay": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1730712740, + "narHash": "sha256-RHyALP3P6PNWd/DswwSENSRaEcAWD9Psh3RfkSpGO78=", + "owner": "DarkKirb", + "repo": "riscv-overlay", + "rev": "d40f4ac66a995bca3fbfcb6a5b0b4dfe6c531616", + "type": "github" + }, + "original": { + "owner": "DarkKirb", + "repo": "riscv-overlay", + "type": "github" + } + }, + "root": { + "inputs": { + "devshell": "devshell", + "disko": "disko", + "element-web": "element-web", + "flake-compat": "flake-compat", + "flake-parts": "flake-parts", + "flake-utils": "flake-utils", + "flakey-profile": "flakey-profile", + "gitignore": "gitignore", + "home-manager": "home-manager", + "impermanence": "impermanence", + "lix": "lix", + "lix-module": "lix-module", + "matrix-js-sdk": "matrix-js-sdk", + "nix-vscode-extensions": "nix-vscode-extensions", + "nix2container": "nix2container", + "nixos-hardware": "nixos-hardware", + "nixpkgs": "nixpkgs", + "plasma-manager": "plasma-manager", + "pre-commit-hooks": "pre-commit-hooks", + "riscv-overlay": "riscv-overlay", + "rust-overlay": "rust-overlay", + "rycee-nur-expressions": "rycee-nur-expressions", + "sops-nix": "sops-nix", + "stylix": "stylix", + "systems": "systems_2", + "vscode-server": "vscode-server" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1732328983, + "narHash": "sha256-RHt12f/slrzDpSL7SSkydh8wUE4Nr4r23HlpWywed9E=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "ed8aa5b64f7d36d9338eb1d0a3bb60cf52069a72", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rycee-nur-expressions": { + "flake": false, + "locked": { + "lastModified": 1732479769, + "narHash": "sha256-barZy95JsQt4G9EDZ7RNrjgTneelXXfSzRLJJvokjsI=", + "ref": "refs/heads/master", + "rev": "80bf66046d8b8624c5991a0c8e512b211acce2b2", + "revCount": 3928, + "type": "git", + "url": "https://gitlab.com/rycee/nur-expressions" + }, + "original": { + "type": "git", + "url": "https://gitlab.com/rycee/nur-expressions" + } + }, + "sops-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1732186149, + "narHash": "sha256-N9JGWe/T8BC0Tss2Cv30plvZUYoiRmykP7ZdY2on2b0=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "53c853fb1a7e4f25f68805ee25c83d5de18dc699", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" + } + }, + "stylix": { + "inputs": { + "base16": "base16", + "base16-fish": "base16-fish", + "base16-helix": "base16-helix", + "base16-vim": "base16-vim", + "flake-compat": "flake-compat_2", + "flake-utils": "flake-utils_2", + "gnome-shell": "gnome-shell", + "home-manager": [ + "home-manager" + ], + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems", + "tinted-foot": "tinted-foot", + "tinted-kitty": "tinted-kitty", + "tinted-tmux": "tinted-tmux" + }, + "locked": { + "lastModified": 1732261424, + "narHash": "sha256-8uTKUHkaU980J5kRnLYrdwmjZYB88eBGUk1oVgIUHFE=", + "owner": "danth", + "repo": "stylix", + "rev": "b667a340730dd3d0596083aa7c949eef01367c62", + "type": "github" + }, + "original": { + "owner": "danth", + "repo": "stylix", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "tinted-foot": { + "flake": false, + "locked": { + "lastModified": 1726913040, + "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=", + "owner": "tinted-theming", + "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", + "type": "github" + } + }, + "tinted-kitty": { + "flake": false, + "locked": { + "lastModified": 1716423189, + "narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=", + "owner": "tinted-theming", + "repo": "tinted-kitty", + "rev": "eb39e141db14baef052893285df9f266df041ff8", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-kitty", + "rev": "eb39e141db14baef052893285df9f266df041ff8", + "type": "github" + } + }, + "tinted-tmux": { + "flake": false, + "locked": { + "lastModified": 1696725902, + "narHash": "sha256-wDPg5elZPcQpu7Df0lI5O8Jv4A3T6jUQIVg63KDU+3Q=", + "owner": "tinted-theming", + "repo": "tinted-tmux", + "rev": "c02050bebb60dbb20cb433cd4d8ce668ecc11ba7", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-tmux", + "type": "github" + } + }, + "vscode-server": { "inputs": { "flake-utils": [ "flake-utils" @@ -806,359 +831,6 @@ "repo": "nixos-vscode-server", "type": "github" } - }, - "nixpkgs": { - "locked": { - "lastModified": 1719784303, - "narHash": "sha256-1oFvvCsNrg6fkx6LLFtDlcM7zdOXXKIVERjXHWbBPE4=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "94526f7efe69352df04ad659a5d0327045feeaa9", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-regression": { - "locked": { - "lastModified": 1643052045, - "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", - "type": "github" - } - }, - "nixpkgs-regression_2": { - "locked": { - "lastModified": 1643052045, - "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", - "type": "github" - } - }, - "nixpkgs-stable": { - "locked": { - "lastModified": 1725826545, - "narHash": "sha256-L64N1rpLlXdc94H+F6scnrbuEu+utC03cDDVvvJGOME=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "f4c846aee8e1e29062aa8514d5e0ab270f4ec2f9", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-24.05", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1728768054, - "narHash": "sha256-eDVWVreO1e1CN5V1Oq0aI449ESEyJcu7OtZeZ2zZ434=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "b1ea4a36d6f1bb62734bce3483994df69910e6d9", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1728193676, - "narHash": "sha256-PbDWAIjKJdlVg+qQRhzdSor04bAPApDqIv2DofTyynk=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "ecbc1ca8ffd6aea8372ad16be9ebbb39889e55b6", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-24.05", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_4": { - "locked": { - "lastModified": 1730073370, - "narHash": "sha256-mwxs/E4rDthy85D1oVE4loxTK3Phttl77HUT+VYZ0N8=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "31513aaf6ff15663f89b0554826e59f86206e453", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "type": "github" - } - }, - "pre-commit-hooks": { - "flake": false, - "locked": { - "lastModified": 1721042469, - "narHash": "sha256-6FPUl7HVtvRHCCBQne7Ylp4p+dpP3P/OYuzjztZ4s70=", - "owner": "cachix", - "repo": "git-hooks.nix", - "rev": "f451c19376071a90d8c58ab1a953c6e9840527fd", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "git-hooks.nix", - "type": "github" - } - }, - "pre-commit-hooks_2": { - "inputs": { - "flake-compat": [ - "flake-compat" - ], - "gitignore": [ - "gitignore" - ], - "nixpkgs": [ - "nixpkgs" - ], - "nixpkgs-stable": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1729104314, - "narHash": "sha256-pZRZsq5oCdJt3upZIU4aslS9XwFJ+/nVtALHIciX/BI=", - "owner": "cachix", - "repo": "git-hooks.nix", - "rev": "3c3e88f0f544d6bb54329832616af7eb971b6be6", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "git-hooks.nix", - "type": "github" - } - }, - "riscv-overlay": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1728672381, - "narHash": "sha256-7zs+Kb4FaClPojFHIv7Wg4YH6B9/PpP2f0o9+5QIA7U=", - "owner": "DarkKirb", - "repo": "riscv-overlay", - "rev": "47b3b0e989ff06046004be0c76d24af9a46a0c29", - "type": "github" - }, - "original": { - "owner": "DarkKirb", - "repo": "riscv-overlay", - "type": "github" - } - }, - "root": { - "inputs": { - "admin-fe": "admin-fe", - "akkoma": "akkoma", - "akkoma-fe": "akkoma-fe", - "attic": "attic", - "cargo2nix": "cargo2nix", - "chir-rs": "chir-rs", - "colorpickle": "colorpickle", - "crane": "crane", - "devshell": "devshell", - "dns": "dns", - "flake-compat": "flake-compat", - "flake-parts": "flake-parts_2", - "flake-utils": "flake-utils", - "flakey-profile": "flakey-profile", - "gitignore": "gitignore", - "gomod2nix": "gomod2nix", - "home-manager": "home-manager", - "hydra": "hydra", - "impermanence": "impermanence", - "lib-aggregate": "lib-aggregate", - "lix": "lix_2", - "lix-module": "lix-module", - "naersk": "naersk", - "nix-gaming": "nix-gaming", - "nix2container": "nix2container_2", - "nixos-hardware": "nixos-hardware", - "nixos-vscode-server": "nixos-vscode-server", - "nixpkgs": "nixpkgs_4", - "pre-commit-hooks": "pre-commit-hooks_2", - "riscv-overlay": "riscv-overlay", - "rust-overlay": "rust-overlay", - "sops-nix": "sops-nix", - "systems": "systems" - } - }, - "rust-overlay": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1729996302, - "narHash": "sha256-QEU1NQq1+7s1na69Chig9K0iDDTKN0O4Zreo9A9rccA=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "a1b337569f334ff0a01b57627f17b201d746d24c", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, - "sops-nix": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ], - "nixpkgs-stable": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1729999681, - "narHash": "sha256-qm0uCtM9bg97LeJTKQ8dqV/FvqRN+ompyW4GIJruLuw=", - "owner": "Mic92", - "repo": "sops-nix", - "rev": "1666d16426abe79af5c47b7c0efa82fd31bf4c56", - "type": "github" - }, - "original": { - "owner": "Mic92", - "repo": "sops-nix", - "type": "github" - } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, - "treefmt-nix": { - "inputs": { - "nixpkgs": [ - "chir-rs", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1729242555, - "narHash": "sha256-6jWSWxv2crIXmYSEb3LEVsFkCkyVHNllk61X4uhqfCs=", - "owner": "numtide", - "repo": "treefmt-nix", - "rev": "d986489c1c757f6921a48c1439f19bfb9b8ecab5", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "treefmt-nix", - "type": "github" - } - }, - "treefmt-nix_2": { - "inputs": { - "nixpkgs": [ - "hydra", - "nix-eval-jobs", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1723454642, - "narHash": "sha256-S0Gvsenh0II7EAaoc9158ZB4vYyuycvMGKGxIbERNAM=", - "owner": "numtide", - "repo": "treefmt-nix", - "rev": "349de7bc435bdff37785c2466f054ed1766173be", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "treefmt-nix", - "type": "github" - } - }, - "umu": { - "inputs": { - "nixpkgs": [ - "nix-gaming", - "nixpkgs" - ] - }, - "locked": { - "dir": "packaging/nix", - "lastModified": 1729978972, - "narHash": "sha256-Zox0iAi4CRPn4rxrhOetFFZ2jcSipe8tGD8nMTgcjhE=", - "ref": "refs/heads/main", - "rev": "72499f349ca81cb2838eced9d7c465b2cf71c4a2", - "revCount": 825, - "submodules": true, - "type": "git", - "url": "https://github.com/Open-Wine-Components/umu-launcher/" - }, - "original": { - "dir": "packaging/nix", - "submodules": true, - "type": "git", - "url": "https://github.com/Open-Wine-Components/umu-launcher/" - } - }, - "webauthn": { - "flake": false, - "locked": { - "lastModified": 1727705861, - "narHash": "sha256-DJOrV0PZAeRGbWe765ayvBhxk1w5LDsDUBObjwcEl/Q=", - "owner": "tweag", - "repo": "webauthn", - "rev": "e2abad5bc299914e18dc823ac016eb673004cbe5", - "type": "github" - }, - "original": { - "owner": "tweag", - "repo": "webauthn", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 23ad903b..df6e4519 100644 --- a/flake.nix +++ b/flake.nix @@ -1,69 +1,21 @@ -rec { - description = "Lotte's NixOS installation"; +{ + description = "Lotte’s nix configuration"; - # Use NixOS unstable inputs = { - # Sorted by name - admin-fe = { - url = "github:DarkKirb/admin-fe"; - inputs.devshell.follows = "devshell"; - inputs.flake-compat.follows = "flake-compat"; - inputs.flake-parts.follows = "flake-parts"; - #inputs.nixpkgs.follows = "nixpkgs"; - }; - akkoma = { - url = "github:DarkKirb/akkoma"; - inputs.devshell.follows = "devshell"; - inputs.flake-compat.follows = "flake-compat"; - inputs.flake-parts.follows = "flake-parts"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - akkoma-fe = { - url = "github:DarkKirb/akkoma-fe"; - inputs.devshell.follows = "devshell"; - inputs.flake-compat.follows = "flake-compat"; - inputs.flake-parts.follows = "flake-parts"; - #inputs.nixpkgs.follows = "nixpkgs"; - }; - attic = { - url = "github:DarkKirb/attic"; - inputs.crane.follows = "crane"; - inputs.flake-compat.follows = "flake-compat"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - cargo2nix = { - url = "github:DarkKirb/cargo2nix/master"; - inputs.flake-compat.follows = "flake-compat"; - inputs.flake-utils.follows = "flake-utils"; - inputs.nixpkgs.follows = "nixpkgs"; - inputs.rust-overlay.follows = "rust-overlay"; - }; - chir-rs = { - url = "git+https://git.chir.rs/chir.rs/chir.rs"; - inputs.nixpkgs.follows = "nixpkgs"; - inputs.systems.follows = "systems"; - inputs.flake-parts.follows = "flake-parts"; - }; - colorpickle = { - url = "github:AgathaSorceress/colorpickle"; - inputs.naersk.follows = "naersk"; - inputs.nixpkgs.follows = "nixpkgs"; - inputs.utils.follows = "flake-utils"; - }; - crane = { - url = "github:DarkKirb/crane"; - inputs.flake-compat.follows = "flake-compat"; - inputs.flake-utils.follows = "flake-utils"; - inputs.nixpkgs.follows = "nixpkgs"; - inputs.rust-overlay.follows = "rust-overlay"; - }; devshell = { url = "github:numtide/devshell"; inputs.nixpkgs.follows = "nixpkgs"; }; - dns = { - url = "github:DarkKirb/dns.nix"; - inputs.flake-utils.follows = "flake-utils"; + disko = { + url = "github:nix-community/disko"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + element-web = { + url = "github:darkkirb/element-web"; + inputs.devshell.follows = "devshell"; + inputs.flake-compat.follows = "flake-compat"; + inputs.flake-parts.follows = "flake-parts"; + inputs.matrix-js-sdk.follows = "matrix-js-sdk"; inputs.nixpkgs.follows = "nixpkgs"; }; flake-compat = { @@ -85,28 +37,12 @@ rec { url = "github:hercules-ci/gitignore.nix"; inputs.nixpkgs.follows = "nixpkgs"; }; - gomod2nix = { - url = "github:DarkKirb/gomod2nix"; - inputs.nixpkgs.follows = "nixpkgs"; - inputs.utils.follows = "flake-utils"; - }; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; - hydra = { - url = "git+https://git.lix.systems/lix-project/hydra"; - #inputs.lix.follows = "lix"; - #inputs.nix-eval-jobs.follows = "nix-eval-jobs"; - #inputs.nixpkgs.follows = "nixpkgs"; - }; impermanence = { - url = "github:nix-community/impermanence"; - }; - lib-aggregate = { - url = "github:nix-community/lib-aggregate"; - inputs.flake-utils.follows = "flake-utils"; - inputs.nixpkgs-lib.follows = "nixpkgs"; + url = "github:DarkKirb/impermanence/change-default-link-type"; }; lix = { url = "git+https://git.lix.systems/lix-project/lix"; @@ -122,14 +58,18 @@ rec { inputs.lix.follows = "lix"; inputs.nixpkgs.follows = "nixpkgs"; }; - naersk = { - url = "github:nix-community/naersk/master"; + matrix-js-sdk = { + url = "github:darkkirb/matrix-js-sdk"; + inputs.devshell.follows = "devshell"; + inputs.flake-compat.follows = "flake-compat"; + inputs.flake-parts.follows = "flake-parts"; inputs.nixpkgs.follows = "nixpkgs"; }; - nix-gaming = { - url = "github:fufexan/nix-gaming"; + nix-vscode-extensions = { + url = "github:nix-community/nix-vscode-extensions"; + inputs.flake-compat.follows = "flake-compat"; + inputs.flake-utils.follows = "flake-utils"; inputs.nixpkgs.follows = "nixpkgs"; - inputs.flake-parts.follows = "flake-parts"; }; nix2container = { url = "github:nlewo/nix2container"; @@ -137,12 +77,11 @@ rec { inputs.nixpkgs.follows = "nixpkgs"; }; nixos-hardware.url = "github:NixOS/nixos-hardware"; - nixos-vscode-server = { - url = "github:nix-community/nixos-vscode-server"; - inputs.flake-utils.follows = "flake-utils"; + nixpkgs.url = "github:nixos/nixpkgs"; + plasma-manager = { + url = "github:nix-community/plasma-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; - nixpkgs.url = "github:NixOS/nixpkgs"; pre-commit-hooks = { url = "github:cachix/git-hooks.nix"; inputs.flake-compat.follows = "flake-compat"; @@ -158,221 +97,178 @@ rec { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; + rycee-nur-expressions = { + url = "git+https://gitlab.com/rycee/nur-expressions"; + flake = false; + }; sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; - inputs.nixpkgs-stable.follows = "nixpkgs"; + }; + stylix = { + url = "github:danth/stylix"; + inputs.home-manager.follows = "home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; }; systems.url = "github:nix-systems/default"; + vscode-server = { + url = "github:nix-community/nixos-vscode-server"; + inputs.flake-utils.follows = "flake-utils"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; - outputs = { - self, - nixpkgs, - sops-nix, - home-manager, - lix-module, - ... - } @ args: let - systems = [ - { - name = "nixos-8gb-fsn1-1"; # Hetzner Server - system = "x86_64-linux"; - } - { - name = "thinkrac"; # Thinkpad T470 - system = "x86_64-linux"; - } - { - name = "nas"; # My nas - system = "x86_64-linux"; - } - { - name = "installer"; # Installer iso - system = "x86_64-linux"; - } - { - name = "instance-20221213-1915"; # Oracle server - system = "aarch64-linux"; - } - { - name = "rainbow-resort"; # PC - system = "x86_64-linux"; - } - { - name = "vf2"; # vision five 2 - system = "riscv64-linux"; - } - /* - { - name = "devterm"; - system = "aarch64-linux"; - } - */ - ]; - mkPackages = system: let - pkgs = import nixpkgs { - inherit system; - overlays = [ - args.gomod2nix.overlays.default - self.overlays.${system} - args.hydra.overlays.default - ]; - config.allowUnfree = true; - config.permittedInsecurePackages = [ - "olm-3.2.16" - ]; + outputs = + { + self, + nixpkgs, + ... + }@inputs': + let + inputs = inputs' // { + nixos-config = self; + inherit inputs; + inTester = false; + pureInputs = inputs'; }; - common = { - inherit - (pkgs) - emoji-lotte - emoji-volpeon-blobfox - emoji-volpeon-blobfox-flip - emoji-volpeon-bunhd - emoji-volpeon-bunhd-flip - emoji-volpeon-drgn - emoji-volpeon-fox - emoji-volpeon-gphn - emoji-volpeon-raccoon - emoji-volpeon-vlpn - emoji-volpeon-neofox - emoji-volpeon-neocat - emoji-volpeon-floof - emoji-rosaflags - emoji-raccoon - emoji-caro - lotte-art - alco-sans - constructium - fairfax - fairfax-hd - kreative-square - nasin-nanpa - matrix-media-repo - mautrix-discord - mautrix-whatsapp - mautrix-telegram - mautrix-slack - python-mautrix - python-tulir-telethon - papermc - python-plover-stroke - python-rtf-tokenize - plover - plover-plugins-manager - python-simplefuzzyset - plover-plugin-emoji - plover-plugin-tapey-tape - plover-plugin-yaml-dictionary - plover-plugin-machine-hid - plover-plugin-rkb1-hid - plover-plugin-dotool-output - plover-dict-didoesdigital - miifox-net - plover-plugin-python-dictionary - plover-plugin-stenotype-extended - asar-asm - bsnes-plus - yiffstash - plover-plugin-dict-commands - plover-plugin-last-translation - plover-plugin-modal-dictionary - plover-plugin-stitching - plover-plugin-lapwing-aio - mgba-dev - ; - }; - perSystem = { - aarch64-linux = { - #inherit (pkgs) linux-devterm; - }; - }; - in - common // perSystem.${system} or {}; - in rec { - nixosConfigurations = builtins.listToAttrs (map - ({ - name, - system, - configName ? name, - }: { - inherit name; - value = - nixpkgs.lib.nixosSystem - { + pkgsFor = + system: + let + inputs' = inputs // { inherit system; - specialArgs = + inputs = inputs'; + }; + in + import nixpkgs { + inherit system; + config.allowUnfree = true; + overlays = + [ + (_: _: { + inputs = inputs'; + }) + self.overlays.default + ] + ++ ( + if system == "riscv64-linux" then + [ + inputs.riscv-overlay.overlays.default + ] + else + [ ] + ); + }; + in + { + nixosModules = { + default = import ./modules/default.nix; + }; + nixosConfigurations = + with nixpkgs.lib; + let + mkSystem = + args: + let + inputs' = inputs // { + inherit (args) system; + }; + in + nixosSystem ( args // { - inherit system; - }; - modules = [ - (./config + "/${configName}.nix") - ./config/default.nix - sops-nix.nixosModules.sops - home-manager.nixosModules.home-manager - ({pkgs, ...}: { - home-manager.extraSpecialArgs = args // {inherit system;}; - }) - (import utils/link-input.nix args) - lix-module.nixosModules.default - ]; + specialArgs = args.specialArgs or { } // inputs'; + } + ); + systems' = { + not522 = { + config = ./machine/not522; + system = "riscv64-linux"; + }; + not522-installer = { + config = ./machine/not522/installer; + system = "riscv64-linux"; + }; + oracle-installer = { + config = ./machine/oracle-installer; + system = "aarch64-linux"; + }; + pc-installer = { + config = ./machine/pc-installer; + system = "x86_64-linux"; + }; + rainbow-resort = { + config = ./machine/rainbow-resort; + system = "x86_64-linux"; + }; + thinkrac = { + config = ./machine/thinkrac; + system = "x86_64-linux"; + }; }; - }) - systems); - overlays = { - x86_64-linux = import ./overlays args "x86_64-linux"; - aarch64-linux = import ./overlays args "aarch64-linux"; - riscv64-linux = import ./overlays args "riscv64-linux"; + systems = mapAttrs ( + _: system: + mkSystem { + inherit (system) system; + modules = [ + system.config + ]; + } + ) systems'; + in + systems; + hydraJobs = { + inherit (self) devShells packages; + nixosConfigurations = nixpkgs.lib.mapAttrs ( + _: v: v.config.system.build.toplevel + ) self.nixosConfigurations; + }; + devShells.x86_64-linux.default = + with pkgsFor "x86_64-linux"; + mkShell { + nativeBuildInputs = with pkgs; [ + age + sops + ssh-to-age + nixfmt-rfc-style + nix-prefetch + nix-prefetch-git + ]; + }; + formatter.x86_64-linux = (pkgsFor "x86_64-linux").nixfmt-rfc-style; + overlays.default = import ./packages; + packages = nixpkgs.lib.listToAttrs ( + map + (name: { + inherit name; + value = + let + pkgs = pkgsFor name; + in + { + inherit (pkgs) + art-lotte + fish + package-updater + ; + } + // ( + if name != "riscv64-linux" then + { + inherit (pkgs) + element-desktop + element-web + kodi-joyn + ; + } + else + { } + ); + }) + [ + "x86_64-linux" + "riscv64-linux" + "aarch64-linux" + ] + ); }; - devShell.x86_64-linux = let - pkgs = import nixpkgs { - system = "x86_64-linux"; - overlays = [ - args.gomod2nix.overlays.default - self.overlays.x86_64-linux - ]; - }; - in - pkgs.mkShell { - nativeBuildInputs = with pkgs; [ - age - sops - ssh-to-age - nix-prefetch - nix-prefetch-git - jq - bundix - python3 - python3Packages.yapf - github-cli - statix - alejandra - ]; - }; - formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.alejandra; - packages.x86_64-linux = mkPackages "x86_64-linux"; - packages.aarch64-linux = mkPackages "aarch64-linux"; - hydraJobs = - (builtins.listToAttrs (map - ({ - name, - system, - ... - }: { - inherit name; - value = { - ${system} = nixosConfigurations.${name}.config.system.build.toplevel; - }; - }) - systems)) - // { - inherit devShell; - inherit packages; - # Uncomment the line to build an installer image - # This is EXTREMELY LARGE and will make builds take forever - # installer.x86_64-linux = nixosConfigurations.installer.config.system.build.isoImage; - }; - }; } diff --git a/hydra/default.nix b/hydra/default.nix index 3601329c..8f19e212 100644 --- a/hydra/default.nix +++ b/hydra/default.nix @@ -1 +1 @@ -{nixos-config}: (import nixos-config).hydraJobs +{ nixos-config }: (import nixos-config).hydraJobs diff --git a/hydra/jobsets.nix b/hydra/jobsets.nix deleted file mode 100644 index c7a8f415..00000000 --- a/hydra/jobsets.nix +++ /dev/null @@ -1,80 +0,0 @@ -{ - prsJSON, - nixpkgs, -}: let - pkgs = import nixpkgs {}; - prs = builtins.fromJSON (builtins.readFile prsJSON); - jobsets = - (builtins.listToAttrs ( - pkgs.lib.attrsets.mapAttrsToList ( - _: info: { - name = "pr${toString info.number}"; - value = { - enabled = info.state == "open"; - hidden = info.state != "open"; - description = "PR ${toString info.number}: ${info.title}"; - nixexprinput = "nixos-config"; - nixexprpath = "hydra/default.nix"; - checkinterval = 3600; - schedulingshares = 100; - enableemail = false; - emailoverride = ""; - keepnr = 1; - inputs = { - nixos-config = { - type = "git"; - value = "${info.head.repo.clone_url} ${info.head.ref}"; - emailresponsible = false; - }; - gitea_status_repo = { - type = "string"; - value = "nixos-config"; - }; - gitea_repo_owner = { - type = "string"; - value = info.head.repo.owner.login; - }; - gitea_repo_name = { - type = "string"; - value = info.head.repo.name; - }; - }; - }; - } - ) - prs - )) - // { - nixos-config = { - enabled = 1; - hidden = false; - description = "Current nixos config"; - nixexprinput = "nixos-config"; - nixexprpath = "hydra/default.nix"; - checkinterval = 0; - schedulingshares = 100; - enableemail = false; - emailoverride = ""; - keepnr = 1; - inputs = { - nixos-config = { - type = "git"; - value = "https://git.chir.rs/darkkirb/nixos-config main"; - emailresponsible = false; - }; - gitea_status_repo = { - type = "string"; - value = "nixos-config"; - }; - gitea_repo_owner = { - type = "string"; - value = "Darkkirb"; - }; - gitea_repo_name = { - type = "string"; - value = "nixos-config"; - }; - }; - }; - }; -in {jobsets = pkgs.writeText "jobsets.json" (builtins.toJSON jobsets);} diff --git a/hydra/spec.json b/hydra/spec.json deleted file mode 100644 index c4060212..00000000 --- a/hydra/spec.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "enabled": 1, - "hidden": false, - "description": "jobsets", - "nixexprinput": "nixos-config", - "nixexprpath": "hydra/jobsets.nix", - "checkinterval": 3600, - "schedulingshares": 100, - "enableemail": false, - "emailoverride": "", - "keepnr": 1, - "inputs": { - "nixos-config": { - "type": "git", - "value": "https://git.chir.rs/darkkirb/nixos-config.git main", - "emailresponsible": false - }, - "nixpkgs": { - "type": "git", - "value": "https://github.com/NixOS/nixpkgs.git", - "emailresponsible": false - }, - "prsJSON": { - "type": "giteapulls", - "value": "git.chir.rs darkkirb nixos-config", - "emailresponsible": false - }, - "gitea_status_repo": { - "type": "string", - "value": "nixos-config" - }, - "gitea_repo_owner": { - "type": "string", - "value": "darkkirb" - }, - "gitea_repo_name": { - "type": "string", - "value": "nixos-config" - } - } -} diff --git a/keys/lotte_chir.rs.pgp b/keys/lotte_chir.rs.pgp deleted file mode 100644 index acbbb032..00000000 --- a/keys/lotte_chir.rs.pgp +++ /dev/null @@ -1,39 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -mDMEYfph3hYJKwYBBAHaRw8BAQdAWYTcPt/iW5HydB1kBRgUk9yDIvp6iwYu8zVB -yRsLPEi0JUNoYXJsb3R0ZSDwn6adIERlbGVuayA8bG90dGVAY2hpci5ycz6IkQQT -FgoAOQIbAQQLCQgHBBUKCQgFFgIDAQACHgUCF4AWIQTvXzZ6leC/pjkC2Gq049SA -HEnsXgUCYfpkSAIZAQAKCRC049SAHEnsXsxtAQDbyA2vxblzaqIASnWB3sxZdTv9 -cMDVPsoHSBPjOKR4/AD+Kufu2movJkLh343yAXb3nSoy32H63qRqZz4a0TIXpQOJ -AjMEEAEKAB0WIQQgbaXh2gkEtu5JFro8713akVrssAUCYfpjUAAKCRA8713akVrs -sKLSD/94wq8Zj9auuQUsd9ObhxqbdGJ/V9NcatDgQgmwYPBkX3QmAhYtUMzXGcHK -zWZu9U0eIK+a9GXWRAh7ZvAEHt5zLQ/TCYbJ5LvKqzCMJWPxxYLWXEE6DEIHd7Q3 -IjJwSy0IbDbFtoHjzf0RIB26tFUTUF+FL8DfbvuDnaflumjrhuJsf7dEhz737bC5 -+w0z9P7SB0E+olrSKn6rVrbsS+0i68ys0VrjZmBisIMe4HJoOGgRAQaU0McfGqJD -7XFfdBk8eqFOICmmbA7h5BxESoICWamSTaboiYqOOcrzgh7f+1MKUiSP1i+G7zfE -vXnEkRosHopZWZZP30HvUZqJOzTrJ9pQNCab4+VJ4Koknnain3A3IDUT16HOmmWG -Vfe1XXbbaZaGvdzBudAxoxFBEV/b8cFNGHMZpr3zaB9OzBMadnhpTSJghp5U8j+w -ix54X2/Rnh+t3SgpJmDTcz/adH/xwz80lgghQhl8/deZ52YiWoP+G7uI/og5F29K -mFghPGEJwsgyYxW56O5s5smXc0cXQLdVLS7NCY1eq9zOa24h+fWjoC4xtQqO2W1o -+rXELIE/uNBnHosjBL2tXjpvpWIyZwdhkAQsnhYYqZ2U2t8lHgPOoCjYxsERoank -B6ZLiXkJG8LmKWNqe7HJ+cAJp+rbiW7qf+4QWI0V3E3Grfxv87QsQ2hhcmxvdHRl -IPCfpp0gRGVsZW5rIDxkYXJra2lyYkBkYXJra2lyYi5kZT6IjgQTFgoANhYhBO9f -NnqV4L+mOQLYarTj1IAcSexeBQJh+mQtAhsBBAsJCAcEFQoJCAUWAgMBAAIeBQIX -gAAKCRC049SAHEnsXpILAP9Lim+NpTdzo6/0uIRNp9xCcY6jKjUBOSemEvkfZqCH -RQEA4+ZfdPs2tZ6lBUm3g1xCnc26CCqrDfE+OqOs6k+ccA64MwRh+mPJFgkrBgEE -AdpHDwEBB0A80PFr8R7U69xomIUlvcc0YqNVkF6lcM3SBf0JNgRWP4j1BBgWCgAm -FiEE7182epXgv6Y5AthqtOPUgBxJ7F4FAmH6Y8kCGwIFCQHhM4AAgQkQtOPUgBxJ -7F52IAQZFgoAHRYhBC79cu8hxFgw7HriU6sr2Nry43EiBQJh+mPJAAoJEKsr2Nry -43Ei4NYA/AsOyJgBZq6MET81FjAa16fZWlACdGxqNMEv2XVtsp7PAQCTNdttTShA -84S/ZY5znPZQMxGtdDpVnXI+oQm8fkgRD25UAQD/NG/sUL9QZJGq/U0PTfOtS4Qs -iuCSoOZxOLguNeXrJwEAqRhzx4uk6xcl+BbLPA0+yUzI+sGBUnVRVcksFMSLAAe4 -OARh+mPqEgorBgEEAZdVAQUBAQdAxyoJtLvOVoTnqMPcPCT7+3LnzAvGiU71TDqP -fVSyeg4DAQgHiH4EGBYKACYWIQTvXzZ6leC/pjkC2Gq049SAHEnsXgUCYfpj6gIb -DAUJAeEzgAAKCRC049SAHEnsXhiCAP9dySG3PazmDWK0XwM9dzOtGZsMpvj1Fstt -5Y5vdlJtjAD/ZUyul3Ari507nq7jjOIEX/5CGmCN8yRVFY1xhxBxQwK4MwRh+mQA -FgkrBgEEAdpHDwEBB0BRYmE4yDB+mMwK01jI0/K+Ioyw3k3UQHpHo0RP1v5yx4h+ -BBgWCgAmFiEE7182epXgv6Y5AthqtOPUgBxJ7F4FAmH6ZAACGyAFCQHhM4AACgkQ -tOPUgBxJ7F7D/gEA9MN3aL0ZfbEhAw5s9XORLfbwOBBBZM6ycSIj0nFTHkgBAIsA -gTic9f0ZoRvUu8J3xKsXd3GjxPRU2sKlS680KaQH -=3Z2A ------END PGP PUBLIC KEY BLOCK----- diff --git a/keys/mdelenk_hs-mittweida.de.pgp b/keys/mdelenk_hs-mittweida.de.pgp deleted file mode 100644 index 0fe14bc3..00000000 --- a/keys/mdelenk_hs-mittweida.de.pgp +++ /dev/null @@ -1,64 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -mQINBGE+CgkBEADI7HlqzAX72BaBCTDwyn6joUmw1j7EB7Ui+/MlnLBeMhZ2/ntw -04r3U4Og+0WqGS/V/ZpjmzYuXFuccp0NOgeu/7zD6PZcKqEJH+Na6fxEIOikMd4a -CXUvaNTIyHw0/pJm686BU8AM3OZkT2JvwMKizdZTkE+AFHAPUpbAX9vaw6uR522I -0YZ5zHT26owUzcXyyHGLuGAN2gBlyfhTMtdLedGRHZTIHn6yVDHs3UXpTP6gZKhY -uhqqK1i4XNpgWQGnzj4fIHIJ+3MTX0WdRDZq9U6322NuZudXLpqQXJA+S/+Kj9H5 -ICdpxfDPzVf/68Y8emKvse9/roEz0Dg3ESbvvhespYvADwjVzq/3ysZO54eMjv3D -NhHZYHj9Qpdex9vmS+bqRyJt0twiUlJpe2H0wFetygiuP2QRitLJu356YZjKQYm8 -44ak61tSTuiipSupaF8IzgPOurt9zhOHgqzJtkfIOusyC4r+ib8cyiJDtiTz4aA6 -+D6jfKGKv5K6/EB0kjhoRM+ovDN2Y3hLV616qY9GdDMnuIxPTqY081p4ECVnZ54m -vtEgckcWlqnTMF2f06hdVlf24IsovNPdzx1WsDGg7IhuoQf+onmxDg7bWSPhzI/F -YbK90Iv9e1c06OpXvPY6rp6GOAT29OuZAY2sEIjK06hBz5/K1jzoyD35IwARAQAB -tCdNb3J0ZW4gRGVsZW5rIDxtZGVsZW5rQGhzLW1pdHR3ZWlkYS5kZT6JAlQEEwEI -AD4WIQTyqLevTwcmPiPQF/ZRMEFseXBntgUCYT4KCQIbAwUJBaOagAULCQgHAgYV -CgkICwIEFgIDAQIeAQIXgAAKCRBRMEFseXBnto/FD/9L29rWEl6q/TIzuJoUfllY -Mjstp6xSAYlJao736BMjcrhqa6zRklt634oX/E3xBAlqm8V9+3r4op6n10wQE9fZ -HNdZDq4l08q/eK9+k9+u1hwoB2Pms+y5LTiRqnnPfMM5f40GvJMxaWaVS+jzWZw9 -OAHfySh78MFS9ANMe1aujd2pR3yRIxpp/EEHi+VVZ1C4KFrAnVAoXtqZCeA61YcA -MLWJeesZZa/rkKl0aQ4CSRY83mqehXB4I2xG3AgJtkuS83eiS4VQ+FriLB71ZVzu -1Q0xEunxiuMZlNtptr5hFUiTYtbsJGBVmytqifx+vzBKDYNYZdYL1fab87KLU0LL -USekMfISa/31ZFhjGjgMwyc9HIQQwOxX3BzUvaRdw1M7sGu6nq+FuxGLiD55RdzL -P6OL5bd67F21YOwmQ32IqiAozsrSX4EABzUKbNxuRnkA2DgRkQHrV13I9eEZ9dY4 -hYNq4S7q44lrZYXZ7TYgDRbg3YhrFEKz0ffQbaWTfeDNOxOWZJXarOSRvIFqfqNH -JZ5y3MrQmWCCS/51hQirjhCjKYGVikFY3hV9TpkQGMfjGsCrfYOdBDFpF6MCZXQb -UUbevvcJoR9jfprDMONATSYo75s1Iho4ZkUbKgAPFhGvBN5UGcEdwXTL1oftjZmX -E4slgKvCaRWyuXCZy7s4bokCMwQQAQgAHRYhBCBtpeHaCQS27kkWujzvXdqRWuyw -BQJhPgomAAoJEDzvXdqRWuywL+EP/34GaxfX/MkVqB2bGuP6+0GBkKSvEwC703fs -pPXcDXP8Ji0U2NLWxNI7NzkCf8RfSVgenaSWNHSg+kBb5ejantl/T5BZrzV1SLbg -VtotTIUkHsqi6xQKclPd3j2ogz3OG/WmAWz/wTdWfVRjvbul4N67adyMxxqrAJxO -hypVOIRnVpKSoA3/AmMy49J1QUUVzXv5zmQihneQvpSTB62JSCkpf1ey2C1YZwjo -4Wy3d1fLIW6ZBVwT3aBM0GSdBx53a2HQCxgySkw/g5DHLHXwtuaGTD7RhwwcWrBN -O5HpLragNsnqD8ygIBcNG6qhTcUXo96qnIV5ezlM5LEsV2HUoZeFJuo20rWfW+nS -uj0lDQR1HRdQSTUeBKD1TpZzkrBVhABZcfa/1TNuWwrbXnapvrv9AKWrT7WvhAP6 -NKMc85E4YO7DSIx2OmWsoT5zt60aQJB5euKh4A4NpATK9m1LCPu7HGBajAXYgPnL -nQBtjiCefS/1DBWExv8deW2GxW6N0o8r0DS1xG3aQBDwIdhyb+ko7MK0TlIcjoqd -SR6OJfbb/iogGKmHynsIdgb6oR2G0VpB5tdw2XQ6s6ueZwMv/sgT20lfyi4WN+pd -46DUnwx9mHClx8Y7NRA2ru+nsD9q7tfecjYG6/BqUY4qSkrW16PO4nhn1lWS4l1s -4i1imji0uQINBGE+CgkBEADGijGIM5eLzTZYTYeTieS/9tBK5IFL1Zui55d7bxdH -WsoH3rsMSF+YzAj9IZ5BTR/7dOVwo//H5o3xP/vlTFEj9AB3F4KhejlUz161iu3k -EODos89XEju6np9M4Lv1JvjU2FE0bUnYYEeHzPi6Km13hahAeIQngHslFNJjzKi6 -G7ifKO5Qvbc14jCZ4hbj42xihvqOxWdeqcmZ+Mri1VeL+KnVyENqsjft7WUTYRu5 -KJzWnJfuGFeIatZ23pUqnxErKW47qW8cGGvg/nB7Ft5VtPMdBauW46lBBxzD0ebb -RoWjejpWcRRXr25ayS+Wcgj9bWeOGSGNjo9oqcNq+0ZRLurpTJCDDyaa38Vrkekh -gqQV/pL161zPPxn7wRIlBWOi8ioyqJmNYLJXMLL4jqprnFwM2CBsfDNjQ2S4RzFL -bPjcLDcKmm3cU1Xs2bQXRstTu1Fg/XpHiie5vyYVxp5sF6CpeWOiT+jRy8J7jfxb -bOtiJ9Y+VTLI2NLAYGayr6x6ST0Q/2rqX9Y7rt4q2SXBNVnLIJGYAL5u9K6RXMVP -azxGBb9TYwIo7Q4mMjN9R2fSEAGHo2ojiDmc6Md1tCti4pkuyUeF2o8lhCYhzkRv -OzSuAJJLk0tiKPq8VU5F9ZSWYJV5JptmQw/fMQePk8xz5xgdwMXw50jHd3sjaDV7 -BwARAQABiQI8BBgBCAAmFiEE8qi3r08HJj4j0Bf2UTBBbHlwZ7YFAmE+CgkCGwwF -CQWjmoAACgkQUTBBbHlwZ7aLHxAAik6n9wKCbI0w29k7HoMBAT9DOmp1ssB09LMt -+BGslgi1FjGiQy+CvwQNy9e89fZ34ZUFuqlaaXgZGSSys828ZvZfUpQl9K+vqNtC -2b8beOw4tmO9uDnR7iPDE49QElzSySu8b4V8Gd7mZQjT6mrii2qvUf/2HmAFknIe -NsDxG3MJ152/6F2cPlOb6BmWRoJDTbQr+ATIsmCtEiPOjGNY/koSdjoa+ryoZEYn -r8qugBdKVMO0PKoRis7GiWAR4oeMfinXPNOFGERMLLgksFte44hV7kfHdqPkn/B/ -G0RXQxPOZp+NNZ5GYTkY24dMyO2OMs20IE25/2YiddspTEaldshDmS0reuKmfBon -9JYMtsUx2ROY2WLw0nOuToRZCFnvxe60+TlWdqQdnNcn7qf5p5YOGKEUuXsIZryb -YnHlLxP2RpdSZ18ENsVdnGOrX9kPSSla6r2kMjWI02HBMFqa0Xv4KQLNVO3OTlUd -zT6/IygfAGo+y8RId61QlBl49EA3ER147cbv5BYMgq5k5WCZ0V6BPu20nxKV4xqt -BjvLtkgpvl9Ggx5uCgAS5O3NqFnpGg22PNGikQeTHlK9RUBTJJz/aDMJ9VFJAa1D -KAxd6OeJKdg8VKNoccWv7FZG30fUb8l8yu22Y5Q4UU9bgUwIx8UezKtZuO7clv+Q -2cNktB4= -=81x3 ------END PGP PUBLIC KEY BLOCK----- diff --git a/keys/miifox_miifox.net.pgp b/keys/miifox_miifox.net.pgp deleted file mode 100644 index 9a3c7950..00000000 --- a/keys/miifox_miifox.net.pgp +++ /dev/null @@ -1,41 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -xsDNBGGbbZwBDAC3D2Ry4OOJFhm1Qmc0/tM8PNCTqu0jHvsoNgJDnux5dSFzctmO -MH4R/+9uRyjrEKgSSWpCXj1E0oMDQYY5lnUnxkLiCAMwMA/Xe8J5cRktXZ7+KZAY -iNsBeJD7eODsk8kzSwLHi+nbpEQS30DcPgo/BpPksKgtcgJWAcjhdnSIPaRRS6EA -aisEU222mGdd+Y5wPvH1JrbErcbqt8k94uXiE2u0v8dUTMSM9IFJ64vMdQSexOcZ -lKYbayAJzbtb3fqMIsBL0Uzup0fmWgLTvQ3j0quACF+X2VRBDyMvlYvokECt4v9Q -dqU1xKWLX91nVa5R3Bp7muWHynY1X0Zj5kFttSB+8cOFlw5Qx7Pid4Yz3uuQLU39 -XAo1Rg4hWAKhmC50CoGSOcSulbB5YL6gRvrkAfJOiWyGydy/ziraO/utzmF1Hhim -gW5Qmnnfd8vE9FhBfScsxsLZFfGk3r1lP2IEAKEdNoSbcZO4p6QuC49QcPBfPfoE -RLAeSClObiXC1ukAEQEAAc0YTWlpIEZveCA8bWlpQG1paWZveC5uZXQ+wsEPBBMB -CAA5FiEEO0/DgFDC/S5hPg8jNOYk1yptHAYFAmGbbZ4FCQWjmoACGwMFCwkIBwIG -FQgJCgsCBRYCAwEAAAoJEDTmJNcqbRwGyKYL/jPqVxe0ZcSNDZ16gomDGQtaNVTr -mghqEh/HsyZS+p5LTyoJ2x4NYRZMFa+eLFhANRo3eghaxMUb9+lSMzJYfnoAjo1t -ujQHjs6uJYcnilyHWyUSbneVDO4rfrYhXfzddELJJzXjo6LHOsw+VIKdWI9Af6ly -pqsglevDsQeEj/EBavhf2yM1TDynzDMDa4yUX8B3RPFop5kKGARijdjJXns1B1Dp -AeMva+D8J918jobbIrKX2Mu7DIeKNxDSkeZSBxZ8L7CTclbjaeRPV9o8gyHtkEZv -gwRi8X7HXAj7EauP++K1m3ZxFSyx0cQ7RrT9N1varGDorfNkhSs/gjIHJghYu8sv -3hEOkHar9VwF5ZtQe43sNfZ0gHh1VAzSk0a2KJ9Sb4HZi/OknASEHX68uXxgHb/v -3Zb5THb2bkoUrmlwPYURBBzggDMdEvwR3OkIUdk6C8INLy69n46rOrF3Su4hgalS -4vy3zko4qq9JWMy0SOJV95KgqINrq7i8T+VRCM7AzQRhm22eAQwAqaYHct7Y1g4I -6Qpsy/6erMY2NwJD1j8F2JARL/1kWfviFxZfPDHh7+mNUMJixcoS6HbnUquJB30l -Tcl/4RE83yVhR149Q6sJ+AEfG4tGJaYjcrD/f7dsitehq+Fu5kx4S3XNeVzo5/f5 -U+S2lmKFGCNZPw3m/ZKLaY7kOtOQJjt+SZNrmATwDTKvKXlQMle509nvC4gHW2Gj -rHBRIiezHq6ukN0EzH4s9BGTf0jDWhINtt2OvAR3X7xRwQEZOJyYCujno1COKId1 -pM1kN9wixrmHjW87vOHJAOUq9iZXREarI4LvLqHx/MorUPTZIUrKN7aKvMGdMAsf -v7ZskfwKaxgh2o893VEfYckdHIL3NBJYRr7+uBlpMH3A6I9nw72uKwMCKHnIti5x -xwRNWX0Je+e5hr1yBC6XOCIZkfTQhjXs3kLzighmHbIA301ygMuppkZFTgekNEGt -EUxegWHyr5E2MClcJoHnMnFTa9cXCSjKzrqHTgKaWY8wMFk23BgdABEBAAHCwPwE -GAEIACYWIQQ7T8OAUML9LmE+DyM05iTXKm0cBgUCYZttngUJBaOagAIbDAAKCRA0 -5iTXKm0cBkrJC/sFV8kAL4cDo9nF2W4635eyvKTDaE73pOIIE0yqFPzasT8AHcPO -+vdwnhkqgI1HgHQ423lAxHb3afPvLJGxNDOBKaccF/wSVIvjiv+Z+gwgnYY/i72m -x6nSGH5JNXIBIc6ffNLRIH9+v8rsJM7fNyQN1CPlyx5zD2xRXXNPYi+MiclBiDDR -gocA9CRIxMUpF+hEG6LeveUZbhDq1jKMzsE2e7gNiGTGoNXrsVxA7W0ksnY0g4m/ -sscv9LY01jPNBS3wS0CZ9YK5aZnBcxze/5YBHqEshh4ttViTxlmMWN+GqdX8esmD -oyAM249eOGR3G+X++MMGzfTuhq+xoRLiAc9aHdbyp7650gzAKdHvyXJgu8FcuFwm -4TvM/yFYJ72QKZWOtYu8psaWi57waJeBxnuEC+nLEmdH+bkrxthYsgvi66lG5BLU -GUU0HdmM4G1uRU7p2YKbHX16k98zPmuxzN28f4bGRdkMiLpMxFx1GzOZhyk7FhN0 -Q2Nk/87YeiJE6RI= -=YXR8 - -----END PGP PUBLIC KEY BLOCK----- diff --git a/machine/not522/default.nix b/machine/not522/default.nix new file mode 100644 index 00000000..62f27f32 --- /dev/null +++ b/machine/not522/default.nix @@ -0,0 +1,20 @@ +{ + nixos-config, + nixpkgs, + ... +}: +{ + networking.hostName = "not522"; + imports = [ + "${nixos-config}/config" + ./disko.nix + ./hardware.nix + "${nixpkgs}/nixos/modules/profiles/minimal.nix" + ]; + system.stateVersion = "24.11"; + nixpkgs.config.allowUnsupportedSystem = true; + nix.settings.system-features = [ + "native-riscv" + "big-parallel" + ]; +} diff --git a/machine/not522/disko.nix b/machine/not522/disko.nix new file mode 100644 index 00000000..fd0e6db0 --- /dev/null +++ b/machine/not522/disko.nix @@ -0,0 +1,66 @@ +{ + disko.devices = { + disk = { + main = { + type = "disk"; + device = "/dev/disk/by-id/nvme-eui.002538b371b824db"; + content = { + type = "gpt"; + partitions = { + ESP = { + priority = 1; + name = "ESP"; + start = "1M"; + end = "1024M"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ "umask=0077" ]; + }; + }; + root = { + end = "-8G"; + content = { + type = "btrfs"; + extraArgs = [ "-f" ]; # Override existing partition + # Subvolumes must set a mountpoint in order to be mounted, + # unless their parent is mounted + subvolumes = { + # Subvolume name is different from mountpoint + "/root" = { + mountOptions = [ "compress=zstd" ]; + mountpoint = "/"; + }; + # Subvolume name is the same as the mountpoint + "/persistent" = { + mountOptions = [ "compress=zstd" ]; + mountpoint = "/persistent"; + }; + # Parent is not mounted so the mountpoint must be set + "/nix" = { + mountOptions = [ + "compress=zstd" + "noatime" + ]; + mountpoint = "/nix"; + }; + }; + mountpoint = "/partition-root"; + }; + }; + swap = { + size = "100%"; + content = { + type = "swap"; + discardPolicy = "both"; + resumeDevice = true; # resume from hiberation from this device + }; + }; + }; + }; + }; + }; + }; +} diff --git a/machine/not522/hardware.nix b/machine/not522/hardware.nix new file mode 100644 index 00000000..c5a88b5c --- /dev/null +++ b/machine/not522/hardware.nix @@ -0,0 +1,39 @@ +{ + pkgs, + nixos-hardware, + config, + ... +}: +{ + imports = [ + "${nixos-hardware}/starfive/visionfive/v2/default.nix" + ]; + boot.loader.systemd-boot.extraInstallCommands = '' + set -euo pipefail + ${pkgs.coreutils}/bin/cp --no-preserve=mode -r ${config.hardware.deviceTree.package} ${config.boot.loader.efi.efiSysMountPoint}/ + if [[ -d ${config.boot.loader.efi.efiSysMountPoint}/loader/entries ]]; then + for filename in ${config.boot.loader.efi.efiSysMountPoint}/loader/entries/nixos*-generation-[1-9]*.conf; do + if ! ${pkgs.gnugrep}/bin/grep -q 'devicetree' $filename; then + ${pkgs.coreutils}/bin/echo "devicetree /dtbs/${config.hardware.deviceTree.name}" >> $filename + fi + done + fi + ''; + hardware.deviceTree.name = "starfive/jh7110-starfive-visionfive-2-v1.3b.dtb"; + boot.initrd.kernelModules = [ + "dw_mmc-starfive" + "motorcomm" + "dwmac-starfive" + "cdns3-starfive" + "jh7110-trng" + "phy-jh7110-usb" + "clk-starfive-jh7110-aon" + "clk-starfive-jh7110-stg" + "clk-starfive-jh7110-vout" + "clk-starfive-jh7110-isp" + "clk-starfive-jh7100-audio" + "phy-jh7110-pcie" + "pcie-starfive" + "nvme" + ]; +} diff --git a/machine/not522/installer/default.nix b/machine/not522/installer/default.nix new file mode 100644 index 00000000..c99158a4 --- /dev/null +++ b/machine/not522/installer/default.nix @@ -0,0 +1,29 @@ +{ + nixos-config, + config, + pkgs, + nixpkgs, + ... +}: +{ + networking.hostName = "not522-installer"; + imports = [ + "${nixos-config}/config" + "${nixos-config}/machine/not522/hardware.nix" + ./disko.nix + "${nixpkgs}/nixos/modules/profiles/minimal.nix" + ]; + + system.stateVersion = config.system.nixos.version; + + #environment.etc."system/not522".source = "${nixos-config.nixosConfigurations.not522.config.system.build.toplevel}"; + #environment.etc."system/not522-disko".source = "${nixos-config.nixosConfigurations.not522.config.system.build.diskoScript}"; + + environment.systemPackages = [ + (pkgs.writeShellScriptBin "install-nixos-unattended" '' + set -eux + exec ${pkgs.disko}/bin/disko-install --flake "${nixos-config}#not522" --disk main "${nixos-config.nixosConfigurations.not522.config.disko.devices.disk.main.device}" + '') + ]; + isInstaller = true; +} diff --git a/machine/not522/installer/disko.nix b/machine/not522/installer/disko.nix new file mode 100644 index 00000000..0054a4ca --- /dev/null +++ b/machine/not522/installer/disko.nix @@ -0,0 +1,58 @@ +{ + disko.devices = { + disk = { + main = { + type = "disk"; + device = "/dev/mmcblk1"; + content = { + type = "gpt"; + partitions = { + ESP = { + priority = 1; + name = "ESP"; + start = "1M"; + end = "1024M"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ "umask=0077" ]; + }; + }; + root = { + size = "100%"; + content = { + type = "btrfs"; + extraArgs = [ "-f" ]; # Override existing partition + # Subvolumes must set a mountpoint in order to be mounted, + # unless their parent is mounted + subvolumes = { + # Subvolume name is different from mountpoint + "/root" = { + mountOptions = [ "compress=zstd" ]; + mountpoint = "/"; + }; + # Subvolume name is the same as the mountpoint + "/persistent" = { + mountOptions = [ "compress=zstd" ]; + mountpoint = "/persistent"; + }; + # Parent is not mounted so the mountpoint must be set + "/nix" = { + mountOptions = [ + "compress=zstd" + "noatime" + ]; + mountpoint = "/nix"; + }; + }; + mountpoint = "/partition-root"; + }; + }; + }; + }; + }; + }; + }; +} diff --git a/machine/oracle-installer/README.md b/machine/oracle-installer/README.md new file mode 100644 index 00000000..e65ec25c --- /dev/null +++ b/machine/oracle-installer/README.md @@ -0,0 +1 @@ +Taken from https://github.com/cleverca22/nix-tests/tree/master/kexec, released under the apache 2.0 license \ No newline at end of file diff --git a/machine/oracle-installer/autoreboot.nix b/machine/oracle-installer/autoreboot.nix new file mode 100644 index 00000000..68099b37 --- /dev/null +++ b/machine/oracle-installer/autoreboot.nix @@ -0,0 +1,21 @@ +{ config, lib, ... }: + +{ + options = { + kexec.autoReboot = lib.mkOption { + default = true; + description = "auto-reboot at the end of the hour"; + type = lib.types.bool; + }; + }; + config = lib.mkIf config.kexec.autoReboot { + systemd.timers.autoreboot = { + partOf = [ "autoreboot.service" ]; + wantedBy = [ "timers.target" ]; + timerConfig.OnCalendar = "hourly"; + }; + systemd.services.autoreboot = { + script = "shutdown -r +5"; + }; + }; +} diff --git a/machine/oracle-installer/configuration.nix b/machine/oracle-installer/configuration.nix new file mode 100644 index 00000000..fa1efc4f --- /dev/null +++ b/machine/oracle-installer/configuration.nix @@ -0,0 +1,32 @@ +# new cmd: nix-build '' -A config.system.build.kexec_tarball -I nixos-config=./configuration.nix -Q -j 4 + +{ + lib, + nixpkgs, + ... +}: + +with lib; + +{ + imports = [ + "${nixpkgs}/nixos/modules/installer/netboot/netboot-minimal.nix" + ./autoreboot.nix + ./kexec.nix + ]; + + boot.supportedFilesystems = lib.mkForce [ + "btrfs" + "vfat" + ]; + boot.loader.grub.enable = false; + boot.kernelParams = [ + "console=ttyS0,115200" # allows certain forms of remote access, if the hardware is setup right + "panic=30" + "boot.panic_on_fail" # reboot the machine upon fatal boot issues + ]; + systemd.services.sshd.wantedBy = mkForce [ "multi-user.target" ]; + networking.hostName = "kexec"; + # example way to embed an ssh pubkey into the tar + # users.users.root.openssh.authorizedKeys.keys = [ "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC34wZQFEOGkA5b0Z6maE3aKy/ix1MiK1D0Qmg4E9skAA57yKtWYzjA23r5OCF4Nhlj1CuYd6P1sEI/fMnxf+KkqqgW3ZoZ0+pQu4Bd8Ymi3OkkQX9kiq2coD3AFI6JytC6uBi6FaZQT5fG59DbXhxO5YpZlym8ps1obyCBX0hyKntD18RgHNaNM+jkQOhQ5OoxKsBEobxQOEdjIowl2QeEHb99n45sFr53NFqk3UCz0Y7ZMf1hSFQPuuEC/wExzBBJ1Wl7E1LlNA4p9O3qJUSadGZS4e5nSLqMnbQWv2icQS/7J8IwY0M8r1MsL8mdnlXHUofPlG1r4mtovQ2myzOx clever@nixos" ]; +} diff --git a/machine/oracle-installer/default.nix b/machine/oracle-installer/default.nix new file mode 100644 index 00000000..73024ca6 --- /dev/null +++ b/machine/oracle-installer/default.nix @@ -0,0 +1,33 @@ +{ + nixos-config, + pkgs, + lib, + ... +}: +{ + imports = [ + ./configuration.nix + "${nixos-config}/config" + ]; + + # Make it use predictable interface names starting with eth0 + boot.kernelParams = [ "net.ifnames=0" ]; + + networking.useDHCP = true; + isInstaller = true; + + environment.impermanence.enable = false; + boot.initrd.systemd.enable = lib.mkForce false; + home-manager.sharedModules = [ { home.persistence = lib.mkForce { }; } ]; + + environment.systemPackages = [ + (pkgs.writeShellScriptBin "install-oracle-unattended" '' + set -eux + exec ${pkgs.disko}/bin/disko-install --flake "${nixos-config}#oracle" --disk main "${nixos-config.nixosConfigurations.thinkrac.config.disko.devices.disk.main.device}" + '') + ]; + + users.users.root.openssh.authorizedKeys.keys = [ + "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIDXQlfvRUm/z6eP1EjsajIbMibkq9n+ymlbBi7NFiOuaAAAABHNzaDo= ssh:" + ]; +} diff --git a/machine/oracle-installer/kexec.nix b/machine/oracle-installer/kexec.nix new file mode 100644 index 00000000..e2805b02 --- /dev/null +++ b/machine/oracle-installer/kexec.nix @@ -0,0 +1,51 @@ +{ pkgs, config, ... }: + +{ + system.build = rec { + image = pkgs.runCommand "image" { buildInputs = [ pkgs.nukeReferences ]; } '' + mkdir $out + cp ${config.system.build.kernel}/${config.system.boot.loader.kernelFile} $out/kernel + cp ${config.system.build.netbootRamdisk}/initrd $out/initrd + echo "init=${builtins.unsafeDiscardStringContext config.system.build.toplevel}/init ${toString config.boot.kernelParams}" > $out/cmdline + nuke-refs $out/kernel + ''; + kexec_script = pkgs.writeTextFile { + executable = true; + name = "kexec-nixos"; + text = '' + #!${pkgs.stdenv.shell} + export PATH=${pkgs.kexectools}/bin:${pkgs.cpio}/bin:$PATH + set -x + set -e + cd $(mktemp -d) + pwd + mkdir initrd + pushd initrd + if [ -e /ssh_pubkey ]; then + cat /ssh_pubkey >> authorized_keys + fi + find -type f | cpio -o -H newc | gzip -9 > ../extra.gz + popd + cat ${image}/initrd extra.gz > final.gz + + kexec -l ${image}/kernel --initrd=final.gz --append="init=${builtins.unsafeDiscardStringContext config.system.build.toplevel}/init ${toString config.boot.kernelParams}" + sync + echo "executing kernel, filesystems will be improperly umounted" + kexec -e + ''; + }; + }; + boot.initrd.postMountCommands = '' + mkdir -p /mnt-root/root/.ssh/ + cp /authorized_keys /mnt-root/root/.ssh/ + ''; + system.build.kexec_tarball = pkgs.callPackage (pkgs.path + "/nixos/lib/make-system-tarball.nix") { + storeContents = [ + { + object = config.system.build.kexec_script; + symlink = "/kexec_nixos"; + } + ]; + contents = [ ]; + }; +} diff --git a/machine/pc-installer/default.nix b/machine/pc-installer/default.nix new file mode 100644 index 00000000..c94bbac5 --- /dev/null +++ b/machine/pc-installer/default.nix @@ -0,0 +1,55 @@ +{ + config, + nixos-config, + pkgs, + ... +}: +{ + networking.hostName = "pc-installer"; + imports = [ + "${nixos-config}/config" + ./disko.nix + ./grub.nix + ./hardware.nix + "${nixos-config}/config/networkmanager.nix" + ]; + system.stateVersion = config.system.nixos.version; + specialisation.graphical = { + configuration.imports = [ + ./graphical.nix + #"${nixos-config}/config/graphical/plymouth.nix" + { + nix.auto-update.specialisation = "graphical"; + } + ]; + }; + specialisation.graphical-verbose = { + configuration.imports = [ + ./graphical.nix + { + nix.auto-update.specialisation = "graphical-verbose"; + } + ]; + }; + isInstaller = true; + /* + environment.etc."system/rainbow-resort".source = "${nixos-config.nixosConfigurations.rainbow-resort.config.system.build.toplevel + }"; + environment.etc."system/rainbow-resort-disko".source = "${nixos-config.nixosConfigurations.rainbow-resort.config.system.build.diskoScript + }"; + environment.etc."system/thinkrac".source = "${nixos-config.nixosConfigurations.thinkrac.config.system.build.toplevel + }"; + environment.etc."system/thinkrac-disko".source = "${nixos-config.nixosConfigurations.thinkrac.config.system.build.diskoScript + }"; + */ + environment.systemPackages = [ + (pkgs.writeShellScriptBin "install-thinkrac-unattended" '' + set -eux + exec ${pkgs.disko}/bin/disko-install --flake "${nixos-config}#thinkrac" --disk main "${nixos-config.nixosConfigurations.thinkrac.config.disko.devices.disk.main.device}" + '') + (pkgs.writeShellScriptBin "install-rainbow-resort-unattended" '' + set -eux + exec ${pkgs.disko}/bin/disko-install --flake "${nixos-config}#rainbow-resort" --disk main "${nixos-config.nixosConfigurations.rainbow-resort.config.disko.devices.disk.main.device}" + '') + ]; +} diff --git a/machine/pc-installer/disko.nix b/machine/pc-installer/disko.nix new file mode 100644 index 00000000..6214646d --- /dev/null +++ b/machine/pc-installer/disko.nix @@ -0,0 +1,59 @@ +{ + disko.devices = { + disk = { + installer = { + type = "disk"; + device = "/dev/disk/by-id/ata-WDC_WD10SPZX-22Z10T0_WD-WXL1A87JL6DC"; + content = { + type = "gpt"; + partitions = { + boot = { + size = "1M"; + type = "EF02"; # for grub MBR + }; + ESP = { + size = "512M"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ "umask=0077" ]; + }; + }; + root = { + size = "100%"; + content = { + type = "btrfs"; + extraArgs = [ "-f" ]; # Override existing partition + # Subvolumes must set a mountpoint in order to be mounted, + # unless their parent is mounted + subvolumes = { + # Subvolume name is different from mountpoint + "/root" = { + mountOptions = [ "compress=zstd" ]; + mountpoint = "/"; + }; + # Subvolume name is the same as the mountpoint + "/persistent" = { + mountOptions = [ "compress=zstd" ]; + mountpoint = "/persistent"; + }; + # Parent is not mounted so the mountpoint must be set + "/nix" = { + mountOptions = [ + "compress=zstd" + "noatime" + ]; + mountpoint = "/nix"; + }; + }; + mountpoint = "/partition-root"; + }; + }; + }; + }; + }; + }; + }; +} diff --git a/machine/pc-installer/graphical.nix b/machine/pc-installer/graphical.nix new file mode 100644 index 00000000..2e591116 --- /dev/null +++ b/machine/pc-installer/graphical.nix @@ -0,0 +1,22 @@ +{ + nixos-config, + ... +}: +{ + imports = [ + "${nixos-config}/config/graphical.nix" + ]; + home-manager.users.darkkirb = { + # Turn off power management settings on AC power + # This is not very useful for an installer + programs.plasma.powerdevil = { + AC = { + autoSuspend.action = "nothing"; + turnOffDisplay.idleTimeout = "never"; + dimDisplay.enable = false; + powerProfile = "performance"; + }; + }; + programs.plasma.kscreenlocker.autoLock = false; + }; +} diff --git a/machine/pc-installer/grub.nix b/machine/pc-installer/grub.nix new file mode 100644 index 00000000..a4785c94 --- /dev/null +++ b/machine/pc-installer/grub.nix @@ -0,0 +1,15 @@ +{ + lib, + ... +}: +{ + # For legacy pc reason, this needs to be grub + boot.loader.systemd-boot.enable = lib.mkForce false; + boot.loader.grub = { + enable = true; + efiInstallAsRemovable = true; + efiSupport = true; + memtest86.enable = true; + }; + boot.loader.efi.canTouchEfiVariables = lib.mkForce false; +} diff --git a/machine/pc-installer/hardware.nix b/machine/pc-installer/hardware.nix new file mode 100644 index 00000000..c39b8d5e --- /dev/null +++ b/machine/pc-installer/hardware.nix @@ -0,0 +1,13 @@ +{ ... }: +{ + boot.initrd.availableKernelModules = [ + "nvme" + "ahci" + "xhci_pci" + "usbhid" + "uas" + "sd_mod" + ]; + hardware.cpu.amd.updateMicrocode = true; + hardware.cpu.intel.updateMicrocode = true; +} diff --git a/machine/rainbow-resort/default.nix b/machine/rainbow-resort/default.nix new file mode 100644 index 00000000..376bd2df --- /dev/null +++ b/machine/rainbow-resort/default.nix @@ -0,0 +1,43 @@ +{ + nixos-config, + lib, + ... +}: +{ + networking.hostName = "rainbow-resort"; + imports = [ + "${nixos-config}/config" + ./disko.nix + ./hardware.nix + "${nixos-config}/config/graphical.nix" + #"${nixos-config}/config/graphical/plymouth.nix" + ]; + system.stateVersion = "24.11"; + specialisation.sway = { + configuration.imports = [ + { + nix.auto-update.specialisation = "sway"; + isSway = true; + } + ]; + }; + specialisation.sfw = { + configuration.imports = [ + { + nix.auto-update.specialisation = "sfw"; + isNSFW = lib.mkForce false; + } + ]; + }; + specialisation.sway-sfw = { + configuration.imports = [ + { + nix.auto-update.specialisation = "sway-sfw"; + isSway = true; + isNSFW = lib.mkForce false; + } + ]; + }; + home-manager.users.darkkirb.imports = [ ./home-manager.nix ]; + isNSFW = true; +} diff --git a/machine/rainbow-resort/disko.nix b/machine/rainbow-resort/disko.nix new file mode 100644 index 00000000..8dc0a23d --- /dev/null +++ b/machine/rainbow-resort/disko.nix @@ -0,0 +1,66 @@ +{ + disko.devices = { + disk = { + main = { + type = "disk"; + device = "/dev/disk/by-id/nvme-eui.002538b631c1b336"; + content = { + type = "gpt"; + partitions = { + ESP = { + priority = 1; + name = "ESP"; + start = "1M"; + end = "1024M"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ "umask=0077" ]; + }; + }; + root = { + end = "-64G"; + content = { + type = "btrfs"; + extraArgs = [ "-f" ]; # Override existing partition + # Subvolumes must set a mountpoint in order to be mounted, + # unless their parent is mounted + subvolumes = { + # Subvolume name is different from mountpoint + "/root" = { + mountOptions = [ "compress=zstd" ]; + mountpoint = "/"; + }; + # Subvolume name is the same as the mountpoint + "/persistent" = { + mountOptions = [ "compress=zstd" ]; + mountpoint = "/persistent"; + }; + # Parent is not mounted so the mountpoint must be set + "/nix" = { + mountOptions = [ + "compress=zstd" + "noatime" + ]; + mountpoint = "/nix"; + }; + }; + mountpoint = "/partition-root"; + }; + }; + swap = { + size = "100%"; + content = { + type = "swap"; + discardPolicy = "both"; + resumeDevice = true; # resume from hiberation from this device + }; + }; + }; + }; + }; + }; + }; +} diff --git a/machine/rainbow-resort/hardware.nix b/machine/rainbow-resort/hardware.nix new file mode 100644 index 00000000..4dd1f8eb --- /dev/null +++ b/machine/rainbow-resort/hardware.nix @@ -0,0 +1,60 @@ +{ + modulesPath, + nixos-hardware, + ... +}: +{ + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + nixos-hardware.nixosModules.common-cpu-amd + nixos-hardware.nixosModules.common-cpu-amd-pstate + nixos-hardware.nixosModules.common-cpu-amd-zenpower + nixos-hardware.nixosModules.common-gpu-amd + nixos-hardware.nixosModules.common-pc + nixos-hardware.nixosModules.common-pc-ssd + ]; + hardware.cpu.amd.updateMicrocode = true; + boot.initrd.availableKernelModules = [ + "nvme" + "xhci_pci" + "ahci" + "usb_storage" + "usbhid" + "sd_mod" + "sr_mod" + "k10temp" + ]; + boot.initrd.kernelModules = [ "amdgpu" ]; + boot.kernelModules = [ + "kvm-amd" + "i2c-dev" + "i2c-piix4" + ]; + boot.extraModulePackages = [ ]; + nix.settings.cores = 16; + boot.binfmt.emulatedSystems = [ + "armv7l-linux" + "powerpc-linux" + "powerpc64-linux" + "powerpc64le-linux" + "wasm32-wasi" + "riscv32-linux" + "riscv64-linux" + ]; + nix.daemonCPUSchedPolicy = "idle"; + nix.daemonIOSchedClass = "idle"; + + nix.settings.system-features = [ + "kvm" + "nixos-test" + "big-parallel" + "benchmark" + "gccarch-znver4" + "gccarch-znver3" + "gccarch-znver2" + "gccarch-znver1" + "gccarch-skylake" + "gccarch-skylake-avx512" + "ca-derivations" + ]; +} diff --git a/machine/rainbow-resort/home-manager.nix b/machine/rainbow-resort/home-manager.nix new file mode 100644 index 00000000..532d3a0f --- /dev/null +++ b/machine/rainbow-resort/home-manager.nix @@ -0,0 +1,56 @@ +{ lib, ... }: +{ + xdg.configFile."kwinoutputconfig.json".text = lib.strings.toJSON [ + { + data = [ + { + brightness = 1; + connectorName = "DP-2"; + mode = { + height = 1440; + refreshRate = 74971; + width = 2560; + }; + scale = 1; + vrrPolicy = "Always"; + edidHash = "629828d7adf0784d54d0fab41f79d710"; + edidIdentifier = "LEN 26280 0 1 2021 0"; + } + { + brightness = 1; + connectorName = "HDMI-A-1"; + edidHash = "b7c9a7401fcf59c40219386d623919c8"; + edidIdentifier = "BNQ 30881 21573 49 2016 0"; + } + ]; + name = "outputs"; + } + { + data = [ + { + outputs = [ + { + enabled = true; + outputIndex = 0; + position = { + x = 0; + y = 0; + }; + priority = 0; + } + { + enabled = true; + outputIndex = 1; + position = { + x = 2560; + y = 547; + }; + priority = 1; + } + ]; + } + ]; + name = "setups"; + } + ]; +} diff --git a/machine/thinkrac/default.nix b/machine/thinkrac/default.nix new file mode 100644 index 00000000..579cd37c --- /dev/null +++ b/machine/thinkrac/default.nix @@ -0,0 +1,41 @@ +{ + nixos-config, + ... +}: +{ + networking.hostName = "thinkrac"; + imports = [ + "${nixos-config}/config" + ./disko.nix + ./hardware.nix + "${nixos-config}/config/networkmanager.nix" + "${nixos-config}/config/graphical.nix" + #"${nixos-config}/config/graphical/plymouth.nix" + ]; + system.stateVersion = "24.11"; + specialisation.nsfw = { + configuration.imports = [ + { + nix.auto-update.specialisation = "nsfw"; + isNSFW = true; + } + ]; + }; + specialisation.sway = { + configuration.imports = [ + { + nix.auto-update.specialisation = "sway"; + isSway = true; + } + ]; + }; + specialisation.sway-nsfw = { + configuration.imports = [ + { + nix.auto-update.specialisation = "sway-nsfw"; + isSway = true; + isNSFW = true; + } + ]; + }; +} diff --git a/machine/thinkrac/disko.nix b/machine/thinkrac/disko.nix new file mode 100644 index 00000000..eba4d6b3 --- /dev/null +++ b/machine/thinkrac/disko.nix @@ -0,0 +1,66 @@ +{ + disko.devices = { + disk = { + main = { + type = "disk"; + device = "/dev/disk/by-id/nvme-eui.002538b931b01f46"; + content = { + type = "gpt"; + partitions = { + ESP = { + priority = 1; + name = "ESP"; + start = "1M"; + end = "1024M"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ "umask=0077" ]; + }; + }; + root = { + end = "-24G"; + content = { + type = "btrfs"; + extraArgs = [ "-f" ]; # Override existing partition + # Subvolumes must set a mountpoint in order to be mounted, + # unless their parent is mounted + subvolumes = { + # Subvolume name is different from mountpoint + "/root" = { + mountOptions = [ "compress=zstd" ]; + mountpoint = "/"; + }; + # Subvolume name is the same as the mountpoint + "/persistent" = { + mountOptions = [ "compress=zstd" ]; + mountpoint = "/persistent"; + }; + # Parent is not mounted so the mountpoint must be set + "/nix" = { + mountOptions = [ + "compress=zstd" + "noatime" + ]; + mountpoint = "/nix"; + }; + }; + mountpoint = "/partition-root"; + }; + }; + swap = { + size = "100%"; + content = { + type = "swap"; + discardPolicy = "both"; + resumeDevice = true; # resume from hiberation from this device + }; + }; + }; + }; + }; + }; + }; +} diff --git a/machine/thinkrac/hardware.nix b/machine/thinkrac/hardware.nix new file mode 100644 index 00000000..b881a447 --- /dev/null +++ b/machine/thinkrac/hardware.nix @@ -0,0 +1,59 @@ +{ + modulesPath, + nixos-hardware, + ... +}: +{ + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + nixos-hardware.nixosModules.lenovo-thinkpad-t470s + nixos-hardware.nixosModules.common-cpu-intel + nixos-hardware.nixosModules.common-gpu-intel + nixos-hardware.nixosModules.common-pc-laptop-ssd + ]; + hardware.cpu.intel.updateMicrocode = true; + boot.initrd.availableKernelModules = [ + "xhci_pci" + "nvme" + "usb_storage" + "sd_mod" + ]; + isIntelGPU = true; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + nix.settings.cores = 4; + # use the lowest frequency possible, to save power + powerManagement.cpuFreqGovernor = "powersave"; + # lm_sensors who cares + environment.etc."sysconfig/lm_sensors".text = '' + # Generated by sensors-detect on Tue Aug 7 10:54:09 2018 + # This file is sourced by /etc/init.d/lm_sensors and defines the modules to + # be loaded/unloaded. + # + # The format of this file is a shell script that simply defines variables: + # HWMON_MODULES for hardware monitoring driver modules, and optionally + # BUS_MODULES for any required bus driver module (for example for I2C or SPI). + + HWMON_MODULES="coretemp" + ''; + services.thermald.enable = true; + boot.extraModprobeConfig = '' + # enable power savings mode of snd_hda_intel + options snd-hda-intel power_save=1 power_save_controller=y + # enable power savings mode of igpu, enable framebuffer compression, downclock the LVDS connection + options i915 i915_enable_rc6=7 i915_enable_fbc=1 lvds_downclock=1 + # automatically suspend USB devices + options usbcore autosuspend=2 + # Fan control for thinkpads + options thinkpad_acpi fan_control=1 + ''; + boot.kernel.sysctl = { + # Probably unnecessary + "kernel.nmi_watchdog" = "0"; + "vm.laptop_mode" = "5"; + # The kernel flusher threads will periodically wake up and write `old' data out to disk. This + # tunable expresses the interval between those wakeups, in 100'ths of a second (Default is 500). + "vm.dirty_writeback_centisecs" = "1500"; + }; +} diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 00000000..e84f4070 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,27 @@ +{ + disko, + home-manager, + lib, + inTester, + self, + rust-overlay, + nix-vscode-extensions, + ... +}: +with lib; +{ + imports = [ + ./riscv.nix + ./nix + ./environment/impermanence.nix + ./secrets/sops.nix + disko.nixosModules.default + ./hydra/build-server.nix + "${home-manager}/nixos" + ]; + options.isGraphical = mkEnableOption "Whether or not this configuration is a graphical install"; + options.isInstaller = mkEnableOption "Whether or not this configuration is an installer and has no access to secrets"; + options.isNSFW = mkEnableOption "Whether or not this configuration is NSFW"; + options.isIntelGPU = mkEnableOption "Whether or not this configuration uses an Intel GPU"; + options.isSway = mkEnableOption "Whether to use sway or kde"; +} diff --git a/modules/environment/impermanence.nix b/modules/environment/impermanence.nix new file mode 100644 index 00000000..7eee3848 --- /dev/null +++ b/modules/environment/impermanence.nix @@ -0,0 +1,114 @@ +{ + impermanence, + config, + lib, + inTester, + ... +}: +with lib; +{ + imports = [ + "${impermanence}/nixos.nix" + ./user-impermanence.nix + ]; + options = { + environment.impermanence.enable = mkEnableOption "Enables impermanence"; + }; + + config = mkMerge [ + { + environment.impermanence.enable = mkDefault (!config.boot.isContainer && !inTester); + } + (mkIf config.environment.impermanence.enable { + boot.initrd.systemd.services.rootfs-cleanup = { + description = "Clean file system root"; + wantedBy = [ + "initrd.target" + ]; + after = [ + "initrd-root-device.target" + ]; + before = [ + "sysroot.mount" + ]; + unitConfig.DefaultDependencies = "no"; + serviceConfig.Type = "oneshot"; + script = '' + # workaround for machines without working rtc battery + # The time may not yet be correctly set, so wait until it is + if [[ $(date '+%s') -lt 1730469314 ]]; then + sleep 30 # this should hopefully be enough + fi + mkdir /btrfs_tmp + mount ${config.fileSystems."/".device} -t btrfs /btrfs_tmp + if [[ -e /btrfs_tmp/root ]]; then + mkdir -p /btrfs_tmp/old_roots + timestamp=$(date --date="@$(stat -c %X /btrfs_tmp/root)" "+%Y-%m-%d_%H:%M:%S") + mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp" + fi + + delete_subvolume_recursively() { + IFS=$'\n' + for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do + delete_subvolume_recursively "/btrfs_tmp/$i" + done + btrfs subvolume delete "$1" || rm -rf "$1" + } + + for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -atime +30); do + delete_subvolume_recursively "$i" + done + + btrfs subvolume create /btrfs_tmp/root + umount /btrfs_tmp + ''; + }; + assertions = [ + { + assertion = hasAttr "/" config.fileSystems; + message = "To use impermanence, you need to define a root volume"; + } + { + assertion = + if hasAttr "/" config.fileSystems then config.fileSystems."/".fsType == "btrfs" else false; + message = "rootfs must be btrfs"; + } + { + assertion = + if hasAttr "/" config.fileSystems then + any (t: t == "subvol=root" || t == "subvol=/root") config.fileSystems."/".options + else + false; + message = "rootfs must mount subvolume root"; + } + ]; + fileSystems."/persistent" = { + device = + if hasAttr "/" config.fileSystems then mkDefault config.fileSystems."/".device else "/dev/null"; + fsType = "btrfs"; + options = [ "subvol=persistent" ]; + neededForBoot = true; + }; + environment.persistence."/persistent" = { + enable = true; + hideMounts = true; + directories = [ + "/var/log" + "/var/lib/nixos" + "/var/cache" + ]; + files = [ + "/etc/ssh/ssh_host_ecdsa_key" + "/etc/ssh/ssh_host_ecdsa_key.pub" + "/etc/ssh/ssh_host_ed25519_key" + "/etc/ssh/ssh_host_ed25519_key.pub" + "/etc/ssh/ssh_host_rsa_key" + "/etc/ssh/ssh_host_rsa_key.pub" + ]; + }; + systemd.tmpfiles.rules = [ + "d /persistent/var/cache 1777 root root 7d -" + ]; + }) + ]; +} diff --git a/modules/environment/user-impermanence.nix b/modules/environment/user-impermanence.nix new file mode 100644 index 00000000..ddb0d562 --- /dev/null +++ b/modules/environment/user-impermanence.nix @@ -0,0 +1,132 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; +{ + options = { + environment.impermanence.users = mkOption { + description = "Which users to clean up the home directory for"; + default = [ ]; + type = types.listOf types.str; + }; + }; + + config = + mkIf (config.environment.impermanence.enable && config.environment.impermanence.users != [ ]) + { + programs.fuse.userAllowOther = true; + home-manager.users = listToAttrs ( + map (name: { + inherit name; + value = + { config, ... }: + { + home.file."${config.home.homeDirectory}/.cache/.keep" = { + enable = false; + }; + home.persistence.default = { + persistentStoragePath = "/persistent/home/${name}"; + allowOther = true; + defaultMethod = "symlink"; + directories = [ + "Downloads" + "Music" + "Pictures" + "Documents" + "Videos" + ".cache" + "Data" + ]; + }; + }; + }) config.environment.impermanence.users + ); + systemd.tmpfiles.rules = mkMerge ( + map (name: [ + "d /persistent/home/${name} 700 ${name} ${config.users.users.${name}.group} - -" + "d /persistent/home/${name}/.cache 700 ${name} ${config.users.users.${name}.group} 7d -" + ]) config.environment.impermanence.users + ); + systemd.services = listToAttrs ( + flatten ( + map ( + name: + let + cfg = config.users.users.${name}; + in + [ + { + name = "cleanup-home-${name}"; + description = "Clean home directory for ${name}"; + value = { + before = [ + "user@${toString cfg.uid}.service" + "home-manager-${name}.service" + ]; + partOf = [ + "user@${toString cfg.uid}.service" + ]; + conflicts = [ + "home-darkkirb-.mozilla.mount" + "home-darkkirb-.thunderbird.mount" + ]; + serviceConfig.Type = "oneshot"; + script = '' + if [[ -e ${cfg.home} ]]; then + timestamp=$(date --date="@$(stat -c %X ${cfg.home})" "+%Y-%m-%d_%H:%M:%S") + mkdir -p /persistent/old-homedirs/${name} + mv ${cfg.home} /persistent/old-homedirs/${name}/$timestamp + fi + + delete_subvolume_recursively() { + IFS=$'\n' + for i in $(${pkgs.btrfs-progs}/bin/btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do + delete_subvolume_recursively "/persistent/old-homedirs/${name}/$i" + done + ${pkgs.btrfs-progs}/bin/btrfs subvolume delete "$1" || rm -rf "$1" + } + + for i in $(find /persistent/old-homedirs/${name} -maxdepth 1 -atime +30); do + delete_subvolume_recursively "$i" + done + + ${pkgs.btrfs-progs}/bin/btrfs subvolume create ${cfg.home} + chown -R ${name}:${cfg.group} ${cfg.home} + + mkdir -p /persistent/home/${name} + chown -R ${name}:${cfg.group} /persistent/home/${name} + ''; + }; + } + { + name = "home-manager-${name}"; + value = { + wants = [ + "home-darkkirb-.mozilla.mount" + "home-darkkirb-.thunderbird.mount" + ]; + wantedBy = [ + "user@${toString cfg.uid}.service" + ]; + after = [ + "cleanup-home-${name}.service" + "home-darkkirb-.mozilla.mount" + "home-darkkirb-.thunderbird.mount" + ]; + before = [ + "user@${toString cfg.uid}.service" + ]; + partOf = [ + "user@${toString cfg.uid}.service" + ]; + }; + } + ] + ) config.environment.impermanence.users + ) + ); + }; +} diff --git a/modules/gitea.nix b/modules/gitea.nix deleted file mode 100644 index c5fc8adf..00000000 --- a/modules/gitea.nix +++ /dev/null @@ -1,116 +0,0 @@ -{ - config, - lib, - options, - pkgs, - ... -}: -with lib; let - cfg = config.services.gitea; - opt = options.services.gitea; - exe = lib.getExe cfg.package; - pg = config.services.postgresql; - useMysql = cfg.database.type == "mysql"; - usePostgresql = cfg.database.type == "postgres"; - useSqlite = cfg.database.type == "sqlite3"; - format = pkgs.formats.ini {}; - configFile = pkgs.writeText "app.ini" '' - APP_NAME = ${cfg.appName} - RUN_USER = ${cfg.user} - RUN_MODE = prod - ${generators.toINI {} cfg.settings} - ${optionalString (cfg.extraConfig != null) cfg.extraConfig} - ''; -in { - options = { - services.gitea = { - storageSecretFile = mkOption { - type = with types; str; - default = ""; - description = '' - Storage secret to be inserted into the config at #STORAGE_SECRET# - ''; - example = literalExpression ''"/run/secrets/gitea/storage-secret"''; - }; - }; - }; - - config = mkIf cfg.enable { - systemd.services.gitea = { - path = [pkgs.gnupg]; - serviceConfig = { - SystemCallFilter = mkForce "~@clock @cpu-emulation @debug @module @mount @obsolete @raw-io @reboot @setuid @swap"; - ReadWritePaths = ["/var/lib/gitea/.gnupg"]; - TimeoutSec = "infinity"; - }; - - # In older versions the secret naming for JWT was kind of confusing. - # The file jwt_secret hold the value for LFS_JWT_SECRET and JWT_SECRET - # wasn't persistent at all. - # To fix that, there is now the file oauth2_jwt_secret containing the - # values for JWT_SECRET and the file jwt_secret gets renamed to - # lfs_jwt_secret. - # We have to consider this to stay compatible with older installations. - preStart = let - runConfig = "${cfg.customDir}/conf/app.ini"; - secretKey = "${cfg.customDir}/conf/secret_key"; - oauth2JwtSecret = "${cfg.customDir}/conf/oauth2_jwt_secret"; - oldLfsJwtSecret = "${cfg.customDir}/conf/jwt_secret"; # old file for LFS_JWT_SECRET - lfsJwtSecret = "${cfg.customDir}/conf/lfs_jwt_secret"; # new file for LFS_JWT_SECRET - internalToken = "${cfg.customDir}/conf/internal_token"; - replaceSecretBin = "${pkgs.replace-secret}/bin/replace-secret"; - in - lib.mkForce '' - # copy custom configuration and generate random secrets if needed - ${optionalString (!cfg.useWizard) '' - function gitea_setup { - cp -f '${configFile}' '${runConfig}' - if [ ! -s '${secretKey}' ]; then - ${exe} generate secret SECRET_KEY > '${secretKey}' - fi - # Migrate LFS_JWT_SECRET filename - if [[ -s '${oldLfsJwtSecret}' && ! -s '${lfsJwtSecret}' ]]; then - mv '${oldLfsJwtSecret}' '${lfsJwtSecret}' - fi - if [ ! -s '${oauth2JwtSecret}' ]; then - ${exe} generate secret JWT_SECRET > '${oauth2JwtSecret}' - fi - ${lib.optionalString cfg.lfs.enable '' - if [ ! -s '${lfsJwtSecret}' ]; then - ${exe} generate secret LFS_JWT_SECRET > '${lfsJwtSecret}' - fi - ''} - if [ ! -s '${internalToken}' ]; then - ${exe} generate secret INTERNAL_TOKEN > '${internalToken}' - fi - chmod u+w '${runConfig}' - ${replaceSecretBin} '#secretkey#' '${secretKey}' '${runConfig}' - ${replaceSecretBin} '#dbpass#' '${cfg.database.passwordFile}' '${runConfig}' - ${replaceSecretBin} '#oauth2jwtsecret#' '${oauth2JwtSecret}' '${runConfig}' - ${replaceSecretBin} '#internaltoken#' '${internalToken}' '${runConfig}' - ${lib.optionalString cfg.lfs.enable '' - ${replaceSecretBin} '#lfsjwtsecret#' '${lfsJwtSecret}' '${runConfig}' - ''} - ${lib.optionalString (cfg.mailerPasswordFile != null) '' - ${replaceSecretBin} '#mailerpass#' '${cfg.mailerPasswordFile}' '${runConfig}' - ''} - ${lib.optionalString (cfg.storageSecretFile != null) '' - ${replaceSecretBin} '#storageSecret#' '${cfg.storageSecretFile}' '${runConfig}' - ''} - chmod u-w '${runConfig}' - } - (umask 027; gitea_setup) - ''} - # run migrations/init the database - ${exe} migrate - # update all hooks' binary paths - ${exe} admin regenerate hooks - # update command option in authorized_keys - if [ -r ${cfg.stateDir}/.ssh/authorized_keys ] - then - ${exe} admin regenerate keys - fi - ''; - }; - }; -} diff --git a/modules/hydra.nix b/modules/hydra.nix deleted file mode 100644 index e5ac9bb2..00000000 --- a/modules/hydra.nix +++ /dev/null @@ -1,106 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: -with lib; let - cfg = config.services.hydra-dev; - - baseDir = "/var/lib/hydra"; - - hydraConf = pkgs.writeScript "hydra.conf" cfg.extraConfig; - localDB = "dbi:Pg:dbname=hydra;user=hydra;"; - haveLocalDB = cfg.dbi == localDB; -in { - ###### interface - options = { - services.hydra-dev = { - giteaTokenFile = mkOption { - type = with types; str; - default = ""; - description = '' - Path to the gitea token secret - ''; - example = literalExpression ''"/run/secrets/hydra/gitea-token"''; - }; - githubTokenFile = mkOption { - type = with types; str; - default = ""; - description = '' - Path to the github token secret - ''; - example = literalExpression ''"/run/secrets/hydra/github-token"''; - }; - }; - }; - - config = mkIf cfg.enable { - systemd.services.hydra-init = { - preStart = lib.mkForce '' - mkdir -p ${baseDir} - chown hydra.hydra ${baseDir} - chmod 0750 ${baseDir} - - cp ${hydraConf} ${baseDir}/hydra.conf - ${ - if (cfg.giteaTokenFile == "") - then '' - GITEA_TOKEN="#gitea_token#" - '' - else '' - GITEA_TOKEN="$(head -n 1 ${cfg.giteaTokenFile})" - '' - } - ${ - if (cfg.githubTokenFile == "") - then '' - GITHUB_TOKEN="#github_token#" - '' - else '' - GITHUB_TOKEN="$(head -n 1 ${cfg.githubTokenFile})" - '' - } - - sed -i -e "s|#gitea_token#|$GITEA_TOKEN|" ${baseDir}/hydra.conf - sed -i -e "s|#github_token#|$GITHUB_TOKEN|" ${baseDir}/hydra.conf - - mkdir -m 0700 -p ${baseDir}/www - chown hydra-www.hydra ${baseDir}/www - - mkdir -m 0700 -p ${baseDir}/queue-runner - mkdir -m 0750 -p ${baseDir}/build-logs - chown hydra-queue-runner.hydra ${baseDir}/queue-runner ${baseDir}/build-logs - - ${optionalString haveLocalDB '' - if ! [ -e ${baseDir}/.db-created ]; then - ${pkgs.sudo}/bin/sudo -u ${config.services.postgresql.superUser} ${config.services.postgresql.package}/bin/createuser hydra - ${pkgs.sudo}/bin/sudo -u ${config.services.postgresql.superUser} ${config.services.postgresql.package}/bin/createdb -O hydra hydra - touch ${baseDir}/.db-created - fi - echo "create extension if not exists pg_trgm" | ${pkgs.sudo}/bin/sudo -u ${config.services.postgresql.superUser} -- ${config.services.postgresql.package}/bin/psql hydra - ''} - - if [ ! -e ${cfg.gcRootsDir} ]; then - - # Move legacy roots directory. - if [ -e /nix/var/nix/gcroots/per-user/hydra/hydra-roots ]; then - mv /nix/var/nix/gcroots/per-user/hydra/hydra-roots ${cfg.gcRootsDir} - fi - - mkdir -p ${cfg.gcRootsDir} - fi - - # Move legacy hydra-www roots. - if [ -e /nix/var/nix/gcroots/per-user/hydra-www/hydra-roots ]; then - find /nix/var/nix/gcroots/per-user/hydra-www/hydra-roots/ -type f \ - | xargs -r mv -f -t ${cfg.gcRootsDir}/ - rmdir /nix/var/nix/gcroots/per-user/hydra-www/hydra-roots - fi - - chown hydra.hydra ${cfg.gcRootsDir} - chmod 2775 ${cfg.gcRootsDir} - ''; - }; - }; -} diff --git a/modules/hydra/build-server-list.nix b/modules/hydra/build-server-list.nix new file mode 100644 index 00000000..72ffec13 --- /dev/null +++ b/modules/hydra/build-server-list.nix @@ -0,0 +1,4 @@ +[ + "not522" + "rainbow-resort" +] diff --git a/modules/hydra/build-server.nix b/modules/hydra/build-server.nix new file mode 100644 index 00000000..2bb69d42 --- /dev/null +++ b/modules/hydra/build-server.nix @@ -0,0 +1,28 @@ +{ + lib, + config, + ... +}: +with lib; +{ + options.hydra.buildServer.enable = mkEnableOption "Make this device a build server"; + imports = [ + { + config.hydra.buildServer.enable = + let + buildServers = import ./build-server-list.nix; + in + mkDefault (any (t: t == config.networking.hostName) buildServers); + } + ]; + config = mkIf config.hydra.buildServer.enable { + users.users.remote-build = { + description = "Remote builder"; + isNormalUser = true; + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINN5Q/L2FyB3DIgdJRYnTGHW3naw5VQ9coOdwHYmv0aZ darkkirb@thinkrac" + ]; + }; + nix.settings.trusted-users = [ "remote-build" ]; + }; +} diff --git a/modules/matrix/mautrix-discord.nix b/modules/matrix/mautrix-discord.nix deleted file mode 100644 index dc055df8..00000000 --- a/modules/matrix/mautrix-discord.nix +++ /dev/null @@ -1,153 +0,0 @@ -{ - system, - config, - pkgs, - lib, - ... -}: -with lib; let - dataDir = "/var/lib/mautrix-discord"; - registrationFile = config.sops.secrets."services/mautrix/discord.yaml".path; - cfg = config.services.mautrix-discord; - settingsFormat = pkgs.formats.yaml {}; - settingsFileUnsubstituted = settingsFormat.generate "mautrix-discord-config-unsubstituted.yaml" cfg.settings; - settingsFile = "${dataDir}/config.yaml"; - inherit (pkgs) mautrix-discord; -in { - options = { - services.mautrix-discord = { - enable = mkEnableOption "Mautrix-Whatsapp, a Matrix-Whatsapp hybrid puppeting/relaybot bridge"; - settings = mkOption rec { - apply = recursiveUpdate default; - inherit (settingsFormat) type; - default = { - appservice = { - address = "http://mautrix-discord.int.chir.rs:29320"; - hostname = "0.0.0.0"; - port = 29320; - database = { - type = "sqlite"; - uri = "sqlite:///${dataDir}/mautrix-telegram.db"; - }; - as_token = "$AS_TOKEN"; - hs_token = "$HS_TOKEN"; - }; - logging = { - file_name_format = null; - }; - }; - }; - environmentFile = mkOption { - type = types.nullOr types.path; - default = null; - description = '' - File containing environment variables to be passed to the mautrix-telegram service, - in which secret tokens can be specified securely by defining values for - MAUTRIX_TELEGRAM_APPSERVICE_AS_TOKEN, - MAUTRIX_TELEGRAM_APPSERVICE_HS_TOKEN, - MAUTRIX_TELEGRAM_TELEGRAM_API_ID, - MAUTRIX_TELEGRAM_TELEGRAM_API_HASH and optionally - MAUTRIX_TELEGRAM_TELEGRAM_BOT_TOKEN. - ''; - }; - }; - }; - config = mkIf cfg.enable { - systemd.services.mautrix-discord-genregistration = { - description = "Mautrix-Discord Registration"; - - script = '' - # Not all secrets can be passed as environment variable (yet) - # https://github.com/tulir/mautrix-telegram/issues/584 - [ -f ${settingsFile} ] && rm -f ${settingsFile} - export AS_TOKEN=$(${pkgs.yq}/bin/yq -r '.as_token' ${registrationFile}) - export HS_TOKEN=$(${pkgs.yq}/bin/yq -r '.hs_token' ${registrationFile}) - umask 0177 - ${pkgs.envsubst}/bin/envsubst \ - -o ${settingsFile} \ - -i ${settingsFileUnsubstituted} - ''; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - ReadWritePaths = baseNameOf dataDir; - NoNewPrivileges = true; - MemoryDenyWriteExecute = true; - PrivateDevices = true; - PrivateTmp = true; - ProtectHome = true; - ProtectSystem = "strict"; - ProtectControlGroups = true; - RestrictSUIDSGID = true; - RestrictRealtime = true; - LockPersonality = true; - ProtectKernelLogs = true; - ProtectKernelTunables = true; - ProtectHostname = true; - ProtectKernelModules = true; - ProtectClock = true; - SystemCallArchitectures = "native"; - SystemCallErrorNumber = "EPERM"; - SystemCallFilter = "@system-service"; - WorkingDirectory = dataDir; - StateDirectory = baseNameOf dataDir; - UMask = 0117; - User = "mautrix-discord"; - Group = "mautrix-discord"; - EnvironmentFile = cfg.environmentFile; - }; - restartTriggers = [settingsFileUnsubstituted cfg.environmentFile]; - }; - systemd.services.mautrix-discord = { - description = "Mautrix-Discord"; - path = with pkgs; [ffmpeg lottieconverter]; - wantedBy = ["multi-user.target"]; - wants = ["mautrix-discord-genregistration.service"]; - after = ["mautrix-discord-genregistration.service"]; - serviceConfig = { - Type = "simple"; - Restart = "always"; - - ReadWritePaths = baseNameOf dataDir; - NoNewPrivileges = true; - MemoryDenyWriteExecute = true; - PrivateDevices = true; - PrivateTmp = true; - ProtectHome = true; - ProtectSystem = "strict"; - ProtectControlGroups = true; - RestrictSUIDSGID = true; - RestrictRealtime = true; - LockPersonality = true; - ProtectKernelLogs = true; - ProtectKernelTunables = true; - ProtectHostname = true; - ProtectKernelModules = true; - ProtectClock = true; - SystemCallArchitectures = "native"; - SystemCallErrorNumber = "EPERM"; - SystemCallFilter = "@system-service"; - WorkingDirectory = dataDir; - StateDirectory = baseNameOf dataDir; - UMask = 0117; - User = "mautrix-discord"; - Group = "mautrix-discord"; - EnvironmentFile = cfg.environmentFile; - ExecStart = '' - ${mautrix-discord}/bin/mautrix-discord \ - --config='${settingsFile}' - ''; - }; - restartTriggers = [cfg.environmentFile]; - }; - users.users.mautrix-discord = { - description = "Mautrix Whatsapp bridge"; - home = "${dataDir}"; - useDefaultShell = true; - group = "mautrix-discord"; - isSystemUser = true; - }; - users.groups.mautrix-discord = {}; - sops.secrets."services/mautrix/discord.yaml".owner = "mautrix-discord"; - }; -} diff --git a/modules/matrix/mautrix-slack.nix b/modules/matrix/mautrix-slack.nix deleted file mode 100644 index 603d1f2a..00000000 --- a/modules/matrix/mautrix-slack.nix +++ /dev/null @@ -1,155 +0,0 @@ -{ - system, - config, - pkgs, - lib, - ... -}: -with lib; let - dataDir = "/var/lib/mautrix-slack"; - registrationFile = config.sops.secrets."services/mautrix/slack.yaml".path; - cfg = config.services.mautrix-slack; - settingsFormat = pkgs.formats.yaml {}; - settingsFileUnsubstituted = settingsFormat.generate "mautrix-slack-config-unsubstituted.yaml" cfg.settings; - settingsFile = "${dataDir}/config.yaml"; - inherit (pkgs) mautrix-slack; -in { - options = { - services.mautrix-slack = { - enable = mkEnableOption "Mautrix-Whatsapp, a Matrix-Whatsapp hybrid puppeting/relaybot bridge"; - settings = mkOption rec { - apply = recursiveUpdate default; - inherit (settingsFormat) type; - default = { - appservice = { - address = "http://localhost:5216"; - hostname = "0.0.0.0"; - port = 5216; - as_token = "$AS_TOKEN"; - hs_token = "$HS_TOKEN"; - }; - logging = { - min_level = "debug"; - writers = [ - { - type = "stdout"; - format = "pretty-colored"; - } - ]; - }; - }; - }; - environmentFile = mkOption { - type = types.nullOr types.path; - default = null; - description = '' - File containing environment variables to be passed to the mautrix-telegram service, - in which secret tokens can be specified securely by defining values for - MAUTRIX_TELEGRAM_APPSERVICE_AS_TOKEN, - MAUTRIX_TELEGRAM_APPSERVICE_HS_TOKEN, - MAUTRIX_TELEGRAM_TELEGRAM_API_ID, - MAUTRIX_TELEGRAM_TELEGRAM_API_HASH and optionally - MAUTRIX_TELEGRAM_TELEGRAM_BOT_TOKEN. - ''; - }; - }; - }; - config = mkIf cfg.enable { - systemd.services.mautrix-slack-genregistration = { - description = "Mautrix-slack Registration"; - - script = '' - # Not all secrets can be passed as environment variable (yet) - # https://github.com/tulir/mautrix-telegram/issues/584 - [ -f ${settingsFile} ] && rm -f ${settingsFile} - export AS_TOKEN=$(${pkgs.yq}/bin/yq -r '.as_token' ${registrationFile}) - export HS_TOKEN=$(${pkgs.yq}/bin/yq -r '.hs_token' ${registrationFile}) - umask 0177 - ${pkgs.envsubst}/bin/envsubst \ - -o ${settingsFile} \ - -i ${settingsFileUnsubstituted} - ''; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - ReadWritePaths = baseNameOf dataDir; - NoNewPrivileges = true; - MemoryDenyWriteExecute = true; - PrivateDevices = true; - PrivateTmp = true; - ProtectHome = true; - ProtectSystem = "strict"; - ProtectControlGroups = true; - RestrictSUIDSGID = true; - RestrictRealtime = true; - LockPersonality = true; - ProtectKernelLogs = true; - ProtectKernelTunables = true; - ProtectHostname = true; - ProtectKernelModules = true; - ProtectClock = true; - SystemCallArchitectures = "native"; - SystemCallErrorNumber = "EPERM"; - SystemCallFilter = "@system-service"; - WorkingDirectory = dataDir; - StateDirectory = baseNameOf dataDir; - UMask = 0117; - User = "mautrix-slack"; - Group = "mautrix-slack"; - EnvironmentFile = cfg.environmentFile; - }; - restartTriggers = [settingsFileUnsubstituted cfg.environmentFile]; - }; - systemd.services.mautrix-slack = { - description = "Mautrix-slack"; - path = with pkgs; [ffmpeg lottieconverter]; - wantedBy = ["multi-user.target"]; - wants = ["mautrix-slack-genregistration.service"]; - after = ["mautrix-slack-genregistration.service"]; - serviceConfig = { - Type = "simple"; - Restart = "always"; - - ReadWritePaths = baseNameOf dataDir; - NoNewPrivileges = true; - MemoryDenyWriteExecute = true; - PrivateDevices = true; - PrivateTmp = true; - ProtectHome = true; - ProtectSystem = "strict"; - ProtectControlGroups = true; - RestrictSUIDSGID = true; - RestrictRealtime = true; - LockPersonality = true; - ProtectKernelLogs = true; - ProtectKernelTunables = true; - ProtectHostname = true; - ProtectKernelModules = true; - ProtectClock = true; - SystemCallArchitectures = "native"; - SystemCallErrorNumber = "EPERM"; - SystemCallFilter = "@system-service"; - WorkingDirectory = dataDir; - StateDirectory = baseNameOf dataDir; - UMask = 0117; - User = "mautrix-slack"; - Group = "mautrix-slack"; - EnvironmentFile = cfg.environmentFile; - ExecStart = '' - ${mautrix-slack}/bin/mautrix-slack \ - --config='${settingsFile}' - ''; - }; - restartTriggers = [cfg.environmentFile]; - }; - users.users.mautrix-slack = { - description = "Mautrix Whatsapp bridge"; - home = "${dataDir}"; - useDefaultShell = true; - group = "mautrix-slack"; - isSystemUser = true; - }; - users.groups.mautrix-slack = {}; - sops.secrets."services/mautrix/slack.yaml".owner = "mautrix-slack"; - }; -} diff --git a/modules/matrix/mautrix-telegram.nix b/modules/matrix/mautrix-telegram.nix deleted file mode 100644 index 7ff3108d..00000000 --- a/modules/matrix/mautrix-telegram.nix +++ /dev/null @@ -1,134 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: -with lib; let - dataDir = "/var/lib/mautrix-telegram"; - registrationFile = config.sops.secrets."services/mautrix/telegram.yaml".path; - cfg = config.services.mautrix-telegram-2; - settingsFormat = pkgs.formats.yaml {}; - settingsFileUnsubstituted = settingsFormat.generate "mautrix-telegram-config-unsubstituted.yaml" cfg.settings; - settingsFile = "${dataDir}/config.yaml"; -in { - options = { - services.mautrix-telegram-2 = { - enable = mkEnableOption "mautrix-telegram, a Matrix-telegram hybrid puppeting/relaybot bridge"; - settings = mkOption rec { - apply = recursiveUpdate default; - inherit (settingsFormat) type; - default = { - appservice = { - address = "http://mautrix-telegram.int.chir.rs:29317"; - hostname = "0.0.0.0"; - port = 29317; - database = "sqlite:///${dataDir}/mautrix-telegram.db"; - as_token = "$AS_TOKEN"; - hs_token = "$HS_TOKEN"; - }; - logging = { - version = 1; - - formatters.precise.format = "[%(levelname)s@%(name)s] %(message)s"; - - handlers.console = { - class = "logging.StreamHandler"; - formatter = "precise"; - }; - - loggers = { - mau.level = "INFO"; - telethon.level = "INFO"; - - # prevent tokens from leaking in the logs: - # https://github.com/tulir/mautrix-telegram/issues/351 - aiohttp.level = "WARNING"; - }; - - # log to console/systemd instead of file - root = { - level = "INFO"; - handlers = ["console"]; - }; - }; - }; - }; - environmentFile = mkOption { - type = types.nullOr types.path; - default = null; - description = '' - File containing environment variables to be passed to the mautrix-telegram service, - in which secret tokens can be specified securely by defining values for - MAUTRIX_TELEGRAM_APPSERVICE_AS_TOKEN, - MAUTRIX_TELEGRAM_APPSERVICE_HS_TOKEN, - MAUTRIX_TELEGRAM_TELEGRAM_API_ID, - MAUTRIX_TELEGRAM_TELEGRAM_API_HASH and optionally - MAUTRIX_TELEGRAM_TELEGRAM_BOT_TOKEN. - ''; - }; - }; - }; - config = mkIf cfg.enable { - systemd.services.mautrix-telegram-genregistration = { - description = "mautrix-telegram Registration"; - - script = '' - # Not all secrets can be passed as environment variable (yet) - # https://github.com/tulir/mautrix-telegram/issues/584 - [ -f ${settingsFile} ] && rm -f ${settingsFile} - export AS_TOKEN=$(${pkgs.yq}/bin/yq -r '.as_token' ${registrationFile}) - export HS_TOKEN=$(${pkgs.yq}/bin/yq -r '.hs_token' ${registrationFile}) - umask 0177 - ${pkgs.envsubst}/bin/envsubst \ - -o ${settingsFile} \ - -i ${settingsFileUnsubstituted} - ''; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - ProtectSystem = "strict"; - ProtectHome = true; - ProtectKernelTunables = true; - ProtectKernelModules = true; - ProtectControlGroups = true; - WorkingDirectory = dataDir; - StateDirectory = baseNameOf dataDir; - UMask = 0117; - User = "mautrix-telegram"; - Group = "mautrix-telegram"; - EnvironmentFile = cfg.environmentFile; - }; - restartTriggers = [settingsFileUnsubstituted cfg.environmentFile]; - }; - systemd.services.mautrix-telegram = { - description = "mautrix-telegram"; - wantedBy = ["multi-user.target"]; - wants = ["mautrix-telegram-genregistration.service"]; - after = ["mautrix-telegram-genregistration.service"]; - serviceConfig = { - Type = "simple"; - Restart = "always"; - - WorkingDirectory = dataDir; - User = "mautrix-telegram"; - Group = "mautrix-telegram"; - EnvironmentFile = cfg.environmentFile; - ExecStart = '' - ${pkgs.mautrix-telegram}/bin/mautrix-telegram \ - --config='${settingsFile}' - ''; - }; - restartTriggers = [cfg.environmentFile]; - }; - users.users.mautrix-telegram = { - description = "Mautrix telegram bridge"; - home = "${dataDir}"; - useDefaultShell = true; - group = "mautrix-telegram"; - isSystemUser = true; - }; - users.groups.mautrix-telegram = {}; - sops.secrets."services/mautrix/telegram.yaml".owner = "mautrix-telegram"; - }; -} diff --git a/modules/matrix/mautrix-whatsapp.nix b/modules/matrix/mautrix-whatsapp.nix deleted file mode 100644 index 3ca94610..00000000 --- a/modules/matrix/mautrix-whatsapp.nix +++ /dev/null @@ -1,155 +0,0 @@ -{ - system, - config, - pkgs, - lib, - ... -}: -with lib; let - dataDir = "/var/lib/mautrix-whatsapp"; - registrationFile = config.sops.secrets."services/mautrix/whatsapp.yaml".path; - cfg = config.services.mautrix-whatsapp; - settingsFormat = pkgs.formats.yaml {}; - settingsFileUnsubstituted = settingsFormat.generate "mautrix-whatsapp-config-unsubstituted.yaml" cfg.settings; - settingsFile = "${dataDir}/config.yaml"; - inherit (pkgs) mautrix-whatsapp; -in { - disabledModules = ["services/matrix/mautrix-whatsapp.nix"]; - options = { - services.mautrix-whatsapp = { - enable = mkEnableOption "Mautrix-Whatsapp, a Matrix-Whatsapp hybrid puppeting/relaybot bridge"; - settings = mkOption rec { - apply = recursiveUpdate default; - inherit (settingsFormat) type; - default = { - appservice = { - address = "http://mautrix-whatsapp.int.chir.rs:29318"; - hostname = "0.0.0.0"; - port = 29318; - as_token = "$AS_TOKEN"; - hs_token = "$HS_TOKEN"; - }; - logging = { - min_level = "debug"; - writers = [ - { - type = "stdout"; - format = "pretty-colored"; - } - ]; - }; - }; - }; - environmentFile = mkOption { - type = types.nullOr types.path; - default = null; - description = '' - File containing environment variables to be passed to the mautrix-telegram service, - in which secret tokens can be specified securely by defining values for - MAUTRIX_TELEGRAM_APPSERVICE_AS_TOKEN, - MAUTRIX_TELEGRAM_APPSERVICE_HS_TOKEN, - MAUTRIX_TELEGRAM_TELEGRAM_API_ID, - MAUTRIX_TELEGRAM_TELEGRAM_API_HASH and optionally - MAUTRIX_TELEGRAM_TELEGRAM_BOT_TOKEN. - ''; - }; - }; - }; - config = mkIf cfg.enable { - systemd.services.mautrix-whatsapp-genregistration = { - description = "Mautrix-Whatsapp Registration"; - - script = '' - # Not all secrets can be passed as environment variable (yet) - # https://github.com/tulir/mautrix-telegram/issues/584 - [ -f ${settingsFile} ] && rm -f ${settingsFile} - export AS_TOKEN=$(${pkgs.yq}/bin/yq -r '.as_token' ${registrationFile}) - export HS_TOKEN=$(${pkgs.yq}/bin/yq -r '.hs_token' ${registrationFile}) - umask 0177 - ${pkgs.envsubst}/bin/envsubst \ - -o ${settingsFile} \ - -i ${settingsFileUnsubstituted} - ''; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - ReadWritePaths = baseNameOf dataDir; - NoNewPrivileges = true; - MemoryDenyWriteExecute = true; - PrivateDevices = true; - PrivateTmp = true; - ProtectHome = true; - ProtectSystem = "strict"; - ProtectControlGroups = true; - RestrictSUIDSGID = true; - RestrictRealtime = true; - LockPersonality = true; - ProtectKernelLogs = true; - ProtectKernelTunables = true; - ProtectHostname = true; - ProtectKernelModules = true; - ProtectClock = true; - SystemCallArchitectures = "native"; - SystemCallErrorNumber = "EPERM"; - SystemCallFilter = "@system-service"; - WorkingDirectory = dataDir; - StateDirectory = baseNameOf dataDir; - UMask = 0117; - User = "mautrix-whatsapp"; - Group = "mautrix-whatsapp"; - EnvironmentFile = cfg.environmentFile; - }; - restartTriggers = [settingsFileUnsubstituted cfg.environmentFile]; - }; - systemd.services.mautrix-whatsapp = { - description = "Mautrix-Whatsapp"; - wantedBy = ["multi-user.target"]; - wants = ["mautrix-whatsapp-genregistration.service"]; - after = ["mautrix-whatsapp-genregistration.service"]; - serviceConfig = { - Type = "simple"; - Restart = "always"; - - ReadWritePaths = baseNameOf dataDir; - NoNewPrivileges = true; - MemoryDenyWriteExecute = true; - PrivateDevices = true; - PrivateTmp = true; - ProtectHome = true; - ProtectSystem = "strict"; - ProtectControlGroups = true; - RestrictSUIDSGID = true; - RestrictRealtime = true; - LockPersonality = true; - ProtectKernelLogs = true; - ProtectKernelTunables = true; - ProtectHostname = true; - ProtectKernelModules = true; - ProtectClock = true; - SystemCallArchitectures = "native"; - SystemCallErrorNumber = "EPERM"; - SystemCallFilter = "@system-service"; - WorkingDirectory = dataDir; - StateDirectory = baseNameOf dataDir; - UMask = 0117; - User = "mautrix-whatsapp"; - Group = "mautrix-whatsapp"; - EnvironmentFile = cfg.environmentFile; - ExecStart = '' - ${mautrix-whatsapp}/bin/mautrix-whatsapp \ - --config='${settingsFile}' - ''; - }; - restartTriggers = [cfg.environmentFile]; - }; - users.users.mautrix-whatsapp = { - description = "Mautrix Whatsapp bridge"; - home = "${dataDir}"; - useDefaultShell = true; - group = "mautrix-whatsapp"; - isSystemUser = true; - }; - users.groups.mautrix-whatsapp = {}; - sops.secrets."services/mautrix/whatsapp.yaml".owner = "mautrix-whatsapp"; - }; -} diff --git a/modules/minecraft/essentialsx.nix b/modules/minecraft/essentialsx.nix deleted file mode 100644 index c364162c..00000000 --- a/modules/minecraft/essentialsx.nix +++ /dev/null @@ -1,870 +0,0 @@ -{ - config, - lib, - options, - pkgs, - ... -}: -with lib; let - essentialsx = pkgs.callPackage ../../packages/minecraft/essentialsx.nix {}; - cfg = config.services.minecraft.essentialsx; - opt = options.services.minecraft.essentialsx; - config-yml = pkgs.writeText "config.yml" (generators.toYAML {} cfg.config); -in { - options.services.minecraft.essentialsx = { - enable = mkOption { - default = false; - description = "Enable EssentialsX"; - type = types.bool; - }; - chat = mkOption { - default = true; - description = "Enable EssentialsX Chat"; - type = types.bool; - }; - spawn = mkOption { - default = true; - description = "Enable EssentialsX Spawn"; - type = types.bool; - }; - - config = { - ops-name-color = mkOption { - default = "4"; - description = "Ops name color"; - type = types.str; - }; - nickname-prefix = mkOption { - default = "~"; - description = "Nickname prefix"; - type = types.str; - }; - max-nick-length = mkOption { - default = 15; - description = "Max nickname length"; - type = types.int; - }; - nick-blacklist = mkOption { - default = []; - description = "Nickname blacklist"; - type = types.listOf types.str; - }; - ignore-colors-in-max-nick-length = mkOption { - default = false; - description = "Ignore colors in max nickname length"; - type = types.bool; - }; - hide-displayname-in-vanish = mkOption { - default = true; - description = "Hide displayname in vanish"; - type = types.bool; - }; - change-displayname = mkOption { - default = true; - description = "Change displayname"; - type = types.bool; - }; - change-tab-complete-name = mkOption { - default = false; - description = "Change tab complete name"; - type = types.bool; - }; - change-playerlist = mkOption { - default = false; - description = "Change playerlist"; - type = types.bool; - }; - add-prefix-in-playerlist = mkOption { - default = false; - description = "Add prefix in playerlist"; - type = types.bool; - }; - add-suffix-in-playerlist = mkOption { - default = false; - description = "Add suffix in playerlist"; - type = types.bool; - }; - teleport-safety = mkOption { - default = true; - description = "Teleport safety"; - type = types.bool; - }; - force-disable-teleport-safety = mkOption { - default = false; - description = "Force disable teleport safety"; - type = types.bool; - }; - force-safe-teleport-location = mkOption { - default = false; - description = "Force safe teleport location"; - type = types.bool; - }; - teleport-passenger-dismount = mkOption { - default = true; - description = "Teleport passenger dismount"; - type = types.bool; - }; - teleport-cooldown = mkOption { - default = 0; - description = "Teleport cooldown"; - type = types.int; - }; - teleport-delay = mkOption { - default = 0; - description = "Teleport delay"; - type = types.int; - }; - teleport-invulnerability = mkOption { - default = 4; - description = "Teleport invulnerability"; - type = types.int; - }; - teleport-to-center = mkOption { - default = true; - description = "Teleport to center"; - type = types.bool; - }; - heal-cooldown = mkOption { - default = 60; - description = "Heal cooldown"; - type = types.int; - }; - remove-effects-on-heal = mkOption { - default = true; - description = "Remove effects on heal"; - type = types.bool; - }; - near-radius = mkOption { - default = 200; - description = "Near radius"; - type = types.int; - }; - item-spawn-blacklist = mkOption { - default = ""; - description = "Item spawn blacklist"; - type = types.str; - }; - permission-based-item-spawn = mkOption { - default = false; - description = "Permission based item spawn"; - type = types.bool; - }; - spawnmob-limit = mkOption { - default = 10; - description = "Spawnmob limit"; - type = types.int; - }; - warn-on-smite = mkOption { - default = true; - description = "Warn on smite"; - type = types.bool; - }; - drop-items-if-full = mkOption { - default = false; - description = "Drop items if full"; - type = types.bool; - }; - notify-no-new-mail = mkOption { - default = true; - description = "Notify no new mail"; - type = types.bool; - }; - notify-player-of-mail-cooldown = mkOption { - default = 60; - description = "Notify player of mail cooldown"; - type = types.int; - }; - ovverridden-commands = mkOption { - default = []; - description = "Ovverridden commands"; - type = types.listOf types.str; - }; - disabled-commands = mkOption { - default = []; - description = "Disabled commands"; - type = types.listOf types.str; - }; - verbose-command-usages = mkOption { - default = true; - description = "Verbose command usages"; - type = types.bool; - }; - socialspy-commands = mkOption { - default = [ - "msg" - "w" - "r" - "mail" - "m" - "t" - "whisper" - "emsg" - "tell" - "er" - "reply" - "ereply" - "email" - "action" - "describe" - "eme" - "eaction" - "edescribe" - "etell" - "ewhisper" - "pm" - ]; - description = "Socialspy commands"; - type = types.listOf types.str; - }; - socialspy-listen-muted-players = mkOption { - default = true; - description = "Socialspy listen muted players"; - type = types.bool; - }; - socialspy-messages = mkOption { - default = true; - description = "Socialspy messages"; - type = types.bool; - }; - world-change-fly-reset = mkOption { - default = true; - description = "World change=ly reset"; - type = types.bool; - }; - world-change-speed-reset = mkOption { - default = true; - description = "World change=ly reset"; - type = types.bool; - }; - mute-commands = mkOption { - default = []; - description = "Mute commands"; - type = types.listOf types.str; - }; - player-commands = mkOption { - default = []; - description = "Player commands"; - type = types.listOf types.str; - }; - use-bukkit-permissions = mkOption { - default = true; - description = "Use bukkit permissions"; - type = types.bool; - }; - skip-used-one-time-kits-from-kit-list = mkOption { - default = false; - description = "Skip used one time kits from kit list"; - type = types.bool; - }; - kit-auto-equip = mkOption { - default = false; - description = "Kit auto equip"; - type = types.bool; - }; - pastebin-createkit = mkOption { - default = false; - description = "Pastebin createkit"; - type = types.bool; - }; - use-nbt-serialization-in-createkit = mkOption { - default = false; - description = "Use nbt serialization in createkit"; - type = types.bool; - }; - enabled-signs = mkOption { - default = []; - description = "Enabled signs"; - type = types.listOf types.str; - }; - sign-use-per-second = mkOption { - default = 4; - description = "Sign use per second"; - type = types.int; - }; - allow-old-id-signs = mkOption { - default = false; - description = "Allow old id signs"; - type = types.bool; - }; - unprotected-sign-names = mkOption { - default = []; - description = "Unprotected sign names"; - type = types.listOf types.str; - }; - backup = { - interval = mkOption { - default = 30; - description = "Backup interval"; - type = types.int; - }; - always-run = mkOption { - default = false; - description = "Always run"; - type = types.bool; - }; - command = mkOption { - default = null; - description = "Command"; - type = types.nullOr types.str; - }; - }; - per-warp-permission = mkOption { - default = false; - description = "Per warp permission"; - type = types.bool; - }; - real-names-on-list = mkOption { - default = false; - description = "Real names on list"; - type = types.bool; - }; - debug = mkOption { - default = false; - description = "Debug"; - type = types.bool; - }; - remove-god-on-disconnect = mkOption { - default = false; - description = "Remove god on disconnect"; - type = types.bool; - }; - auto-afk = mkOption { - default = 300; - description = "Auto afk"; - type = types.int; - }; - auto-afk-kick = mkOption { - default = -1; - description = "Auto afk kick"; - type = types.int; - }; - freeze-afk-players = mkOption { - default = false; - description = "Freeze afk players"; - type = types.bool; - }; - disable-item-pickup-while-afk = mkOption { - default = false; - description = "Disable item pickup while afk"; - type = types.bool; - }; - cancel-afk-on-interact = mkOption { - default = true; - description = "Cancel afk on interact"; - type = types.bool; - }; - cancel-afk-on-move = mkOption { - default = true; - description = "Cancel afk on move"; - type = types.bool; - }; - cancel-afk-on-chat = mkOption { - default = true; - description = "Cancel afk on chat"; - type = types.bool; - }; - sleep-ignores-afk-players = mkOption { - default = true; - description = "Sleep ignores afk players"; - type = types.bool; - }; - sllep-ignores-vanished-players = mkOption { - default = true; - description = "Sleep ignores vanished players"; - type = types.bool; - }; - afk-list-name = mkOption { - default = "none"; - description = "Afk list name"; - type = types.str; - }; - broadcast-afk-message = mkOption { - default = true; - description = "Broadcast afk message"; - type = types.bool; - }; - death-messages = mkOption { - default = true; - description = "Death messages"; - type = types.bool; - }; - vanishing-items-policy = mkOption { - default = "keep"; - description = "Vanishing items policy"; - type = types.str; - }; - binding-items-policy = mkOption { - default = "keep"; - description = "Binding items policy"; - type = types.str; - }; - send-info-after-death = mkOption { - default = false; - description = "Send info after death"; - type = types.bool; - }; - allow-silent-join-quit = mkOption { - default = false; - description = "Allow silent join quit"; - type = types.bool; - }; - custom-join-message = mkOption { - default = "none"; - description = "Custom join message"; - type = types.str; - }; - custom-quit-message = mkOption { - default = "none"; - description = "Custom quit message"; - type = types.str; - }; - custom-new-username-message = mkOption { - default = "none"; - description = "Custom new username message"; - type = types.str; - }; - use-custom-server-full-message = mkOption { - default = true; - description = "Use custom server full message"; - type = types.bool; - }; - hide-join-quit-messages-above = mkOption { - default = -1; - description = "Hide join quit messages above"; - type = types.int; - }; - no-god-in-worlds = mkOption { - default = []; - description = "No god in worlds"; - type = types.listOf types.str; - }; - world-teleport-permissions = mkOption { - default = false; - description = "World teleport permissions"; - type = types.bool; - }; - default-stack-size = mkOption { - default = -1; - description = "Default stack size"; - type = types.int; - }; - oversized-stacksize = mkOption { - default = 64; - description = "Oversized stacksize"; - type = types.int; - }; - repair-enchanted = mkOption { - default = true; - description = "Repair enchanted"; - type = types.bool; - }; - unsafe-enchantments = mkOption { - default = false; - description = "Unsafe enchantments"; - type = types.bool; - }; - tree-command-range-limit = mkOption { - default = 300; - description = "Tree command range limit"; - type = types.int; - }; - register-back-in-listener = mkOption { - default = false; - description = "Register back in listener"; - type = types.bool; - }; - login-attack-delay = mkOption { - default = 5; - description = "Login attack delay"; - type = types.int; - }; - max-fly-speed = mkOption { - default = 0.8; - description = "Max fly speed"; - type = types.float; - }; - max-walk-speed = mkOption { - default = 0.8; - description = "Max walk speed"; - type = types.float; - }; - mails-per-minute = mkOption { - default = 1000; - description = "Mails per minute"; - type = types.int; - }; - max-mute-time = mkOption { - default = -1; - description = "Max mute time"; - type = types.int; - }; - max-tempban-time = mkOption { - default = -1; - description = "Max tempban time"; - type = types.int; - }; - last-message-reply-recipient = mkOption { - default = true; - description = "Last message reply recipient"; - type = types.bool; - }; - last-message-reply-recipient-timeout = mkOption { - default = 180; - description = "Last message reply recipient timeout"; - type = types.int; - }; - last-message-reply-vanished = mkOption { - default = true; - description = "Last message reply vanished"; - type = types.bool; - }; - milk-bucket-easter-egg = mkOption { - default = true; - description = "Milk bucket easter egg"; - type = types.bool; - }; - send-fly-enable-on-join = mkOption { - default = true; - description = "Send fly enable on join"; - type = types.bool; - }; - world-time-permissions = mkOption { - default = false; - description = "World time permissions"; - type = types.bool; - }; - command-cooldowns = mkOption { - default = {}; - description = "Command cooldowns"; - type = types.attrsOf types.int; - }; - command-cooldown-persistence = mkOption { - default = true; - description = "Command cooldown persistence"; - type = types.bool; - }; - npcs-in-balance-ranking = mkOption { - default = false; - description = "Npcs in balance ranking"; - type = types.bool; - }; - allow-bulk-buy-sell = mkOption { - default = true; - description = "Allow bulk buy sell"; - type = types.bool; - }; - allow-selling-named-items = mkOption { - default = false; - description = "Allow selling named items"; - type = types.bool; - }; - delay-motd = mkOption { - default = 0; - description = "Delay motd"; - type = types.int; - }; - default-enabled-confirm-commands = mkOption { - default = []; - description = "Default enabled confirm commands"; - type = types.listOf types.str; - }; - teleport-when-freed = mkOption { - default = "back"; - description = "Teleport when freed"; - type = types.str; - }; - jail-online-time = mkOption { - default = false; - description = "Jail online time"; - type = types.bool; - }; - tpa-accept-cancellation = mkOption { - default = 120; - description = "Tpa accept cancellation"; - type = types.int; - }; - tpa-max-request = mkOption { - default = 5; - description = "Tpa max request"; - type = types.int; - }; - allow-direct-hat = mkOption { - default = true; - description = "Allow direct hat"; - type = types.bool; - }; - allow-world-in-broadcastworld = mkOption { - default = true; - description = "Allow world in broadcastworld"; - type = types.bool; - }; - is-water-safe = mkOption { - default = false; - description = "Is water safe"; - type = types.bool; - }; - safe-usermap-names = mkOption { - default = true; - description = "Safe usermap names"; - type = types.bool; - }; - log-command-block-commands = mkOption { - default = true; - description = "Log command block commands"; - type = types.bool; - }; - max-projectile-speed = mkOption { - default = 8; - description = "Max projectile speed"; - type = types.int; - }; - update-check = mkOption { - default = true; - description = "Update check"; - type = types.bool; - }; - update-bed-at-daytime = mkOption { - default = true; - description = "Update bed at daytime"; - type = types.bool; - }; - world-home-permission = mkOption { - default = false; - description = "World home permission"; - type = types.bool; - }; - - sethome-multiple = mkOption { - default = { - default = 3; - vip = 5; - staff = 10; - }; - description = "Sethome multiple"; - type = types.attrsOf types.int; - }; - compass-towards-home-perm = mkOption { - default = false; - description = "Compass towards home perm"; - type = types.bool; - }; - spawn-if-no-home = mkOption { - default = true; - description = "Spawn if no home"; - type = types.bool; - }; - confirm-home-overwrite = mkOption { - default = false; - description = "Confirm home overwrite"; - type = types.bool; - }; - starting-balance = mkOption { - default = 0; - description = "Starting balance"; - type = types.int; - }; - command-costs = mkOption { - default = {}; - description = "Command costs"; - type = types.attrsOf types.int; - }; - currency-symbol = mkOption { - default = "$"; - description = "Currency symbol"; - type = types.str; - }; - currency-symbol-suffix = mkOption { - default = false; - description = "Currency symbol suffix"; - type = types.bool; - }; - max-money = mkOption { - default = 10000000000000; - description = "Max money"; - type = types.int; - }; - min-money = mkOption { - default = -10000; - description = "Min money"; - type = types.int; - }; - economy-log-enabled = mkOption { - default = false; - description = "Economy log enabled"; - type = types.bool; - }; - economy-log-update-enabled = mkOption { - default = false; - description = "Economy log update enabled"; - type = types.bool; - }; - minimum-pay-amount = mkOption { - default = 0.001; - description = "Minimum pay amount"; - type = types.float; - }; - pay-excludes-ignore-list = mkOption { - default = false; - description = "Pay excludes ignore list"; - type = types.bool; - }; - show-zero-baltop = mkOption { - default = true; - description = "Show zero baltop"; - type = types.bool; - }; - currency-format = mkOption { - default = "#,##0.00"; - description = "Currency format"; - type = types.str; - }; - non-ess-in-help = mkOption { - default = true; - description = "Non ess in help"; - type = types.bool; - }; - hide-permissionless-help = mkOption { - default = true; - description = "Hide permissionless help"; - type = types.bool; - }; - chat = { - radius = mkOption { - default = 0; - description = "Radius"; - type = types.int; - }; - format = mkOption { - default = "{PREFIX}{DISPLAYNAME}{SUFFIX}&r: {MESSAGE}"; - description = "Format"; - type = types.str; - }; - group-formats = mkOption { - default = {}; - description = "Group formats"; - type = types.attrsOf types.str; - }; - world-aliases = mkOption { - default = {}; - description = "World aliases"; - type = types.attrsOf types.str; - }; - shout-default = mkOption { - default = false; - description = "Shout default"; - type = types.bool; - }; - persist-shout = mkOption { - default = false; - description = "Persist shout"; - type = types.bool; - }; - question-enabled = mkOption { - default = true; - description = "Question enabled"; - type = types.bool; - }; - }; - respawn-listener-priority = mkOption { - default = "high"; - description = "Respawn listener priority"; - type = types.str; - }; - spawn-join-listener-priority = mkOption { - default = "high"; - description = "Spawn join listener priority"; - type = types.str; - }; - respawn-at-home = mkOption { - default = false; - description = "Respawn at home"; - type = types.bool; - }; - respawn-at-home-bed = mkOption { - default = true; - description = "Respawn at home bed"; - type = types.bool; - }; - respawn-anchor = mkOption { - default = false; - description = "Respawn anchor"; - type = types.bool; - }; - spawn-on-join = mkOption { - default = false; - description = "Spawn on join"; - type = types.oneOf [types.bool types.str (types.listOf types.str)]; - }; - }; - worth-yml = - mkOption - { - default = null; - description = "Worth YML Path"; - type = types.path; - }; - }; - - config = - mkIf cfg.enable - { - assertions = [ - { - assertion = cfg.config.change-playerlist -> cfg.config.change-tab-complete-name; - message = "change-playerlist can only be on if change-tab-complete-name is on"; - } - { - assertion = cfg.config.add-prefix-in-playerlist -> cfg.config.change-playerlist; - message = "add-prefix-in-playerlist can only be on if change-playerlist is on"; - } - { - assertion = cfg.config.add-suffix-in-playerlist -> cfg.config.change-playerlist; - message = "add-suffix-in-playerlist can only be on if change-playerlist is on"; - } - { - assertion = cfg.config.force-disable-teleport-safety -> cfg.config.teleport-safety; - message = "force-disable-teleport-safety can only be on if teleport-safety is on"; - } - ]; - warnings = optional (!(cfg.config.respawn-at-home -> cfg.config.respawn-at-home-bed)) "respawn-at-home is off, the setting of respawn-at-home-bed is ignored."; - services.minecraft = { - vault.enable = config.services.minecraft.luckperms.enable; - }; - services.minecraft.plugins = lib.mkMerge [ - [ - { - package = essentialsx.essentialsx; - startScript = pkgs.writeScript "essentialsx" '' - mkdir -pv plugins/Essentials - cat ${config-yml} > plugins/Essentials/config.yml - ${ - if cfg.worth-yml != null - then '' - cat ${cfg.worth-yml} > plugins/Essentials/worth.yml - '' - else "" - } - ''; - } - ] - ( - mkIf cfg.chat - [ - { - package = essentialsx.essentialsx-chat; - startScript = pkgs.writeScript "dummy" ""; - } - ] - ) - ( - mkIf cfg.spawn - [ - { - package = essentialsx.essentialsx-spawn; - startScript = pkgs.writeScript "dummy" ""; - } - ] - ) - ]; - }; -} diff --git a/modules/minecraft/luckperms.nix b/modules/minecraft/luckperms.nix deleted file mode 100644 index 152b5202..00000000 --- a/modules/minecraft/luckperms.nix +++ /dev/null @@ -1,410 +0,0 @@ -{ - config, - lib, - options, - pkgs, - ... -}: -with lib; let - luckperms = pkgs.callPackage ../../packages/minecraft/luckperms.nix {}; - cfg = config.services.minecraft.luckperms; - opt = options.services.minecraft.luckperms; - luckperms-yml = pkgs.writeText "luckperms.yml" (generators.toYAML {} cfg.config); - groups = builtins.mapAttrs (name: value: pkgs.writeText "${name}.yml" (generators.toYAML {} value)) cfg.groups; - users = builtins.mapAttrs (name: value: pkgs.writeText "${name}.yml" (generators.toYAML {} value)) cfg.users; - groupPermCopy = - builtins.map - (group: '' - cat ${groups.${group}} > plugins/LuckPerms/yaml-storage/groups/${group}.yml - '') - (builtins.attrNames groups); - userPermCopy = - builtins.map - (user: '' - cat ${users.${user}} > plugins/LuckPerms/yaml-storage/users/${user}.yml - '') - (builtins.attrNames users); - startScript = pkgs.writeScript "luckperms" '' - mkdir -p plugins/LuckPerms - cat ${luckperms-yml} > plugins/LuckPerms/config.yml - mkdir -p plugins/LuckPerms/yaml-storage/groups/ - ${builtins.toString groupPermCopy} - mkdir -p plugins/LuckPerms/yaml-storage/users/ - ${builtins.toString userPermCopy} - ''; -in { - imports = [ - ./vault.nix - ]; - options.services.minecraft.luckperms = { - enable = mkOption { - default = false; - type = types.bool; - description = "Enable LuckPerms"; - }; - - config = { - server = mkOption { - default = "global"; - type = types.str; - description = "Server Name to use for LuckPerms"; - }; - use-server-uuid-cache = mkOption { - default = false; - type = types.bool; - description = "Use the server UUID cache"; - }; - storage-method = mkOption { - default = "yaml"; - type = types.str; - description = "Storage method to use for LuckPerms"; - }; - sync-minutes = mkOption { - default = -1; - type = types.int; - description = "How often to sync with the database"; - }; - watch-files = mkOption { - default = true; - type = types.bool; - description = "Watch for changes"; - }; - messaging-service = mkOption { - default = "auto"; - type = types.str; - description = "Messaging service to use for LuckPerms"; - }; - auto-push-updates = mkOption { - default = true; - type = types.bool; - description = "Automatically push updates to the database"; - }; - push-log-entries = mkOption { - default = true; - type = types.bool; - description = "Push log entries to the database"; - }; - broadcast-received-log-entries = mkOption { - default = true; - type = types.bool; - description = "Broadcast log entries to the server"; - }; - temporary-add-behaviour = mkOption { - default = "deny"; - type = types.enum ["accumulate" "replace" "deny"]; - description = "How to handle temporary permissions"; - }; - primary-group-calculation = mkOption { - default = "parents-by-weight"; - type = types.enum ["stored" "parents-by-weight" "all-parents-by-weight"]; - description = "How to calculate the primary group"; - }; - argument-based-command-permissions = mkOption { - default = false; - type = types.bool; - description = "Enable argument-based command permissions"; - }; - require-sender-group-membership-to-modify = mkOption { - default = false; - type = types.bool; - description = "Require sender group membership to modify permissions"; - }; - log-notify = mkOption { - default = true; - type = types.bool; - description = "Log notifications"; - }; - log-notify-filtered-descriptions = mkOption { - default = []; - type = types.listOf types.str; - description = "Log filtered descriptions"; - }; - auto-install-translations = mkOption { - default = true; - type = types.bool; - description = "Automatically install translations"; - }; - inheritance-traversal-algorithm = mkOption { - default = "depth-first-pre-order"; - type = types.enum ["breadth-first" "depth-first-pre-order" "depth-first-post-order"]; - description = "Inheritance traversal algorithm"; - }; - post-traversal-inheritance-sort = mkOption { - default = false; - type = types.bool; - description = "Sort post-traversal inheritance"; - }; - context-satisfy-mode = mkOption { - default = "at-least-one-value-per-key"; - type = types.enum ["at-least-one-value-per-key" "all-values-per-key"]; - description = "Context satisfy mode"; - }; - disabled-contexts = mkOption { - default = []; - type = types.listOf types.str; - description = "Disabled contexts"; - }; - include-global = mkOption { - default = true; - type = types.bool; - description = "Include global permissions"; - }; - include-global-world = mkOption { - default = true; - type = types.bool; - description = "Include global world permissions"; - }; - apply-global-groups = mkOption { - default = true; - type = types.bool; - description = "Apply global groups"; - }; - apply-global-world-groups = mkOption { - default = true; - type = types.bool; - description = "Apply global world groups"; - }; - meta-value-selection-default = mkOption { - default = "inheritance"; - type = types.enum ["inheritance" "highest-number" "lowest-number"]; - description = "Meta value selection default"; - }; - meta-value-selection = mkOption { - default = {}; - type = types.attrsOf (types.enum ["inheritance" "highest-number" "lowest-number"]); - description = "Meta value selection"; - }; - apply-wildcards = mkOption { - default = true; - type = types.bool; - description = "Apply wildcards"; - }; - apply-sponge-implicit-wildcards = mkOption { - default = false; - type = types.bool; - description = "Apply Sponge implicit wildcards"; - }; - apply-default-negated-permissions-before-wildcards = mkOption { - default = false; - type = types.bool; - description = "Apply default negated permissions before wildcards"; - }; - apply-regex = mkOption { - default = true; - type = types.bool; - description = "Apply regex"; - }; - apply-shorthand = mkOption { - default = true; - type = types.bool; - description = "Apply shorthand"; - }; - apply-bukkit-child-permissions = mkOption { - default = true; - type = types.bool; - description = "Apply Bukkit child permissions"; - }; - apply-bukkit-default-permissions = mkOption { - default = true; - type = types.bool; - description = "Apply Bukkit default permissions"; - }; - apply-bukkit-attachment-permissions = mkOption { - default = true; - type = types.bool; - description = "Apply Bukkit attachment permissions"; - }; - disabled-context-calculators = mkOption { - default = []; - type = types.listOf types.str; - description = "Disabled context calculators"; - }; - world-rewrite = mkOption { - default = {}; - type = types.attrsOf types.str; - description = "World rewrite"; - }; - group-weight = mkOption { - default = {}; - type = types.attrsOf types.int; - description = "Group weight"; - }; - enable-ops = mkOption { - default = true; - type = types.bool; - description = "Enable ops"; - }; - auto-op = mkOption { - default = false; - type = types.bool; - description = "Automatically op players"; - }; - commands-allow-op = mkOption { - default = false; - type = types.bool; - description = "Commands allow op"; - }; - vault-unsafe-lookups = mkOption { - default = false; - type = types.bool; - description = "Vault unsafe lookups"; - }; - vault-group-use-displaynames = mkOption { - default = true; - type = types.bool; - description = "Vault group use displaynames"; - }; - vault-npc-group = mkOption { - default = "default"; - type = types.str; - description = "Vault NPC group"; - }; - vault-npc-op-status = mkOption { - default = false; - type = types.bool; - description = "Vault NPC op status"; - }; - use-vault-server = mkOption { - default = false; - type = types.bool; - description = "Use Vault server"; - }; - vault-server = mkOption { - default = "global"; - type = types.str; - description = "Vault server"; - }; - vault-include-global = mkOption { - default = true; - type = types.bool; - description = "Vault include global"; - }; - vault-ignore-world = mkOption { - default = false; - type = types.bool; - description = "Vault ignore world"; - }; - debug-logins = mkOption { - default = false; - type = types.bool; - description = "Debug logins"; - }; - allow-invalid-usernames = mkOption { - default = false; - type = types.bool; - description = "Allow invalid usernames"; - }; - skip-bulkupdate-confirmation = mkOption { - default = false; - type = types.bool; - description = "Skip bulkupdate confirmation"; - }; - prevent-primary-group-removal = mkOption { - default = false; - type = types.bool; - description = "Prevent primary group removal"; - }; - update-client-command-list = mkOption { - default = true; - type = types.bool; - description = "Update client command list"; - }; - register-command-list-data = mkOption { - default = true; - type = types.bool; - description = "Register command list data"; - }; - resolve-command-selectors = mkOption { - default = false; - type = types.bool; - description = "Resolve command selectors"; - }; - }; - groups = mkOption { - default = { - default = { - name = "default"; - }; - }; - type = types.attrsOf (types.submodule { - options = { - name = mkOption { - type = types.str; - }; - parents = mkOption { - default = []; - type = types.listOf types.str; - }; - permissions = mkOption { - default = []; - type = types.listOf (types.oneOf [ - types.str - (types.attrsOf (types.submodule { - options = { - value = mkOption { - type = types.bool; - default = true; - }; - context = mkOption { - default = {}; - type = types.attrsOf types.str; - }; - }; - })) - ]); - }; - prefixes = mkOption { - default = []; - type = types.listOf (types.attrsOf types.anything); - }; - meta = mkOption { - default = {}; - type = types.attrsOf types.anything; - }; - }; - }); - description = "Group configuration"; - }; - users = mkOption { - default = {}; - type = types.attrsOf (types.submodule { - options = { - uuid = mkOption { - type = types.str; - }; - name = mkOption { - type = types.str; - }; - primary-group = mkOption { - type = types.str; - default = "default"; - }; - parents = mkOption { - default = ["default"]; - type = types.listOf types.str; - }; - permissions = mkOption { - default = []; - type = types.listOf types.str; - }; - prefixes = mkOption { - default = []; - type = types.listOf (types.attrsOf types.anything); - }; - meta = mkOption { - default = {}; - type = types.attrsOf types.anything; - }; - }; - }); - }; - }; - config = mkIf cfg.enable { - services.minecraft.plugins = [ - { - package = luckperms; - inherit startScript; - } - ]; - }; -} diff --git a/modules/minecraft/multiverse.nix b/modules/minecraft/multiverse.nix deleted file mode 100644 index 6477aa88..00000000 --- a/modules/minecraft/multiverse.nix +++ /dev/null @@ -1,66 +0,0 @@ -{ - config, - lib, - options, - pkgs, - ... -}: -with lib; let - multiverse = pkgs.callPackage ../../packages/minecraft/multiverse.nix {}; - cfg = config.services.minecraft.multiverse; - opt = options.services.minecraft.multiverse; -in { - options.services.minecraft.multiverse = { - enable = mkOption { - default = false; - description = "Enable Multiverse"; - type = types.bool; - }; - netherportals = mkOption { - default = false; - description = "Enable Nether portals"; - type = types.bool; - }; - signportals = mkOption { - default = false; - description = "Enable sign portals"; - type = types.bool; - }; - inventories = mkOption { - default = false; - description = "Enable inventories"; - type = types.bool; - }; - }; - config = mkIf cfg.enable { - services.minecraft.plugins = mkMerge [ - [ - { - package = multiverse.core; - startScript = pkgs.writeScript "dummy" ""; - } - ] - (mkIf cfg.netherportals - [ - { - package = multiverse.nether-portals; - startScript = pkgs.writeScript "dummy" ""; - } - ]) - (mkIf cfg.signportals - [ - { - package = multiverse.sign-portals; - startScript = pkgs.writeScript "dummy" ""; - } - ]) - (mkIf cfg.inventories - [ - { - package = multiverse.inventories; - startScript = pkgs.writeScript "dummy" ""; - } - ]) - ]; - }; -} diff --git a/modules/minecraft/server.nix b/modules/minecraft/server.nix deleted file mode 100644 index d0ceb5d4..00000000 --- a/modules/minecraft/server.nix +++ /dev/null @@ -1,2578 +0,0 @@ -{ - system, - config, - lib, - options, - pkgs, - ... -}: -with lib; let - inherit (pkgs) papermc; - cfg = config.services.minecraft; - opt = options.services.minecraft; - serverProperties = pkgs.writeText "server.properties" '' - ${generators.toKeyValue {} cfg.properties.extraConfig} - ''; - whitelistJson = pkgs.writeText "whitelist.json" '' - ${builtins.toJSON cfg.whitelist} - ''; - bukkitYaml = pkgs.writeText "bukkit.yml" '' - ${generators.toYAML {} cfg.bukkit-yml} - ''; - spigotYaml = pkgs.writeText "spigot.yml" '' - ${generators.toYAML {} cfg.spigot-yml} - ''; - paperYaml = pkgs.writeText "paper.yml" '' - ${generators.toYAML {} cfg.paper-yml} - ''; -in { - options.services.minecraft = { - enable = mkOption { - default = false; - type = types.bool; - description = "Enable minecraft server"; - }; - stateDir = mkOption { - default = "/var/lib/minecraft"; - type = types.str; - description = "Path to the minecraft server state directory"; - }; - properties = { - allow-flight = mkOption { - default = false; - type = types.bool; - description = "Allow flight"; - }; - allow-nether = mkOption { - default = true; - type = types.bool; - description = "Allow nether"; - }; - broadcast-console-to-ops = mkOption { - default = true; - type = types.bool; - description = "Broadcast console to ops"; - }; - broadcast-rcon-to-ops = mkOption { - default = true; - type = types.bool; - description = "Broadcast rcon to ops"; - }; - difficulty = mkOption { - default = "normal"; - type = types.enum ["peacful" "easy" "normal" "hard"]; - description = "Difficulty"; - }; - enable-command-block = mkOption { - default = false; - type = types.bool; - description = "Enable command block"; - }; - enable-jmx-monitoring = mkOption { - default = false; - type = types.bool; - description = "Enable JMX monitoring"; - }; - enable-rcon = mkOption { - default = false; - type = types.bool; - description = "Enable rcon"; - }; - sync-chunk-writes = mkOption { - default = true; - type = types.bool; - description = "Sync chunk writes"; - }; - enable-status = mkOption { - default = true; - type = types.bool; - description = "Enable status"; - }; - enable-query = mkOption { - default = false; - type = types.bool; - description = "Enable query"; - }; - entity-broadcast-range-percentage = mkOption { - default = 100; - type = types.ints.between 10 1000; - description = "Entity broadcast range percentage"; - }; - force-gamemode = mkOption { - default = false; - type = types.bool; - description = "Force gamemode"; - }; - function-permission-level = mkOption { - default = 2; - type = types.ints.between 1 4; - description = "Function permission level"; - }; - gamemode = mkOption { - default = "survival"; - type = types.enum ["survival" "creative" "adventure" "spectator"]; - description = "Gamemode"; - }; - generate-structures = mkOption { - default = true; - type = types.bool; - description = "Generate structures"; - }; - generator-settings = mkOption { - default = ""; - type = types.oneOf [types.str (types.attrsOf types.anything)]; - description = "Generator settings"; - apply = val: - if (builtins.isString val) - then val - else builtins.toJSON val; - }; - hardcore = mkOption { - default = false; - type = types.bool; - description = "Hardcore"; - }; - level-name = mkOption { - default = "world"; - type = types.str; - description = "Level name"; - }; - level-seed = mkOption { - default = ""; - type = types.str; - description = "Level seed"; - }; - level-type = mkOption { - default = "default"; - type = types.enum ["default" "flat" "largeBiomes" "amplified"]; - description = "Level type"; - }; - max-players = mkOption { - default = 20; - type = types.ints.unsigned; - description = "Max players"; - }; - max-tick-time = mkOption { - default = 60000; - type = types.int; - description = "Max tick time"; - }; - world-size = mkOption { - default = 29999984; - type = types.ints.between 1 29999984; - description = "World size"; - }; - motd = mkOption { - default = "A Minecraft server"; - type = types.str; - description = "Message of the day"; - }; - network-compression-threshold = mkOption { - default = 256; - type = types.int; - description = "Network compression threshold"; - }; - online-mode = mkOption { - default = true; - type = types.bool; - description = "Online mode"; - }; - permission-level = mkOption { - default = 4; - type = types.ints.between 0 4; - description = "Permission level"; - }; - player-idle-timeout = mkOption { - default = 0; - type = types.ints.unsigned; - description = "Player idle timeout"; - }; - prevent-proxy-connections = mkOption { - default = false; - type = types.bool; - description = "Prevent proxy connections"; - }; - pvp = mkOption { - default = true; - type = types.bool; - description = "PvP"; - }; - query-port = mkOption { - default = 25565; - type = types.port; - description = "Query port"; - }; - rate-limit = mkOption { - default = 0; - type = types.ints.unsigned; - description = "Rate limit"; - }; - rcon-password-file = mkOption { - default = null; - type = types.nullOr types.str; - description = "Rcon password file"; - }; - rcon-port = mkOption { - default = 25575; - type = types.port; - description = "Rcon port"; - }; - resource-pack = mkOption { - default = ""; - type = types.str; - description = "Resource pack"; - }; - resource-pack-prompt = mkOption { - default = ""; - type = types.str; - description = "Resource pack prompt"; - }; - resource-pack-sha1 = mkOption { - default = ""; - type = types.str; - description = "Resource pack sha1"; - }; - require-resource-pack = mkOption { - default = false; - type = types.bool; - description = "Require resource pack"; - }; - server-ip = mkOption { - default = ""; - type = types.str; - description = "Server ip"; - }; - server-port = mkOption { - default = 25565; - type = types.port; - description = "Server port"; - }; - simulation-distance = mkOption { - default = 10; - type = types.ints.between 3 32; - description = "Simulation distance"; - }; - snooper-enabled = mkOption { - default = true; - type = types.bool; - description = "Snooper enabled"; - }; - spawn-animals = mkOption { - default = true; - type = types.bool; - description = "Enable animals"; - }; - spawn-monsters = mkOption { - default = true; - type = types.bool; - description = "Enable monsters"; - }; - spawn-npcs = mkOption { - default = true; - type = types.bool; - description = "Enable npcs"; - }; - spawn-protection = mkOption { - default = 16; - type = types.ints.between 0 256; - description = "Spawn protection"; - }; - use-native-transport = mkOption { - default = true; - type = types.bool; - description = "Use native transport"; - }; - view-distance = mkOption { - default = 10; - type = types.ints.between 3 32; - description = "View distance"; - }; - white-list = mkOption { - default = cfg.whitelist != []; - type = types.bool; - description = "White list"; - }; - enforce-whitelist = mkOption { - default = false; - type = types.bool; - description = "Enforce whitelist"; - }; - extraConfig = mkOption { - default = {}; - type = types.attrsOf types.anything; - description = "Extra configuration to be added to the minecraft server properties file"; - }; - }; - bukkit-yml = { - settings = { - allow-end = mkOption { - default = true; - type = types.bool; - description = "Allow end"; - }; - warn-on-overload = mkOption { - default = true; - type = types.bool; - description = "Warn on overload"; - }; - permissions-file = mkOption { - default = "permissions.yml"; - type = types.str; - description = "Permissions file"; - }; - update-folder = mkOption { - default = "update"; - type = types.str; - description = "Update folder"; - }; - ping-packet-limit = mkOption { - default = 100; - type = types.ints.between 0 1000; - description = "Ping packet limit"; - }; - use-exact-login-location = mkOption { - default = false; - type = types.bool; - description = "Use exact login location"; - }; - world-container = mkOption { - default = "world"; - type = types.str; - description = "World container"; - }; - plugin-profiling = mkOption { - default = false; - type = types.bool; - description = "Plugin profiling"; - }; - connection-throttle = mkOption { - default = 0; - type = types.ints.unsigned; - description = "Connection throttle"; - }; - query-plugins = mkOption { - default = true; - type = types.bool; - description = "Query plugins"; - }; - deprecated-verbose = mkOption { - default = "default"; - type = types.enum [true false "default"]; - description = "Deprecated verbose"; - }; - shutdown-message = mkOption { - default = "Server closed"; - type = types.str; - description = "Shutdown message"; - }; - }; - spawn-limits = { - monsters = mkOption { - default = 70; - type = types.ints.unsigned; - description = "Max monsters"; - }; - animals = mkOption { - default = 15; - type = types.ints.unsigned; - description = "Max animals"; - }; - water-animals = mkOption { - default = 5; - type = types.ints.unsigned; - description = "Max water animals"; - }; - ambient = mkOption { - default = 15; - type = types.ints.unsigned; - description = "Max ambient"; - }; - }; - chunk-gc = { - period-in-ticks = mkOption { - default = 600; - type = types.ints.unsigned; - description = "Period in ticks"; - }; - load-threshold = mkOption { - default = 0; - type = types.ints.unsigned; - description = "Load threshold"; - }; - }; - ticks-per = { - animal-spawns = mkOption { - default = 400; - type = types.ints.unsigned; - description = "Animal spawns"; - }; - monster-spawns = mkOption { - default = 1; - type = types.ints.unsigned; - description = "Monster spawns"; - }; - autosave = mkOption { - default = 6000; - type = types.ints.unsigned; - description = "Autosave"; - }; - }; - }; - spigot-yml = { - settings = { - debug = mkOption { - default = false; - type = types.bool; - description = "Debug"; - }; - bungeecord = mkOption { - default = false; - type = types.bool; - description = "Bungeecord"; - }; - timout-time = mkOption { - default = 60; - type = types.ints.unsigned; - description = "Timeout time"; - }; - restart-on-crash = mkOption { - default = true; - type = types.bool; - description = "Restart on crash"; - }; - restart-script = mkOption { - default = "./start.sh"; - type = types.str; - description = "Restart script"; - }; - netty-threads = mkOption { - default = 4; - type = types.ints.unsigned; - description = "Netty threads"; - }; - log-villager-deaths = mkOption { - default = false; - type = types.bool; - description = "Log villager deaths"; - }; - log-named-deaths = mkOption { - default = false; - type = types.bool; - description = "Log named deaths"; - }; - sample-count = mkOption { - default = 12; - type = types.ints.unsigned; - description = "Sample count"; - }; - player-shuffle = mkOption { - default = 0; - type = types.ints.unsigned; - description = "Player shuffle"; - }; - user-cache-size = mkOption { - default = 1000; - type = types.ints.unsigned; - description = "User cache size"; - }; - save-user-cache-on-stop-only = mkOption { - default = false; - type = types.bool; - description = "Save user cache on stop only"; - }; - moved-wrongly-threshold = mkOption { - default = 0.0625; - type = types.float; - description = "Moved wrongly threshold"; - }; - moved-too-quickly-multiplier = mkOption { - default = 10.0; - type = types.float; - description = "Moved too quickly multiplier"; - }; - }; - messages = { - whitelist = mkOption { - default = "You are not whitelisted on this server!"; - type = types.str; - description = "Whitelist message"; - }; - unknown-command = mkOption { - default = "Unknown command. Type \"/help\" for help."; - type = types.str; - description = "Unknown command message"; - }; - server-full = mkOption { - default = "The server is full!"; - type = types.str; - description = "Server full message"; - }; - outdated-client = mkOption { - default = "Outdated client! Please use {0}"; - type = types.str; - description = "Outdated client message"; - }; - outdated-server = mkOption { - default = "Outdated server! I'm still on {0}"; - type = types.str; - description = "Outdated server message"; - }; - restart = mkOption { - default = "Server is restarting"; - type = types.str; - description = "Restart message"; - }; - }; - advancements = { - disable-saving = mkOption { - default = false; - type = types.bool; - description = "Disable saving"; - }; - disabled = mkOption { - default = []; - type = types.listOf types.str; - description = "Disabled Advancements"; - }; - }; - config-version = mkOption { - default = 12; - type = types.ints.unsigned; - description = "Config version"; - }; - stats = { - disable-saving = mkOption { - default = false; - type = types.bool; - description = "Disable saving"; - }; - }; - commands = { - replace-commands = mkOption { - default = ["setblock" "summon" "testforblock" "tellraw"]; - type = types.listOf types.str; - description = "Replace commands"; - }; - spam-exclusions = mkOption { - default = ["/skill"]; - type = types.listOf types.str; - description = "Spam exclusions"; - }; - silent-commandblock-console = mkOption { - default = false; - type = types.bool; - description = "Silent commandblock console"; - }; - log = mkOption { - default = true; - type = types.bool; - description = "Log"; - }; - tab-complete = mkOption { - default = 0; - type = types.int; - description = "Tab complete"; - }; - send-namespaced = mkOption { - default = true; - type = types.bool; - description = "Send namespaced"; - }; - }; - players = { - disable-saving = mkOption { - default = false; - type = types.bool; - description = "Disable saving"; - }; - }; - world-settings = mkOption { - default = {}; - type = types.attrsOf (types.submodule { - options = { - below-zero-generation-in-existing-chunks = mkOption { - default = true; - type = types.bool; - description = "Below zero generation in existing chunks"; - }; - verbose = mkOption { - default = false; - type = types.bool; - description = "Verbose"; - }; - enable-zombie-pigmen-portal-spawns = mkOption { - default = true; - type = types.bool; - description = "Enable zombie pigmen portal spawns"; - }; - merge-radius.item = mkOption { - default = 2.5; - type = types.float; - description = "Merge radius.item"; - }; - merge-radius.exp = mkOption { - default = 3.0; - type = types.float; - description = "Merge radius.exp"; - }; - item-despawn-rate = mkOption { - default = 3000; - type = types.int; - description = "Item despawn rate"; - }; - view-distance = mkOption { - default = "default"; - type = type.oneOf [types.int types.str]; - description = "View distance"; - }; - simulation-distance = mkOption { - default = "default"; - type = type.oneOf [types.int types.str]; - description = "Simulation distance"; - }; - thunder-chance = mkOption { - default = 100000; - type = types.int; - description = "Thunder chance"; - }; - wither-spawn-sound-radius = mkOption { - default = 0; - type = types.int; - description = "Wither spawn sound radius"; - }; - arrow-despawn-rate = mkOption { - default = 1200; - type = types.int; - description = "Arrow despawn rate"; - }; - trident-despawn-rate = mkOption { - default = 1200; - type = types.int; - description = "Trident despawn rate"; - }; - hanging-tick-frequency = mkOption { - default = 100; - type = types.int; - description = "Hanging tick frequency"; - }; - zombie-aggressive-towards-villager = mkOption { - default = true; - type = types.bool; - description = "Zombie aggressive towards villager"; - }; - nerf-spawner-mobs = mkOption { - default = false; - type = types.bool; - description = "Nerf spawner mobs"; - }; - mob-spawn-range = mkOption { - default = 8; - type = types.int; - description = "Mob spawn range"; - }; - end-portal-sound-radius = mkOption { - default = 0; - type = types.int; - description = "End portal sound radius"; - }; - entity-activation-range = { - animals = mkOption { - default = 32; - type = types.int; - description = "Entity activation range.animals"; - }; - monsters = mkOption { - default = 32; - type = types.int; - description = "Entity activation range.monsters"; - }; - raiders = mkOption { - default = 48; - type = types.int; - description = "Entity activation range.raiders"; - }; - misc = mkOption { - default = 16; - type = types.int; - description = "Entity activation range.misc"; - }; - water = mkOption { - default = 16; - type = types.int; - description = "Entity activation range.water"; - }; - villagers = mkOption { - default = 32; - type = types.int; - description = "Entity activation range.villagers"; - }; - flying-monsters = mkOption { - default = 32; - type = types.int; - description = "Entity activation range.flying-monsters"; - }; - wake-up-inactive = { - animals-max-per-tick = mkOption { - default = 4; - type = types.int; - description = "Entity activation range.wake-up-inactive.animals-max-per-tick"; - }; - animals-every = mkOption { - default = 1200; - type = types.int; - description = "Entity activation range.wake-up-inactive.animals-every"; - }; - animals-for = mkOption { - default = 100; - type = types.int; - description = "Entity activation range.wake-up-inactive.animals-for"; - }; - monsters-max-per-tick = mkOption { - default = 8; - type = types.int; - description = "Entity activation range.wake-up-inactive.monsters-max-per-tick"; - }; - monsters-every = mkOption { - default = 400; - type = types.int; - description = "Entity activation range.wake-up-inactive.monsters-every"; - }; - monsters-for = mkOption { - default = 100; - type = types.int; - description = "Entity activation range.wake-up-inactive.monsters-for"; - }; - villagers-max-per-tick = mkOption { - default = 4; - type = types.int; - description = "Entity activation range.wake-up-inactive.villagers-max-per-tick"; - }; - villagers-every = mkOption { - default = 600; - type = types.int; - description = "Entity activation range.wake-up-inactive.villagers-every"; - }; - villagers-for = mkOption { - default = 100; - type = types.int; - description = "Entity activation range.wake-up-inactive.villagers-for"; - }; - flying-monsters-max-per-tick = mkOption { - default = 8; - type = types.int; - description = "Entity activation range.wake-up-inactive.flying-monsters-max-per-tick"; - }; - flying-monsters-every = mkOption { - default = 200; - type = types.int; - description = "Entity activation range.wake-up-inactive.flying-monsters-every"; - }; - flying-monsters-for = mkOption { - default = 100; - type = types.int; - description = "Entity activation range.wake-up-inactive.flying-monsters-for"; - }; - }; - villagers-work-immunity-after = mkOption { - default = 100; - type = types.int; - description = "Entity activation range.villagers-work-immunity-after"; - }; - villagers-work-immunity-for = mkOption { - default = 20; - type = types.int; - description = "Entity activation range.villagers-work-immunity-for"; - }; - villagers-active-for-panic = mkOption { - default = true; - type = types.bool; - description = "Entity activation range.villagers-active-for-panic"; - }; - tick-inactive-villagers = mkOption { - default = true; - type = types.bool; - description = "Entity activation range.tick-inactive-villagers"; - }; - ignore-spectators = mkOption { - default = false; - type = types.bool; - description = "Entity activation range.ignore-spectators"; - }; - }; - entity-tracking-range = { - players = mkOption { - default = 48; - type = types.int; - description = "Entity tracking range.players"; - }; - animals = mkOption { - default = 48; - type = types.int; - description = "Entity tracking range.animals"; - }; - monsters = mkOption { - default = 48; - type = types.int; - description = "Entity tracking range.monsters"; - }; - misc = mkOption { - default = 32; - type = types.int; - description = "Entity tracking range.misc"; - }; - other = mkOption { - default = 64; - type = types.int; - description = "Entity tracking range.other"; - }; - }; - ticks-per.hopper-transfer = mkOption { - default = 8; - type = types.int; - description = "Ticks per.hopper-transfer"; - }; - ticks-per.hopper-check = mkOption { - default = 1; - type = types.int; - description = "Ticks per.hopper-check"; - }; - hopper-amount = mkOption { - default = 1; - type = types.int; - description = "Hopper amount"; - }; - dragon-death-sound-radius = mkOption { - default = 0; - type = types.int; - description = "Dragon death sound radius"; - }; - seed-village = mkOption { - default = 10387312; - type = types.int; - description = "Seed village"; - }; - seed-desert = mkOption { - default = 14357617; - type = types.int; - description = "Seed desert"; - }; - seed-igloo = mkOption { - default = 14357618; - type = types.int; - description = "Seed igloo"; - }; - seed-jungle = mkOption { - default = 14357619; - type = types.int; - description = "Seed jungle"; - }; - seed-swamp = mkOption { - default = 14357620; - type = types.int; - description = "Seed swamp"; - }; - seed-monument = mkOption { - default = 10387313; - type = types.int; - description = "Seed monument"; - }; - seed-shipwreck = mkOption { - default = 165745295; - type = types.int; - description = "Seed shipwreck"; - }; - seed-ocean = mkOption { - default = 14357621; - type = types.int; - description = "Seed ocean"; - }; - seed-outpost = mkOption { - default = 165745296; - type = types.int; - description = "Seed outpost"; - }; - seed-endcity = mkOption { - default = 10387313; - type = types.int; - description = "Seed endcity"; - }; - seed-slime = mkOption { - default = 987234911; - type = types.int; - description = "Seed slime"; - }; - seed-bastion = mkOption { - default = 30084232; - type = types.int; - description = "Seed bastion"; - }; - seed-fortress = mkOption { - default = 30084232; - type = types.int; - description = "Seed fortress"; - }; - seed-mansion = mkOption { - default = 10387319; - type = types.int; - description = "Seed mansion"; - }; - seed-fossil = mkOption { - default = 14357921; - type = types.int; - description = "Seed fossil"; - }; - seed-portal = mkOption { - default = 34222645; - type = types.int; - description = "Seed portal"; - }; - seed-stronghold = mkOption { - default = "default"; - type = types.oneOf [types.int types.str]; - description = "Seed stronghold"; - }; - hunger = { - jump-walk-exhaustion = mkOption { - default = 0.05; - type = types.float; - description = "Hunger.jump-walk-exhaustion"; - }; - jump-sprint-exhaustion = mkOption { - default = 0.20; - type = types.float; - description = "Hunger.jump-sprint-exhaustion"; - }; - combat-exhaustion = mkOption { - default = 0.1; - type = types.float; - description = "Hunger.combat-exhaustion"; - }; - regen-exhaustion = mkOption { - default = 6.0; - type = types.float; - description = "Hunger.regen-exhaustion"; - }; - swim-multiplier = mkOption { - default = 0.01; - type = types.float; - description = "Hunger.swim-multiplier"; - }; - sprint-multiplier = mkOption { - default = 0.1; - type = types.float; - description = "Hunger.sprint-multiplier"; - }; - other-multiplier = mkOption { - default = 0.0; - type = types.float; - description = "Hunger.other-multiplier"; - }; - }; - max-tnt-per-tick = mkOption { - default = 100; - type = types.int; - description = "Max tnt per tick"; - }; - max-tick-time = { - tile = mkOption { - default = 50; - type = types.int; - description = "Max tick time.tile"; - }; - entity = mkOption { - default = 50; - type = types.int; - description = "Max tick time.entity"; - }; - }; - growth = { - cactus-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.cactus-modifier"; - }; - cane-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.cane-modifier"; - }; - melon-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.melon-modifier"; - }; - mushroom-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.mushroom-modifier"; - }; - pumpkin-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.pumpkin-modifier"; - }; - sapling-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.sapling-modifier"; - }; - beetroot-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.beetroot-modifier"; - }; - carrot-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.carrot-modifier"; - }; - potato-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.potato-modifier"; - }; - wheat-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.wheat-modifier"; - }; - netherwart-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.netherwart-modifier"; - }; - vine-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.vine-modifier"; - }; - cocoa-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.cocoa-modifier"; - }; - bamboo-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.bamboo-modifier"; - }; - sweetberry-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.sweetberry-modifier"; - }; - kelp-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.kelp-modifier"; - }; - twistingvines-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.twistingvines-modifier"; - }; - weepingvines-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.weepingvines-modifier"; - }; - cavevines-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.cavevines-modifier"; - }; - glowberry-modifier = mkOption { - default = 100; - type = types.int; - description = "Growth.glowberry-modifier"; - }; - }; - }; - }); - }; - }; - paper-yml = { - verbose = mkOption { - default = false; - type = types.bool; - description = "Verbose"; - }; - messages = { - kick = { - authentication-servers-shut-down = mkOption { - default = ""; - type = types.str; - description = "Kick.authentication-servers-shut-down"; - }; - connection-throttle = mkOption { - default = "Connection throttled! Please wait before reconnecting."; - type = types.str; - description = "Kick.connection-throttle"; - }; - flying-player = mkOption { - default = "Flying is not enabled on this server."; - type = types.str; - description = "Kick.flying-player"; - }; - flying-vehicle = mkOption { - default = "Flying is not enabled on this server."; - type = types.str; - description = "Kick.flying-vehicle"; - }; - }; - no-permission = mkOption { - default = "&cI'm sorry, but you do not have permission to perform this command.\nPlease contact the server administrators if you believe this is in error."; - type = types.str; - description = "No-permission"; - }; - }; - timings = { - enabled = mkOption { - default = true; - type = types.bool; - description = "Enabled"; - }; - verbose = mkOption { - default = true; - type = types.bool; - description = "Verbose"; - }; - url = mkOption { - default = "https://timings.aikar.co/"; - type = types.str; - description = "Url"; - }; - server-name-privacy = mkOption { - default = false; - type = types.bool; - description = "Server-name-privacy"; - }; - hidden-config-entries = mkOption { - default = ["database" "settings.bungeecord-addresses" "setitngs.velocity-support.secret"]; - type = types.listOf types.str; - description = "Hidden-config-entries"; - }; - history-interval = mkOption { - default = 300; - type = types.int; - description = "History-interval"; - }; - history-length = mkOption { - default = 3600; - type = types.int; - description = "History-length"; - }; - server-name = mkOption { - default = "Unknown Server"; - type = types.str; - description = "Server-name"; - }; - }; - config-version = mkOption { - default = 25; - type = types.int; - description = "Config-version"; - }; - settings = { - use-display-name-in-quit-message = mkOption { - default = false; - type = types.bool; - description = "Settings.use-display-name-in-quit-message"; - }; - load-permissions-yml-before-plugins = mkOption { - default = true; - type = types.bool; - description = "Settings.load-permissions-yml-before-plugins"; - }; - region-file-cache-size = mkOption { - default = 256; - type = types.int; - description = "Settings.region-file-cache-size"; - }; - enable-player-collisions = mkOption { - default = true; - type = types.bool; - description = "Settings.enable-player-collisions"; - }; - save-empty-scoreboard-teams = mkOption { - default = false; - type = types.bool; - description = "Settings.save-empty-scoreboard-teams"; - }; - bungee-online-mode = mkOption { - default = true; - type = types.bool; - description = "Settings.bungee-online-mode"; - }; - incoming-packet-spam-threshold = mkOption { - default = 300; - type = types.int; - description = "Settings.incoming-packet-spam-threshold"; - }; - use-alternative-luck-formula = mkOption { - default = false; - type = types.bool; - description = "Settings.use-alternative-luck-formula"; - }; - velocity-support = { - enabled = mkOption { - default = false; - type = types.bool; - description = "Velocity-support.enabled"; - }; - online-mode = mkOption { - default = false; - type = types.bool; - description = "Velocity-support.online-mode"; - }; - secret = mkOption { - default = ""; - type = types.str; - description = "Velocity-support.secret"; - }; - }; - console-has-all-permissions = mkOption { - default = false; - type = types.bool; - description = "Settings.console-has-all-permissions"; - }; - player-auto-save-rate = mkOption { - default = -1; - type = types.int; - description = "Settings.player-auto-save-rate"; - }; - max-player-auto-save-per-tick = mkOption { - default = -1; - type = types.int; - description = "Settings.max-player-auto-save-per-tick"; - }; - fix-target-selector-tag-completion = mkOption { - default = true; - type = types.bool; - description = "Settings.fix-target-selector-tag-completion"; - }; - lag-compensate-block-breaking = mkOption { - default = true; - type = types.bool; - description = "Settings.lag-compensate-block-breaking"; - }; - send-full-pos-for-hard-colliding-entities = mkOption { - default = true; - type = types.bool; - description = "Settings.send-full-pos-for-hard-colliding-entities"; - }; - time-command-affects-all-worlds = mkOption { - default = false; - type = types.bool; - description = "Settings.time-command-affects-all-worlds"; - }; - max-joins-per-tick = mkOption { - default = 3; - type = types.int; - description = "Settings.max-joins-per-tick"; - }; - track-plugin-scoreboards = mkOption { - default = false; - type = types.bool; - description = "Settings.track-plugin-scoreboards"; - }; - fix-entity-position-desync = mkOption { - default = true; - type = types.bool; - description = "Settings.fix-entity-position-desync"; - }; - log-player-ip-addresses = mkOption { - default = true; - type = types.bool; - description = "Settings.log-player-ip-addresses"; - }; - console = { - enable-brigadier-highlighting = mkOption { - default = false; - type = types.bool; - description = "Console.enable-brigadier-highlighting"; - }; - enable-brigadier-completion = mkOption { - default = true; - type = types.bool; - description = "Console.enable-brigadier-completion"; - }; - }; - suggest-player-names-when-null-tab-completions = mkOption { - default = true; - type = types.bool; - description = "Settings.suggest-player-names-when-null-tab-completions"; - }; - watchdog = { - early-warning-every = mkOption { - default = 5000; - type = types.int; - description = "Watchdog.early-warning-every"; - }; - early-warning-delay = mkOption { - default = 10000; - type = types.int; - description = "Watchdog.early-warning-delay"; - }; - }; - spam-limiter = { - tab-spam-increment = mkOption { - default = 1; - type = types.int; - description = "Spam-limiter.tab-spam-increment"; - }; - tab-spam-limit = mkOption { - default = 500; - type = types.int; - description = "Spam-limiter.tab-spam-limit"; - }; - recipe-spam-increment = mkOption { - default = 1; - type = types.int; - description = "Spam-limiter.recipe-spam-increment"; - }; - recipe-spam-limit = mkOption { - default = 20; - type = types.int; - description = "Spam-limiter.recipe-spam-limit"; - }; - }; - book-size = { - page-max = mkOption { - default = 2560; - type = types.int; - description = "Book-size.page-max"; - }; - total-multiplier = mkOption { - default = 0.98; - type = types.float; - description = "Book-size.total-multiplier"; - }; - }; - loggers = { - deobfuscate-stacktraces = mkOption { - default = true; - type = types.bool; - description = "Loggers.deobfuscate-stacktraces"; - }; - }; - item-validation = { - display-name = mkOption { - default = 8192; - type = types.int; - description = "Item-validation.display-name"; - }; - loc-name = mkOption { - default = 8192; - type = types.int; - description = "Item-validation.loc-name"; - }; - lore-line = mkOption { - default = 8192; - type = types.int; - description = "Item-validation.lore-line"; - }; - book = { - title = mkOption { - default = 8192; - type = types.int; - description = "Item-validation.book.title"; - }; - author = mkOption { - default = 8192; - type = types.int; - description = "Item-validation.book.author"; - }; - page = mkOption { - default = 16384; - type = types.int; - description = "Item-validation.book.page"; - }; - }; - }; - chunk-loading = { - min-load-radius = mkOption { - default = 2; - type = types.int; - description = "Chunk-loading.min-load-radius"; - }; - max-concurrent-sends = mkOption { - default = 2; - type = types.int; - description = "Chunk-loading.max-concurrent-sends"; - }; - autoconfig-send-distance = mkOption { - default = true; - type = types.bool; - description = "Chunk-loading.autoconfig-send-distance"; - }; - target-player-chunk-send-rate = mkOption { - default = 100.0; - type = types.float; - description = "Chunk-loading.target-player-chunk-send-rate"; - }; - global-max-chunk-send-rate = mkOption { - default = -1.0; - type = types.float; - description = "Chunk-loading.global-max-chunk-send-rate"; - }; - enable-frustum-priority = mkOption { - default = true; - type = types.bool; - description = "Chunk-loading.enable-frustum-priority"; - }; - global-max-chunk-load-rate = mkOption { - default = -1.0; - type = types.float; - description = "Chunk-loading.global-max-chunk-load-rate"; - }; - player-max-concurrent-loads = mkOption { - default = 20.0; - type = types.float; - description = "Chunk-loading.player-max-concurrent-loads"; - }; - global-max-concurrent-loads = mkOption { - default = 500.0; - type = types.float; - description = "Chunk-loading.global-max-concurrent-loads"; - }; - }; - async-chunks = { - threads = mkOption { - default = -1; - type = types.int; - description = "Async-chunks.threads"; - }; - }; - packet-limiter = { - kick-message = mkOption { - default = "&cSent too many packets"; - type = types.str; - description = "Packet-limiter.kick-message"; - }; - limits = { - all = { - interval = mkOption { - default = 7.0; - type = types.float; - description = "Packet-limiter.limits.all.interval"; - }; - max-packet-rate = mkOption { - default = 500.0; - type = types.float; - description = "Packet-limiter.limits.all.max-packet-rate"; - }; - }; - PacketPlayInAutoRecipe = { - interval = mkOption { - default = 4.0; - type = types.float; - description = "Packet-limiter.limits.PcketPlayInAutoRecipe.interval"; - }; - max-packet-rate = mkOption { - default = 5.0; - type = types.float; - description = "Packet-limiter.limits.PcketPlayInAutoRecipe.max-packet-rate"; - }; - action = mkOption { - default = "DROP"; - type = types.str; - description = "Packet-limiter.limits.PcketPlayInAutoRecipe.action"; - }; - }; - }; - }; - }; - world-settings = mkOption { - default = { - default = {}; - }; - type = types.attrsOf (types.submodule { - options = { - water-over-lava-flow-speed = mkOption { - default = 5; - type = types.int; - description = "World-settings.type.options.water-over-lava-flow-speed"; - }; - grass-spread-tick-rate = mkOption { - default = 1; - type = types.int; - description = "World-settings.type.options.grass-spread-tick-rate"; - }; - game-mechanics = { - disable-chest-cat-detection = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.game-mechanics.disable-chest-cat-detection"; - }; - nerf-pigmen-from-nether-portals = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.game-mechanics.nerf-pigmen-from-nether-portals"; - }; - disable-player-crits = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.game-mechanics.disable-player-crits"; - }; - disable-sprint-interruption-on-attack = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.game-mechanics.disable-sprint-interruption-on-attack"; - }; - shield-blocking-delay = mkOption { - default = 5; - type = types.int; - description = "World-settings.type.options.game-mechanics.shield-blocking-delay"; - }; - disable-end-credits = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.game-mechanics.disable-end-credits"; - }; - disable-unloaded-chunk-enderpearl-exploit = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.game-mechanics.disable-unloaded-chunk-enderpearl-exploit"; - }; - disable-relative-projectile-velocity = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.game-mechanics.disable-relative-projectile-velocity"; - }; - disable-mob-spawner-spawn-egg-transformation = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.game-mechanics.disable-mob-spawner-spawn-egg-transformation"; - }; - scan-for-legacy-ender-dragon = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.game-mechanics.scan-for-legacy-ender-dragon"; - }; - fix-curing-zombie-villager-discount-exploit = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.game-mechanics.fix-curing-zombie-villager-discount-exploit"; - }; - disable-pillager-patrols = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.game-mechanics.disable-pillager-patrols"; - }; - pillager-patrols = { - spawn-chance = mkOption { - default = 0.2; - type = types.float; - description = "World-settings.type.options.game-mechanics.pillager-patrols.spawn-chance"; - }; - spawn-delay = { - per-player = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.game-mechanics.pillager-patrols.spawn-delay.per-player"; - }; - ticks = mkOption { - default = 12000; - type = types.int; - description = "World-settings.type.options.game-mechanics.pillager-patrols.spawn-delay.ticks"; - }; - }; - start = { - per-player = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.game-mechanics.pillager-patrols.start.per-player"; - }; - day = mkOption { - default = 5; - type = types.int; - description = "World-settings.type.options.game-mechanics.pillager-patrols.start.day"; - }; - }; - }; - }; - use-faster-eigencraft-redstone = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.use-faster-eigencraft-redstone"; - }; - nether-ceiling-void-damage-height = mkOption { - default = 0; - type = types.int; - description = "World-settings.type.options.nether-ceiling-void-damage-height"; - }; - only-players-collide = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.only-players-collide"; - }; - allow-vehicle-collisions = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.allow-vehicle-collisions"; - }; - fix-items-merging-through-walls = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.fix-items-merging-through-walls"; - }; - keep-spawn-loaded = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.keep-spawn-loaded"; - }; - parrots-are-unaffected-by-player-movement = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.parrots-are-unaffected-by-player-movement"; - }; - disable-explosion-knockback = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.disable-explosion-knockback"; - }; - allow-non-player-entities-on-scoreboards = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.allow-non-player-entities-on-scoreboards"; - }; - portal-search-radius = mkOption { - default = 128; - type = types.int; - description = "World-settings.type.options.portal-search-radius"; - }; - portal-create-radius = mkOption { - default = 16; - type = types.int; - description = "World-settings.type.options.portal-create-radius"; - }; - portal-search-vanilla-dimension-scaling = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.portal-search-vanilla-dimension-scaling"; - }; - anti-xray = { - enabled = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.anti-xray.enabled"; - }; - engine-mode = mkOption { - default = 1; - type = types.int; - description = "World-settings.type.options.anti-xray.engine-mode"; - }; - max-block-height = mkOption { - default = 64; - type = types.int; - description = "World-settings.type.options.anti-xray.max-block-height"; - }; - update-radius = mkOption { - default = 2; - type = types.int; - description = "World-settings.type.options.anti-xray.update-radius"; - }; - lava-obscures = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.anti-xray.lava-obscures"; - }; - use-permissions = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.anti-xray.use-permissions"; - }; - hidden-blocks = mkOption { - default = [ - "copper_ore" - "deepslate_copper_ore" - "gold_ore" - "deepslate_gold_ore" - "iron_ore" - "deepslate_iron_ore" - "coal_ore" - "deepslate_coal_ore" - "lapis_ore" - "deepslate_lapis_ore" - "mossy_cobblestone" - "obsidian" - "chest" - "diamond_ore" - "deepslate_diamond_ore" - "redstone_ore" - "deepslate_redstone_ore" - "clay" - "emerald_ore" - "deepslate_emerald_ore" - "ender_chest" - ]; - type = types.listOf types.str; - description = "World-settings.type.options.anti-xray.hidden-blocks"; - }; - replacement-blocks = mkOption { - default = ["stone" "oak_planks" "deepslate"]; - type = types.listOf types.str; - description = "World-settings.type.options.anti-xray.replacement-blocks"; - }; - }; - armor-stands-do-collision-entity-lookups = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.armor-stands-do-collision-entity-lookups"; - }; - disable-thunder = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.disable-thunder"; - }; - skeleton-horse-thunder-spawn-rate = mkOption { - default = 0.01; - type = types.float; - description = "World-settings.type.options.skeleton-horse-thunder-spawn-rate"; - }; - disable-ice-and-snow = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.disable-ice-and-snow"; - }; - keep-spawn-loaded-range = mkOption { - default = 10; - type = types.int; - description = "World-settings.type.options.keep-spawn-loaded-range"; - }; - fix-climbing-bypassing-cramming-rule = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.fix-climbing-bypassing-cramming-rule"; - }; - container-update-tick-rate = mkOption { - default = 1; - type = types.int; - description = "World-settings.type.options.container-update-tick-rate"; - }; - fixed-chunk-inhabited-time = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.fixed-chunk-inhabited-time"; - }; - remove-corrupt-tile-entities = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.remove-corrupt-tile-entities"; - }; - prevent-tnt-from-moving-in-water = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.prevent-tnt-from-moving-in-water"; - }; - iron-golems-can-spawn-in-air = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.iron-golems-can-spawn-in-air"; - }; - show-sign-click-command-failure-msgs-to-player = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.show-sign-click-command-failure-msgs-to-player"; - }; - max-leash-distance = mkOption { - default = 10.0; - type = types.float; - description = "World-settings.type.options.max-leash-distance"; - }; - armor-stands-tick = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.armor-stand-tick"; - }; - non-player-arrow-despawn-rate = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.non-player-arrow-despawn-rate"; - }; - creative-arrow-despawn-rate = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.create-arrow-despawn-rate"; - }; - spawner-nerfed-mobs-should-jump = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.spawner-nerfed-mobs-should-jump"; - }; - entities-target-with-follow-range = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.entities-target-with-follow-range"; - }; - wateranimal-spawn-height = { - maximum = mkOption { - default = "default"; - type = types.oneOf [types.int types.str]; - description = "World-settings.type.options.wateranimal-spawn-height.maximum"; - }; - minimum = mkOption { - default = "default"; - type = types.oneOf [types.int types.str]; - description = "World-settings.type.options.wateranimal-spawn-height.minimum"; - }; - }; - zombies-target-turtle-eggs = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.zombies-target-turtle-eggs"; - }; - zombie-villager-infection-chance = mkOption { - default = -1.0; - type = types.float; - description = "World-settings.type.options.zombie-villager-infection-chance"; - }; - all-chunks-are-slime-chunks = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.all-chunks-are-slime-chunks"; - }; - mob-spawner-tick-rate = mkOption { - default = 1; - type = types.int; - description = "World-settings.type.options.mob-spawner-tick-rate"; - }; - per-player-mob-spawns = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.per-player-mob-spawns"; - }; - light-queue-size = mkOption { - default = 20; - type = types.int; - description = "World-settings.type.options.light-queue-size"; - }; - auto-save-interval = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.auto-save-interval"; - }; - enable-treasure-maps = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.enable-treasure-maps"; - }; - treasure-maps-return-already-discovered = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.treasure-maps-return-already-discovered"; - }; - split-overstacked-loot = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.split-overstacked-loot"; - }; - delay-chunk-unloads-by = mkOption { - default = 16; - type = types.int; - description = "World-settings.type.options.delay-chunk-unloads-by"; - }; - disable-teleportation-suffocation-check = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.disable-teleportation-suffocation-check"; - }; - generator-settings = { - flat-bedrock = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.generator-settings.flat-bedrock"; - }; - }; - piglins-guard-chests = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.piglins-guard-chests"; - }; - should-remove-dragon = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.should-remove-dragon"; - }; - max-auto-save-chunks-per-tick = mkOption { - default = 24; - type = types.int; - description = "World-settings.type.options.max-auto-save-chunks-per-tick"; - }; - baby-zombie-movement-modifier = mkOption { - default = 0.5; - type = types.float; - description = "World-settings.type.options.baby-zombie-movement-modifier"; - }; - optimize-explosions = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.optimize-explosions"; - }; - use-vanilla-world-scoreboard-name-coloring = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.use-vanilla-world-scoreboard-name-coloring"; - }; - prevent-moving-into-unloaded-chunks = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.prevent-moving-into-unloaded-chunks"; - }; - count-all-mobs-for-spawning = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.count-all-mobs-for-spawning"; - }; - spawn-limits = { - monster = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.spawn-limits.monster"; - }; - creature = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.spawn-limits.creature"; - }; - ambient = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.spawn-limits.ambient"; - }; - axolotls = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.spawn-limits.axolotls"; - }; - underground_water_creature = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.spawn-limits.underground_water_creature"; - }; - water_creature = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.spawn-limits.water_creature"; - }; - water_ambient = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.spawn-limits.water_ambient"; - }; - }; - ender-dragons-death-always-places-dragon-egg = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.ender-dragons-death-always-places-dragon-egg"; - }; - experience-merge-max-value = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.experience-merge-max-value"; - }; - allow-using-signs-inside-spawn-protection = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.allow-using-signs-inside-spawn-protection"; - }; - wandering-trader = { - spawn-minute-length = mkOption { - default = 1200; - type = types.int; - description = "World-settings.type.options.wandering-trader.spawn-minute-length"; - }; - spawn-day-length = mkOption { - default = 24000; - type = types.int; - description = "World-settings.type.options.wandering-trader.spawn-day-length"; - }; - spawn-chance-failure-increment = mkOption { - default = 25; - type = types.int; - description = "World-settings.type.options.wandering-trader.spawn-chance-failure-increment"; - }; - spawn-chance-min = mkOption { - default = 25; - type = types.int; - description = "World-settings.type.options.wandering-trader.spawn-chance-min"; - }; - spawn-chance-max = mkOption { - default = 75; - type = types.int; - description = "World-settings.type.options.wandering-trader.spawn-chance-max"; - }; - }; - door-breaking-difficulty = { - zombie = mkOption { - default = ["HARD"]; - type = types.listOf (types.enum ["EASY" "NORMAL" "HARD"]); - }; - vindicator = mkOption { - default = ["NORMAL" "HARD"]; - type = types.listOf (types.enum ["EASY" "NORMAL" "HARD"]); - }; - }; - max-growth-height = { - cactus = mkOption { - default = 3; - type = types.int; - description = "World-settings.type.options.max-growth-height.cactus"; - }; - reeds = mkOption { - default = 3; - type = types.int; - description = "World-settings.type.options.max-growth-height.reeds"; - }; - bamboo = { - max = mkOption { - default = 16; - type = types.int; - description = "World-settings.type.options.max-growth-height.bamboo.max"; - }; - min = mkOption { - default = 11; - type = types.int; - description = "World-settings.type.options.max-growth-height.bamboo.min"; - }; - }; - }; - fishing-time-range = { - MinimumTicks = mkOption { - default = 100; - type = types.int; - description = "World-settings.type.options.fishing-time-range.MinimumTicks"; - }; - MaximumTicks = mkOption { - default = 600; - type = types.int; - description = "World-settings.type.options.fishing-time-range.MaximumTicks"; - }; - }; - despawn-ranges = { - monster = { - soft = mkOption { - default = 32; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.soft"; - }; - hard = mkOption { - default = 128; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.hard"; - }; - }; - creature = { - soft = mkOption { - default = 32; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.soft"; - }; - hard = mkOption { - default = 128; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.hard"; - }; - }; - ambient = { - soft = mkOption { - default = 32; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.soft"; - }; - hard = mkOption { - default = 128; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.hard"; - }; - }; - axolotls = { - soft = mkOption { - default = 32; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.soft"; - }; - hard = mkOption { - default = 128; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.hard"; - }; - }; - underground_water_creature = { - soft = mkOption { - default = 32; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.soft"; - }; - hard = mkOption { - default = 128; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.hard"; - }; - }; - water_creature = { - soft = mkOption { - default = 32; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.soft"; - }; - hard = mkOption { - default = 128; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.hard"; - }; - }; - water_ambient = { - soft = mkOption { - default = 32; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.soft"; - }; - hard = mkOption { - default = 64; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.hard"; - }; - }; - misc = { - soft = mkOption { - default = 32; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.soft"; - }; - hard = mkOption { - default = 128; - type = types.int; - description = "World-settings.type.options.despawn-ranges.monster.hard"; - }; - }; - }; - falling-block-height-nerf = mkOption { - default = 0; - type = types.int; - description = "World-settings.type.options.falling-block-height-nerf"; - }; - tnt-entity-height-nerf = mkOption { - default = 0; - type = types.int; - description = "World-settings.type.options.tnt-entity-height-nerf"; - }; - slime-spawn-height = { - swamp-biome = { - maximum = mkOption { - default = 70.0; - type = types.float; - description = "World-settings.type.options.slime-spawn-height.swamp-biome.maximum"; - }; - minimum = mkOption { - default = 50.0; - type = types.float; - description = "World-settings.type.options.slime-spawn-height.swamp-biome.minimum"; - }; - }; - slime-chunk = { - maximum = mkOption { - default = 40.0; - type = types.float; - description = "World-settings.type.options.slime-spawn-height.slime-chunk.maximum"; - }; - }; - }; - frosted-ice = { - enabled = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.frosted-ice.enabled"; - }; - delay = { - min = mkOption { - default = 20; - type = types.int; - description = "World-settings.type.options.frosted-ice.delay.min"; - }; - max = mkOption { - default = 40; - type = types.int; - description = "World-settings.type.options.frosted-ice.delay.max"; - }; - }; - }; - lootables = { - auto-replenish = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.lootables.auto-replenish"; - }; - restrict-player-reloot = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.lootables.restrict-player-reloot"; - }; - reset-seed-on-fill = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.lootables.reset-seed-on-fill"; - }; - max-refills = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.lootables.max-refills"; - }; - refresh-min = mkOption { - default = "12h"; - type = types.str; - description = "World-settings.type.options.lootables.refresh-min"; - }; - refresh-max = mkOption { - default = "2d"; - type = types.str; - description = "World-settings.type.options.lootables.refresh-max"; - }; - }; - filter-nbt-data-from-spawn-eggs-and-related = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.filter-nbt-data-from-spawn-eggs-and-related"; - }; - max-entity-collisions = mkOption { - default = 8; - type = types.int; - description = "World-settings.type.options.max-entity-collisions"; - }; - disable-creeper-lingering-effect = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.disable-creeper-lingering-effect"; - }; - duplicate-uuid-resolver = mkOption { - default = "saferegen"; - type = types.str; - description = "World-settings.type.options.duplicate-uuid-resolver"; - }; - duplicate-uuid-safegen-delete-range = mkOption { - default = 32; - type = types.int; - description = "World-settings.type.options.duplicate-uuid-safegen-delete-range"; - }; - hopper = { - cooldown-when-full = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.hopper.cooldown-when-full"; - }; - disable-move-event = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.hopper.disable-move-event"; - }; - ignore-occluding-blocks = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.hopper.ignore-occluding-blocks"; - }; - }; - mob-effects = { - undead-immune-to-certain-effects = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.mob-effects.undead-immune-to-certain-effects"; - }; - spiders-immune-to-poison-effect = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.mob-effects.spiders-immune-to-poison-effect"; - }; - immune-to-wither-effects = { - wither = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.mob-effects.immune-to-wither-effects.wither"; - }; - wither-skeleton = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.mob-effects.immune-to-wither-effects.wither-skeleton"; - }; - }; - }; - update-pathfinding-on-block-update = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.update-pathfinding-on-block-update"; - }; - phantoms-do-not-spawn-on-creative-players = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.phantoms-do-not-spawn-on-creative-players"; - }; - phantoms-only-attack-insomniacs = mkOption { - default = true; - type = types.bool; - description = "World-settings.type.options.phantoms-only-attack-insomniacs"; - }; - mobs-can-always-pick-up-loot = { - zombies = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.mobs-can-always-pick-up-loot.zombies"; - }; - skeletons = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.mobs-can-always-pick-up-loot.skeletons"; - }; - }; - map-item-frame-cursor-update-interval = mkOption { - default = 10; - type = types.int; - description = "World-settings.type.options.map-item-frame-cursor-update-interval"; - }; - allow-player-cramming-damage = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.allow-player-cramming-damage"; - }; - anticheat = { - obfuscation = { - hide-itemmeta = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.anticheat.obfuscation.hide-itemmeta"; - }; - hide-durability = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.anticheat.obfuscation.hide-durability"; - }; - }; - }; - monster-spawn-max-light-level = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.monster-spawn-max-light-level"; - }; - map-item-frame-cursor-limit = mkOption { - default = 128; - type = types.int; - description = "World-settings.type.options.map-item-frame-cursor-limit"; - }; - feature-seeds = { - generate-random-seeds-for-all = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.feature-seeds.generate-random-seeds-for-all"; - }; - }; - entity-per-chunk-save-limit = { - experience_orb = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.entity-per-chunk-save-limit.experience-orb"; - }; - snowball = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.entity-per-chunk-save-limit.snowball"; - }; - ender_pearl = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.entity-per-chunk-save-limit.ender_pearl"; - }; - arrow = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.entity-per-chunk-save-limit.arrow"; - }; - fireball = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.entity-per-chunk-save-limit.fireball"; - }; - small_fireball = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.entity-per-chunk-save-limit.small_fireball"; - }; - }; - alt-item-despawn-rate = { - enabled = mkOption { - default = false; - type = types.bool; - description = "World-settings.type.options.alt-item-despawn-rate.enabled"; - }; - items = mkOption { - default = {}; - type = types.attrsOf types.int; - description = "World-settings.type.options.alt-item-despawn-rate.items"; - }; - }; - tick-rates = { - sensor = { - villager = { - secondarypoisensor = mkOption { - default = 40; - type = types.int; - description = "World-settings.type.options.tick-rates.sensor.villager.secondarypoisensor"; - }; - }; - }; - behavior = { - villager = { - validatenearbypoi = mkOption { - default = -1; - type = types.int; - description = "World-settings.type.options.tick-rates.behavior.villager.validatenearbypoi"; - }; - }; - }; - }; - }; - }); - }; - }; - whitelist = mkOption { - default = []; - type = types.listOf (types.submodule { - options = { - uuid = mkOption { - type = types.str; - description = "UUID of the whitelist entry"; - }; - name = mkOption { - type = types.str; - description = "Name of the whitelist entry"; - }; - }; - }); - }; - plugins = mkOption { - default = []; - type = types.listOf (types.submodule { - options = { - package = mkOption { - type = types.package; - description = "Package name of the plugin"; - }; - startScript = mkOption { - type = types.nullOr (types.oneOf [types.str types.package]); - description = "Start script of the plugin"; - }; - }; - }); - description = "List of plugins to load"; - }; - }; - config = mkIf cfg.enable { - services.minecraft.properties.extraConfig = with cfg.properties; - lib.mkDefault { - inherit allow-flight allow-nether broadcast-console-to-ops broadcast-rcon-to-ops; - inherit difficulty enable-command-block enable-jmx-monitoring enable-rcon sync-chunk-writes; - inherit enable-status enable-query entity-broadcast-range-percentage force-gamemode; - inherit function-permission-level gamemode generate-structures generator-settings hardcore; - inherit level-name level-seed level-type max-players max-tick-time motd; - inherit network-compression-threshold online-mode permission-level player-idle-timeout; - inherit prevent-proxy-connections pvp rate-limit resource-pack resource-pack-prompt; - inherit resource-pack-sha1 require-resource-pack server-ip server-port; - inherit simulation-distance snooper-enabled spawn-animals spawn-monsters spawn-npcs; - inherit spawn-protection use-native-transport view-distance white-list enforce-whitelist; - - "query.port" = query-port; - "rcon.port" = rcon-port; - }; - systemd.services.minecraft = { - description = "Minecraft Server"; - after = ["network.target"]; - wantedBy = ["multi-user.target"]; - path = [papermc]; - preStart = let - plugins = - builtins.map - (plugin: '' - cp ${plugin.package} plugins - ${ - if plugin.startScript != null - then '' - ${plugin.startScript} - '' - else "" - } - '') - cfg.plugins; - in '' - cd $HOME - # Agree to the EULA - echo "eula=true" > eula.txt - # Update the server properties - cat ${serverProperties} > server.properties - ${ - if cfg.properties.rcon-password-file != null - then '' - echo "rcon.password=$(cat ${builtins.toString cfg.properties.rcon-password-file})" >> server.properties - '' - else "" - } - # Update the whitelist - cat ${whitelistJson} > whitelist.json - # Update the bukkit yml - cat ${bukkitYaml} > bukkit.yml - # Update the spigot yml - cat ${spigotYaml} > spigot.yml - # Update the paper yml - cat ${paperYaml} > paper.yml - # Update the plugins - mkdir -p plugins - rm -rf plugins/*.jar - ${builtins.toString plugins} - ''; - serviceConfig = { - Type = "simple"; - User = "minecraft"; - Group = "minecraft"; - WorkingDirectory = cfg.stateDir; - ExecStart = "${papermc}/bin/minecraft-server -Xms8G -Xmx8G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true"; - Restart = "always"; - RuntimeDirectory = "minecraft"; - RuntimeDirectoryMode = "0755"; - UMask = "0027"; - ReadWritePaths = [cfg.stateDir]; # Grant access to the state directory - CapabilityBoundingSet = ""; - # Security - NoNewPrivileges = true; - # Sandboxing - ProtectSystem = "strict"; - ProtectHome = true; - PrivateTmp = true; - PrivateDevices = true; - PrivateUsers = true; - ProtectHostname = true; - ProtectClock = true; - ProtectKernelTunables = true; - ProtectKernelModules = true; - ProtectKernelLogs = true; - ProtectControlGroups = true; - RestrictAddressFamilies = ["AF_UNIX AF_INET AF_INET6"]; - LockPersonality = true; - RestrictRealtime = true; - RestrictSUIDSGID = true; - PrivateMounts = true; - }; - environment = { - USER = "minecraft"; - HOME = cfg.stateDir; - }; - }; - users.users.minecraft = { - description = "Minecraft Server"; - home = cfg.stateDir; - useDefaultShell = true; - group = "minecraft"; - isSystemUser = true; - }; - users.groups.minecraft = {}; - systemd.tmpfiles.rules = [ - "d '${cfg.stateDir}' 0750 minecraft minecraft - -" - ]; - }; -} diff --git a/modules/minecraft/vault.nix b/modules/minecraft/vault.nix deleted file mode 100644 index 9eed7904..00000000 --- a/modules/minecraft/vault.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - config, - lib, - options, - pkgs, - ... -}: -with lib; let - vault = pkgs.callPackage ../../packages/minecraft/vault.nix {}; - cfg = config.services.minecraft.vault; - opt = options.services.minecraft.vault; -in { - options.services.minecraft.vault.enable = mkOption { - default = false; - type = types.bool; - description = "Enable Vault"; - }; - config = mkIf cfg.enable { - services.minecraft.plugins = [ - { - package = vault; - startScript = pkgs.writeScript "dummy" ""; - } - ]; - }; -} diff --git a/modules/nix/autoupdater.nix b/modules/nix/autoupdater.nix new file mode 100644 index 00000000..03a505d0 --- /dev/null +++ b/modules/nix/autoupdater.nix @@ -0,0 +1,116 @@ +{ + config, + pkgs, + lib, + ... +}: +let + cfg = config.nix.auto-update; +in +with lib; +{ + options.nix.auto-update = { + enable = mkEnableOption "enable automatic updates"; + reboot = mkEnableOption "Reboot if kernel change"; + hydraServer = mkOption { + type = types.str; + description = "Location of hydra server"; + default = "https://hydra.chir.rs"; + }; + project = mkOption { + type = types.str; + description = "Project name to use"; + default = "flakes"; + }; + jobset = mkOption { + type = types.str; + description = "Jobset name to use"; + default = "nixos-config-rewrite"; + }; + job = mkOption { + type = types.str; + description = "Job name to use"; + default = "nixosConfigurations.${config.networking.hostName}"; + defaultText = literalExpression ''"nixosConfigurations.''${config.networking.hostName}"''; + }; + specialisation = mkOption { + type = types.nullOr types.str; + description = "specialisation to switch into"; + default = null; + }; + }; + + config.nix.auto-update.enable = mkDefault config.nix.enable; + config.nix.auto-update.reboot = mkDefault true; + config.systemd.services.nixos-upgrade = mkIf config.nix.enable { + description = "NixOS Upgrade"; + restartIfChanged = false; + unitConfig.X-StopOnRemoval = false; + + wants = [ "network-online.target" ]; + after = [ "network-online.target" ]; + + serviceConfig.Type = "oneshot"; + + script = + let + output = + if cfg.specialisation == null then "$output" else "$output/specialisation/${cfg.specialisation}"; + switchToConfiguration = "${output}/bin/switch-to-configuration"; + in + '' + #!${pkgs.bash}/bin/bash + set -euxo pipefail + build=$(${pkgs.curl}/bin/curl -H "accept: application/json" -G ${cfg.hydraServer}/api/latestbuilds -d "nr=10" -d "project=${cfg.project}" -d "jobset=${cfg.jobset}" -d "job=${cfg.job}" | ${pkgs.jq}/bin/jq -r '[.[]|select(.buildstatus==0)][0].id') + doc=$(${pkgs.curl}/bin/curl -H "accept: application/json" ${cfg.hydraServer}/build/$build) + drvname=$(echo $doc | ${pkgs.jq}/bin/jq -r '.drvpath') + output=$(${pkgs.nix}/bin/nix-store -r $drvname) + ${pkgs.nix}/bin/nix-env -p /nix/var/nix/profiles/system --set $output + ${ + if cfg.reboot then + '' + ${switchToConfiguration} boot + booted="$(${pkgs.coreutils}/bin/readlink /run/booted-system/{kernel,kernel-modules})" + built="$(${pkgs.coreutils}/bin/readlink ${output}/{kernel,kernel-modules})" + if [ "$booted" = "$built" ]; then + ${switchToConfiguration} switch + else + ${pkgs.systemd}/bin/shutdown -r +1 + fi + exit + '' + else + '' + ${switchToConfiguration} switch + '' + } + ''; + }; + + config.systemd.timers.nixos-upgrade = { + enable = cfg.enable; + description = "Automatically update nixos"; + requires = [ "nixos-upgrade.service" ]; + wants = [ "network-online.target" ]; + after = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; + timerConfig = { + OnUnitActiveSec = "30min"; + RandomizedDelaySec = "1h"; + }; + }; + config.assertions = [ + { + assertion = cfg.enable -> config.nix.enable; + message = "Auto updating will only work when nix itself is enabled."; + } + { + assertion = (cfg.specialisation != null) -> config.isSpecialisation; + message = "Automatic update switching to specialisation is only allowed in specialisations"; + } + { + assertion = config.isSpecialisation -> (cfg.specialisation != null); + message = "Specifying the specialization name is required for autoupdate to work!"; + } + ]; +} diff --git a/modules/nix/build-server.nix b/modules/nix/build-server.nix new file mode 100644 index 00000000..acc42170 --- /dev/null +++ b/modules/nix/build-server.nix @@ -0,0 +1,118 @@ +{ + config, + lib, + ... +}: +with lib; +{ + config = mkIf (!config.isInstaller) { + nix.distributedBuilds = true; + nix.buildMachines = mkMerge [ + [ + { + hostName = "build-aarch64"; + systems = [ + "aarch64-linux" + "riscv32-linux" + "riscv64-linux" + ]; + maxJobs = 4; + speedFactor = 1; + supportedFeatures = [ + "nixos-test" + "benchmark" + "ca-derivations" + "gccarch-armv8-a" + "gccarch-armv8.1-a" + "gccarch-armv8.2-a" + "big-parallel" + ]; + } + ] + [ + { + hostName = "build-nas"; + systems = [ + "i686-linux" + "x86_64-linux" + "armv7l-linux" + "powerpc-linux" + "powerpc64-linux" + "powerpc64le-linux" + "wasm32-wasi" + "riscv32-linux" + "riscv64-linux" + ]; + maxJobs = 12; + speedFactor = 1; + supportedFeatures = [ + "kvm" + "nixos-test" + "big-parallel" + "benchmark" + "gccarch-znver1" + "gccarch-skylake" + "ca-derivations" + ]; + } + ] + (mkIf (config.networking.hostName != "rainbow-resort") [ + { + hostName = "build-rainbow-resort"; + systems = [ + "i686-linux" + "x86_64-linux" + "armv7l-linux" + "powerpc-linux" + "powerpc64-linux" + "powerpc64le-linux" + "wasm32-wasi" + "riscv32-linux" + "riscv64-linux" + ]; + maxJobs = 16; + speedFactor = 3; + supportedFeatures = [ + "kvm" + "nixos-test" + "big-parallel" + "benchmark" + "gccarch-skylake-avx512" + "gccarch-znver3" + "gccarch-znver2" + "gccarch-znver1" + "gccarch-skylake" + "ca-derivations" + ]; + } + ]) + (mkIf (config.networking.hostName != "not522") [ + { + hostName = "build-riscv"; + systems = [ + "riscv32-linux" + "riscv64-linux" + ]; + maxJobs = 4; + speedFactor = 2; + supportedFeatures = [ + "nixos-test" + "big-parallel" + "benchmark" + "ca-derivations" + # There are many more combinations but i simply do not care lol + "gccarch-rv64gc_zba_zbb" + "gccarch-rv64gc_zba" + "gccarch-rv64gc_zbb" + "gccarch-rv64gc" + "gccarch-rv32gc_zba_zbb" + "gccarch-rv32gc_zba" + "gccarch-rv32gc_zbb" + "gccarch-rv32gc" + "native-riscv" + ]; + } + ]) + ]; + }; +} diff --git a/modules/nix/default.nix b/modules/nix/default.nix new file mode 100644 index 00000000..3ded54cd --- /dev/null +++ b/modules/nix/default.nix @@ -0,0 +1,33 @@ +{ + config, + lib, + ... +}: +with lib; +{ + imports = [ + ./link-inputs.nix + ./lix.nix + ./autoupdater.nix + ./build-server.nix + ]; + nix.settings = { + substituters = mkMerge [ + [ "https://attic.chir.rs/chir-rs/" ] + (mkIf (!config.isInstaller) [ "https://hydra.int.chir.rs" ]) + (mkIf config.isInstaller [ "https://hydra.chir.rs" ]) + ]; + trusted-public-keys = [ + "nixcache:8KKuGz95Pk4UJ5W/Ni+pN+v+LDTkMMFV4yrGmAYgkDg=" + "hydra.nixos.org-1:CNHJZBh9K4tP3EKF6FkkgeVYsS3ohTl+oS0Qa8bezVs=" + "chir-rs:rzK1Czm3RqBbZLnXYrLM6JyOhfr6Z/8lhACIPO/LNFQ=" + ]; + auto-optimise-store = true; + experimental-features = "nix-command flakes ca-derivations"; + }; + nix.gc = { + automatic = config.nix.enable; + dates = "weekly"; + options = "--delete-older-than 7d"; + }; +} diff --git a/modules/nix/link-inputs.nix b/modules/nix/link-inputs.nix new file mode 100644 index 00000000..9cbbe224 --- /dev/null +++ b/modules/nix/link-inputs.nix @@ -0,0 +1,24 @@ +{ + lib, + pureInputs, + config, + ... +}: +let + # Taken from https://github.com/gytis-ivaskevicius/flake-utils-plus/blob/master/lib/options.nix + inherit (lib) filterAttrs mapAttrs'; + flakes = filterAttrs ( + name: value: (value ? outputs) && (name != "self") && (name != "nixos-config") + ) pureInputs; + nixRegistry = builtins.mapAttrs (name: v: { flake = v; }) flakes; +in +{ + nix.registry = nixRegistry; + environment.etc = mapAttrs' (name: value: { + name = "nix/inputs/${name}"; + value = lib.mkIf config.nix.enable { + source = value.outPath; + }; + }) flakes; + nix.nixPath = [ "/etc/nix/inputs" ]; +} diff --git a/modules/nix/lix.nix b/modules/nix/lix.nix new file mode 100644 index 00000000..3db7d6d6 --- /dev/null +++ b/modules/nix/lix.nix @@ -0,0 +1,15 @@ +{ + lix-module, + inTester, + config, + pkgs, + lib, + ... +}: +{ + imports = if inTester then [ ] else [ lix-module.nixosModules.default ]; + + environment.systemPackages = lib.mkIf config.nix.enable [ + pkgs.git + ]; +} diff --git a/modules/riscv.nix b/modules/riscv.nix new file mode 100644 index 00000000..8043d997 --- /dev/null +++ b/modules/riscv.nix @@ -0,0 +1,13 @@ +{ + system, + riscv-overlay, + ... +}: +if system == "riscv64-linux" then + { + nixpkgs.overlays = [ + riscv-overlay.overlays.default + ]; + } +else + { } diff --git a/modules/secrets/sops.nix b/modules/secrets/sops.nix new file mode 100644 index 00000000..c35f18e3 --- /dev/null +++ b/modules/secrets/sops.nix @@ -0,0 +1,14 @@ +{ + sops-nix, + ... +}: +{ + imports = [ + "${sops-nix}/modules/sops" + ]; + sops.age = { + sshKeyPaths = [ + "/persistent/etc/ssh/ssh_host_ed25519_key" + ]; + }; +} diff --git a/modules/tc-cake.nix b/modules/tc-cake.nix deleted file mode 100644 index 70ab00a3..00000000 --- a/modules/tc-cake.nix +++ /dev/null @@ -1,186 +0,0 @@ -# Taken from https://github.com/mrobbetts/nixos_extra_modules/blob/main/tc_cake.nix -{ - config, - lib, - pkgs, - ... -}: -with lib; let - cfg = config.networking.tc_cake; - - generateUnit = name: opts: - nameValuePair "tc_cake-${name}" { - description = "AQM (Cake) rules for ${name}."; - bindsTo = ["sys-subsystem-net-devices-${name}.device"]; - after = ["sys-subsystem-net-devices-${name}.device" "network-pre.target"]; - requires = ["sys-subsystem-net-devices-${name}.device"]; - - before = ["network.target"]; - wantedBy = ["sys-subsystem-net-devices-${name}.device"]; - - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - ExecStart = pkgs.writeTextFile { - name = "tc-${name}-start"; - executable = true; - text = '' - #! ${pkgs.runtimeShell} -e - - # Offloading. - ${optionalString opts.disableOffload '' - ${pkgs.ethtool}/bin/ethtool -K ${name} gro off gso off tso off - ''} - - # Make sure that the cake is reset - ${optionalString (opts.shapeEgress.bandwidth != null) '' - ${pkgs.iproute2}/bin/tc qdisc del dev ${name} root || true - ${pkgs.iproute2}/bin/tc qdisc del dev ${name} ingress || true - ''} - ${optionalString (opts.shapeIngress.bandwidth != null) '' - ${pkgs.iproute2}/bin/tc qdisc del dev ${opts.shapeIngress.ifb} root || true - ${pkgs.iproute2}/bin/tc qdisc del dev ${opts.shapeIngress.ifb} ingress || true - ''} - - # Ingress control. - ${optionalString (opts.shapeIngress.bandwidth != null) '' - ${pkgs.iproute2}/bin/tc qdisc add dev ${name} handle ffff: ingress - ${pkgs.iproute2}/bin/ip link add name ${opts.shapeIngress.ifb} type ifb || true - ${pkgs.iproute2}/bin/ip link set ${opts.shapeIngress.ifb} up - ${pkgs.iproute2}/bin/tc qdisc add dev ${opts.shapeIngress.ifb} root cake bandwidth ${opts.shapeIngress.bandwidth} ingress - ${pkgs.iproute2}/bin/tc filter add dev ${name} parent ffff: protocol all u32 match u32 0 0 action mirred egress redirect dev ${opts.shapeIngress.ifb} - ''} - - # Egress control. - ${optionalString (opts.shapeEgress.bandwidth != null) '' - ${pkgs.iproute2}/bin/tc qdisc add dev ${name} root cake bandwidth ${opts.shapeEgress.bandwidth} ${opts.shapeEgress.extraArgs} - ''} - ''; - }; - - ExecStop = pkgs.writeTextFile { - name = "tc-${name}-stop"; - executable = true; - text = '' - #! ${pkgs.runtimeShell} -e - - # Ingress control. - ${optionalString (opts.shapeIngress.bandwidth != null) '' - ${pkgs.iproute2}/bin/tc qdisc del dev ${opts.shapeIngress.ifb} root - ${pkgs.iproute2}/bin/tc qdisc del dev ${name} parent ffff: - ''} - - # Egress control. - ${optionalString (opts.shapeEgress.bandwidth != null) '' - ${pkgs.iproute2}/bin/tc qdisc del dev ${name} root - ''} - - # Offloading. - ${optionalString opts.disableOffload '' - ${pkgs.ethtool}/bin/ethtool -K ${name} gro on gso on tso on - ''} - ''; - }; - }; - - restartIfChanged = true; - }; -in { - ###### interface - - options = { - networking.tc_cake = mkOption { - default = {}; - type = types.attrsOf (types.submodule { - options = { - disableOffload = mkOption { - default = false; - type = types.bool; - description = '' - Enabling this will ensure all hardware offloading (to the NIC) is disabled. - ''; - }; - - shapeEgress = mkOption { - type = types.submodule { - options = { - bandwidth = mkOption { - default = null; - type = types.nullOr types.str; - example = "16mbit"; - description = '' - A string describing the available outgoing bandwidth, compatible with `tc`. - ''; - }; - - extraArgs = mkOption { - default = ""; - type = types.str; - example = "nat overhead 18 mpu 64 noatm ack-filter"; - description = '' - Additional arguments/flags for the cake qdisc creation. - ''; - }; - }; - }; - default = { - bandwidth = null; - extraArgs = ""; - }; - description = '' - Submodule describing how to shape egress traffic. - ''; - }; - - shapeIngress = mkOption { - type = types.submodule { - options = { - bandwidth = mkOption { - default = null; - type = types.nullOr types.str; - example = "75mbit"; - description = '' - A string describing the available incoming bandwidth, compatible with `tc`. - ''; - }; - - ifb = mkOption { - default = "ifb0"; - type = types.str; - example = "ifb0"; - description = '' - The IFB device to use during ingress shaping. Must be unique to this interface. - ''; - }; - }; - }; - default = { - bandwidth = null; - ifb = "ifb0"; - }; - description = '' - Submodule describing how to shape ingress traffic. - ''; - }; - }; - }); - description = '' - The list of traffic control commands, one entry per interface. - ''; - }; - }; - - ###### Implementation - - config = mkIf (cfg != {}) { - # systemd.services = mapAttrs generateUnit cfg; - systemd.services = listToAttrs (mapAttrsToList generateUnit cfg); - - boot.kernelModules = [ - "ifb" - "sch_cake" - "sch_red" - "mirred" - ]; - }; -} diff --git a/overlays/default.nix b/overlays/default.nix deleted file mode 100644 index bde453ab..00000000 --- a/overlays/default.nix +++ /dev/null @@ -1,74 +0,0 @@ -inputs: system: self: prev: let - inherit (inputs) nixpkgs element-web; - common = with nixpkgs.legacyPackages.${system}; { - fcitx5-table-extra = prev.fcitx5-table-extra.overrideAttrs (super: { - patches = - super.patches - or [] - ++ [ - ../extra/fcitx-table-extra.patch - ]; - }); - emoji-lotte = self.callPackage ../packages/art/emoji/lotte {}; - emoji-volpeon-blobfox = self.callPackage ../packages/art/emoji/volpeon/blobfox.nix {}; - emoji-volpeon-blobfox-flip = self.callPackage ../packages/art/emoji/volpeon/blobfox_flip.nix {}; - emoji-volpeon-bunhd = self.callPackage ../packages/art/emoji/volpeon/bunhd.nix {}; - emoji-volpeon-bunhd-flip = self.callPackage ../packages/art/emoji/volpeon/bunhd_flip.nix {}; - emoji-volpeon-drgn = self.callPackage ../packages/art/emoji/volpeon/drgn.nix {}; - emoji-volpeon-fox = self.callPackage ../packages/art/emoji/volpeon/fox.nix {}; - emoji-volpeon-gphn = self.callPackage ../packages/art/emoji/volpeon/gphn.nix {}; - emoji-volpeon-raccoon = self.callPackage ../packages/art/emoji/volpeon/raccoon.nix {}; - emoji-volpeon-vlpn = self.callPackage ../packages/art/emoji/volpeon/vlpn.nix {}; - emoji-volpeon-neofox = self.callPackage ../packages/art/emoji/volpeon/neofox.nix {}; - emoji-volpeon-neocat = self.callPackage ../packages/art/emoji/volpeon/neocat.nix {}; - emoji-volpeon-floof = self.callPackage ../packages/art/emoji/volpeon/floof.nix {}; - emoji-rosaflags = self.callPackage ../packages/art/emoji/rosaflags.nix {}; - emoji-raccoon = self.callPackage ../packages/art/emoji/rosaflags.nix {}; - emoji-caro = self.callPackage ../packages/art/emoji/caro {}; - lotte-art = self.callPackage ../packages/art/lotte {}; - alco-sans = self.callPackage ../packages/fonts/kreative/alco-sans.nix {}; - constructium = self.callPackage ../packages/fonts/kreative/constructium.nix {}; - fairfax = self.callPackage ../packages/fonts/kreative/fairfax.nix {}; - fairfax-hd = self.callPackage ../packages/fonts/kreative/fairfax-hd.nix {}; - kreative-square = self.callPackage ../packages/fonts/kreative/kreative-square.nix {}; - nasin-nanpa = self.callPackage ../packages/fonts/nasin-nanpa {}; - matrix-media-repo = self.callPackage ../packages/matrix/matrix-media-repo {}; - mautrix-discord = self.callPackage ../packages/matrix/mautrix-discord {}; - mautrix-whatsapp = self.callPackage ../packages/matrix/mautrix-whatsapp {}; - mautrix-telegram = self.callPackage ../packages/matrix/mautrix-telegram {}; - mautrix-slack = self.callPackage ../packages/matrix/mautrix-slack {}; - python-mautrix = self.python3Packages.callPackage ../packages/python/mautrix.nix {}; - python-tulir-telethon = self.python3Packages.callPackage ../packages/python/tulir-telethon.nix {}; - papermc = self.callPackage ../packages/minecraft/papermc {}; - python-plover-stroke = self.python3Packages.callPackage ../packages/plover/plover-stroke.nix {}; - python-rtf-tokenize = self.python3Packages.callPackage ../packages/python/rtf-tokenize.nix {}; - plover = self.python311Packages.callPackage ../packages/plover/plover {}; - plover-plugins-manager = self.python311Packages.callPackage ../packages/plover/plover-plugins-manager.nix {}; - python-simplefuzzyset = self.python311Packages.callPackage ../packages/python/simplefuzzyset.nix {}; - plover-plugin-emoji = self.python311Packages.callPackage ../packages/plover/plover-emoji.nix {}; - plover-plugin-tapey-tape = self.python311Packages.callPackage ../packages/plover/plover-tapey-tape.nix {}; - plover-plugin-yaml-dictionary = self.python311Packages.callPackage ../packages/plover/plover-yaml-dictionary.nix {}; - plover-plugin-python-dictionary = self.python311Packages.callPackage ../packages/plover/plover-python-dictionary.nix {}; - plover-plugin-stenotype-extended = self.python311Packages.callPackage ../packages/plover/plover-stenotype-extended.nix {}; - plover-plugin-machine-hid = self.python311Packages.callPackage ../packages/plover/plover-machine-hid.nix {}; - plover-plugin-rkb1-hid = self.python311Packages.callPackage ../packages/plover/plover-rkb1-hid.nix {}; - plover-plugin-dotool-output = self.python311Packages.callPackage ../packages/plover/plover-dotool-output.nix {}; - plover-plugin-dict-commands = self.python311Packages.callPackage ../packages/plover/plover-dict-commands.nix {}; - plover-plugin-last-translation = self.python311Packages.callPackage ../packages/plover/plover-last-translation.nix {}; - plover-plugin-modal-dictionary = self.python311Packages.callPackage ../packages/plover/plover-modal-dictionary.nix {}; - plover-plugin-stitching = self.python311Packages.callPackage ../packages/plover/plover-stitching.nix {}; - plover-plugin-lapwing-aio = self.python311Packages.callPackage ../packages/plover/plover-lapwing-aio.nix {}; - plover-dict-didoesdigital = self.callPackage ../packages/plover/didoesdigital-dictionary.nix {}; - miifox-net = self.python3Packages.callPackage ../packages/web/miifox-net.nix {}; - asar-asm = self.callPackage ../packages/compiler/asar {}; - bsnes-plus = self.libsForQt5.callPackage ../packages/emulator/bsnes-plus {}; - yiffstash = self.python3Packages.callPackage ../packages/python/yiffstash.nix {}; - mgba-dev = self.libsForQt5.callPackage ../packages/emulator/mgba-dev {}; - }; - perSystem = { - aarch64-linux = { - # linux-devterm = self.callPackage ../packages/linux/devterm/kernel.nix {}; - }; - }; -in - common // perSystem.${system} or {} diff --git a/packages/art/emoji/caro/default.nix b/packages/art/emoji/caro/default.nix deleted file mode 100644 index 99b772f9..00000000 --- a/packages/art/emoji/caro/default.nix +++ /dev/null @@ -1,44 +0,0 @@ -{ - fetchFromGitHub, - stdenvNoCC, - imagemagick, - lib, - callPackage, - pngquant, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - stdenvNoCC.mkDerivation { - pname = "caroline-stickers"; - version = source.date; - src = fetchFromGitHub { - owner = "CarolineHusky"; - repo = "CarolineStickers"; - inherit (source) rev sha256; - }; - nativeBuildInputs = [ - imagemagick - pngquant - ]; - buildPhase = '' - rm credits_*.png - - mv "bluefox_thanks I hate it.png" "bluefox_thanks_I_hate_it.png" - - mogrify -resize 256x256\> *.png - - find . -type f -name '*.png' -execdir ${../../../lib/crushpng.sh} {} {}.new 50000 \; - for f in $(find . -type f -name '*.new'); do - mv $f ${"$"}{f%.new} - done - ''; - installPhase = '' - mkdir $out - mv *.png $out - ''; - meta = { - description = "CarolineHusky stickers"; - license = lib.licenses.cc-by-nc-sa-40; - }; - passthru.updateScript = [../../../scripts/update-git.sh "https://github.com/CarolineHusky/CarolineStickers" "art/emoji/caro/source.json"]; - } diff --git a/packages/art/emoji/caro/source.json b/packages/art/emoji/caro/source.json deleted file mode 100644 index 43274f3c..00000000 --- a/packages/art/emoji/caro/source.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/CarolineHusky/CarolineStickers", - "rev": "bd717e1c83d24be58612157ffd67ee92fffa8178", - "date": "2022-04-01T14:18:07+02:00", - "path": "/nix/store/g7cq22k0q1fhv6jajzmy2k0sl1xmz7n5-CarolineStickers", - "sha256": "14wgn1jdp698anbkgilf6x90vgkwgls4c17jaa9qqs3fxrj44ij3", - "hash": "sha256-Q0ZCZO5uaIyTUvIERjR9fL4NUjeOxjeXVSiZ22Swj5M=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/art/emoji/lotte/default.nix b/packages/art/emoji/lotte/default.nix deleted file mode 100644 index aea5723c..00000000 --- a/packages/art/emoji/lotte/default.nix +++ /dev/null @@ -1,268 +0,0 @@ -{ - callPackage, - stdenvNoCC, - libjxl, - imagemagick, - lib, -}: let - crushpng = callPackage ../../../lib/crushpng.nix {}; - lotte-art = callPackage ../../lotte {}; - resized = name: - stdenvNoCC.mkDerivation { - inherit name; - src = lotte-art; - nativeBuildInputs = [libjxl imagemagick]; - buildPhase = '' - convert $name.jxl -scale 256x256\> $name-scaled.png - ''; - installPhase = '' - cp $name-scaled.png $out - ''; - }; - lnEmojiScript = f: '' - ln -s ${crushpng { - name = f.from; - src = resized f.from; - maxsize = 50000; - }} $out/${f.to}.png - ''; - emoji = [ - { - from = "2019-10-05-dae-lotteheart"; - to = "lotteheart"; - } - { - from = "2019-10-05-dae-lottehearts"; - to = "lottehearts"; - } - { - from = "2019-10-05-dae-lottepet"; - to = "lottepet"; - } - { - from = "2019-11-17-workerq-lottetrash"; - to = "lottetrashcan"; - } - { - from = "2020-01-05-dae-lotteweary"; - to = "lotteweary"; - } - { - from = "2020-01-17-workerq-lotteblep"; - to = "lotteblep"; - } - { - from = "2020-01-17-workerq-lottecoffee"; - to = "lottecoffee"; - } - { - from = "2020-01-17-workerq-lottecookie"; - to = "lottecookie"; - } - { - from = "2020-01-17-workerq-lottehug"; - to = "lottehug"; - } - { - from = "2020-01-17-workerq-lottesmile"; - to = "lottesmile"; - } - { - from = "2021-03-23-sammythetanuki-lottegoodsalt"; - to = "lottegoods"; - } - { - from = "2021-03-26-zomlette-agender-screem-tp"; - to = "lottescreem"; - } - { - from = "2021-04-21-sammythetanuki-lottecoffeemachine"; - to = "lottecoffeemachine"; - } - { - from = "2021-05-03-sammythetanuki-lotteflatfuck"; - to = "lotteflatfuck"; - } - { - from = "2021-05-03-sammythetanuki-lottehug"; - to = "lottehug2"; - } - { - from = "2021-05-03-sammythetanuki-lottesnuggle"; - to = "lottesnuggle"; - } - { - from = "2021-05-03-sammythetanuki-lottetrash"; - to = "lottetrashwave"; - } - { - from = "2021-05-04-mizuki-lotteshocked-sticker"; - to = "lotteshocked"; - } - { - from = "2021-05-29-sammythetanuki-lottepizza"; - to = "lottepizza"; - } - { - from = "2021-07-02-sammythetanuki-lottegrab"; - to = "lottegrab"; - } - { - from = "2021-07-16-sammythetanuki-lottecarostacc"; - to = "lottecarostacc"; - } - { - from = "2021-08-03-sammythetanuki-everyonesproblem"; - to = "lotteveryonesproblem"; - } - { - from = "2021-08-20-mizuki-peekabu-sticker"; - to = "lottepeekabu"; - } - { - from = "2021-09-13-sammythetanuki-plushhug"; - to = "lotteplushhug"; - } - { - from = "2021-10-28-pulexart-me-climbTree"; - to = "lotteclimbtree"; - } - { - from = "2021-10-28-pulexart-me-dab"; - to = "lottedab"; - } - { - from = "2021-10-28-pulexart-me-eatingPopcorn"; - to = "lotteeatingpopcorn"; - } - { - from = "2021-10-28-pulexart-me-flirt"; - to = "lotteflirt"; - } - { - from = "2021-10-28-pulexart-me-garbage"; - to = "lottegarbage"; - } - { - from = "2021-10-28-pulexart-me-heartAce"; - to = "lotteheartace"; - } - { - from = "2021-10-28-pulexart-me-heartAgender"; - to = "lotteheartagender"; - } - { - from = "2021-10-28-pulexart-me-heartLGBT"; - to = "lotteheartlgbt"; - } - { - from = "2021-10-28-pulexart-me-heartNonbinary"; - to = "lotteheartnonbinary"; - } - { - from = "2021-10-28-pulexart-me-heartNormal"; - to = "lotteheartnormal"; - } - { - from = "2021-10-28-pulexart-me-heartRaccoongender"; - to = "lotteheartraccoongender"; - } - { - from = "2021-10-28-pulexart-me-heartTrans"; - to = "lottehearttrans"; - } - { - from = "2021-10-28-pulexart-me-money"; - to = "lottemoney"; - } - { - from = "2021-10-28-pulexart-me-noU"; - to = "lottenou"; - } - { - from = "2021-10-28-pulexart-me-plotting"; - to = "lotteplotting"; - } - { - from = "2021-10-28-pulexart-me-praise"; - to = "lottepraise"; - } - { - from = "2021-10-28-pulexart-me-robber"; - to = "lotterobber"; - } - { - from = "2021-10-28-pulexart-me-sleepy"; - to = "lottesleepy"; - } - { - from = "2021-10-28-pulexart-me-sneak"; - to = "lottesneak"; - } - { - from = "2021-10-28-pulexart-me-trash"; - to = "lottetrashcan2"; - } - { - from = "2021-10-28-pulexart-me-washingFood"; - to = "lottewashingfood"; - } - { - from = "2021-11-14-sammythetanuki-lottepat"; - to = "lottepat"; - } - { - from = "2021-12-18-sammythetanuki-lottecookies"; - to = "lottecookies"; - } - { - from = "2021-12-20-sammythetanuki-lottecrimmus"; - to = "lottecrimmus"; - } - { - from = "2022-01-08-sammythetanuki-lotteangry"; - to = "lotteangry"; - } - { - from = "2022-01-08-sammythetanuki-lottepleading"; - to = "lottepleading"; - } - { - from = "2022-02-20-sammythetanuki-lottehacking-notext"; - to = "lottehacking"; - } - { - from = "2022-05-05-sammythetanuki-lotteass"; - to = "lotteass"; - } - { - from = "2022-06-13-sammythetanuki-lotteplushnothoughts"; - to = "lotteplushnothoughts"; - } - { - from = "2022-07-14-sammythetanuki-maybecringe-transparent"; - to = "lottemaybecringe"; - } - { - from = "2022-11-06-pulexart-me-heartTherian"; - to = "lottehearttherian"; - } - { - from = "2022-11-10-mizuki-peekabu"; - to = "lottepeekabudiaper"; - } - ]; -in - stdenvNoCC.mkDerivation { - name = "lotte-emoji"; - dontUnpack = true; - buildPhase = "true"; - installPhase = '' - mkdir $out - ${toString (map lnEmojiScript emoji)} - ''; - meta = { - description = "Stickers and emoji for the fediverse"; - license = lib.licenses.cc-by-nc-sa-40; - }; - } diff --git a/packages/art/emoji/raccoon.json b/packages/art/emoji/raccoon.json deleted file mode 100644 index b17f5363..00000000 --- a/packages/art/emoji/raccoon.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "raccoon": { - "description": "by https://raccoon.quest", - "homepage": "https://raccoon.quest", - "src": "https://raccoon.quest/raccoon_emojis.7z", - "src_sha256": "b1dbe72cc6cfcc943dc35ba21c192585263a5e59e6af4e936ba14252ecb1d73b", - "license": "CC BY-NC-SA 4.0" - } -} diff --git a/packages/art/emoji/raccoon.nix b/packages/art/emoji/raccoon.nix deleted file mode 100644 index 24f5689b..00000000 --- a/packages/art/emoji/raccoon.nix +++ /dev/null @@ -1,5 +0,0 @@ -{callPackage}: -callPackage ../../lib/mkPleromaEmoji.nix {} rec { - name = "raccoon"; - manifest = ./${name}.json; -} diff --git a/packages/art/emoji/rosaflags.json b/packages/art/emoji/rosaflags.json deleted file mode 100644 index e4b07109..00000000 --- a/packages/art/emoji/rosaflags.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "rosaflags": { - "description": "Edit by @braid@alpaka.social", - "files": "drgn.json", - "homepage": "https://volpeon.ink/emojis/drgn/", - "src": "https://static.eyskens.me/rosaflags.tar.gz", - "src_sha256": "bf1a3006310919a0b512e6b558ae5003f0f19e28c9dbc9e8a379d3641b067af3", - "license": "CC BY-NC-SA 4.0" - } -} diff --git a/packages/art/emoji/rosaflags.nix b/packages/art/emoji/rosaflags.nix deleted file mode 100644 index 5346a203..00000000 --- a/packages/art/emoji/rosaflags.nix +++ /dev/null @@ -1,5 +0,0 @@ -{callPackage}: -callPackage ../../lib/mkPleromaEmoji.nix {} rec { - name = "rosaflags"; - manifest = ./${name}.json; -} diff --git a/packages/art/emoji/volpeon/blobfox.json b/packages/art/emoji/volpeon/blobfox.json deleted file mode 100644 index d628dc28..00000000 --- a/packages/art/emoji/volpeon/blobfox.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "blobfox": { - "description": "Like Blobcat, but with foxes", - "files": "blobfox.json", - "homepage": "https://volpeon.ink/emojis/blobfox/", - "src": "https://volpeon.ink/emojis/blobfox/blobfox.zip", - "src_sha256": "00edcba2f1875d582f46af52100eb0defcf5732175b4958948df059026121f28", - "license": "Apache 2.0" - }, - "blobfox_flip": { - "description": "Like Blobcat, but with foxes (flipped version)", - "files": "blobfox_flip.json", - "homepage": "https://volpeon.ink/emojis/blobfox/", - "src": "https://volpeon.ink/emojis/blobfox/blobfox_flip.zip", - "src_sha256": "4f05fa0440dc43d3a80913ae210b3116b186e927ffbd3d3d2fd18d95e2577304", - "license": "Apache 2.0" - } -} diff --git a/packages/art/emoji/volpeon/blobfox.nix b/packages/art/emoji/volpeon/blobfox.nix deleted file mode 100644 index 04250ddd..00000000 --- a/packages/art/emoji/volpeon/blobfox.nix +++ /dev/null @@ -1,13 +0,0 @@ -{callPackage}: -callPackage ../../../lib/mkPleromaEmoji.nix {} rec { - name = "blobfox"; - manifest = ./${name}.json; - passthru.updateScript = [ - ../../../scripts/update-json.sh - "https://volpeon.ink/emojis/${name}/manifest.json" - "art/emoji/volpeon/${name}.json" - ]; - configurePhase = '' - rm a*.png - ''; -} diff --git a/packages/art/emoji/volpeon/blobfox_flip.nix b/packages/art/emoji/volpeon/blobfox_flip.nix deleted file mode 100644 index 11d9d6a1..00000000 --- a/packages/art/emoji/volpeon/blobfox_flip.nix +++ /dev/null @@ -1,8 +0,0 @@ -{callPackage}: -callPackage ../../../lib/mkPleromaEmoji.nix {} rec { - name = "blobfox_flip"; - manifest = ./blobfox.json; - configurePhase = '' - rm a*.png - ''; -} diff --git a/packages/art/emoji/volpeon/bunhd.json b/packages/art/emoji/volpeon/bunhd.json deleted file mode 100644 index 3f26cb43..00000000 --- a/packages/art/emoji/volpeon/bunhd.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "bunhd": { - "description": "High-res version of the bun emojis", - "files": "bunhd.json", - "homepage": "https://volpeon.ink/emojis/bunhd/", - "src": "https://volpeon.ink/emojis/bunhd/bunhd.zip", - "src_sha256": "52c4493731bf7f9bf3526ed35a57ac684c9af8808cbb79d42060cc65e2b70dd6", - "license": "Apache 2.0" - }, - "bunhd_flip": { - "description": "High-res version of the bun emojis (flipped version)", - "files": "bunhd_flip.json", - "homepage": "https://volpeon.ink/emojis/bunhd/", - "src": "https://volpeon.ink/emojis/bunhd/bunhd_flip.zip", - "src_sha256": "5007099c627760a2f2391d20facb94973c5ff2467cb5692e8829a15fad4abc31", - "license": "Apache 2.0" - } -} diff --git a/packages/art/emoji/volpeon/bunhd.nix b/packages/art/emoji/volpeon/bunhd.nix deleted file mode 100644 index e4e39e24..00000000 --- a/packages/art/emoji/volpeon/bunhd.nix +++ /dev/null @@ -1,13 +0,0 @@ -{callPackage}: -callPackage ../../../lib/mkPleromaEmoji.nix {} rec { - name = "bunhd"; - manifest = ./${name}.json; - passthru.updateScript = [ - ../../../scripts/update-json.sh - "https://volpeon.ink/emojis/${name}/manifest.json" - "art/emoji/volpeon/${name}.json" - ]; - configurePhase = '' - rm a*.png - ''; -} diff --git a/packages/art/emoji/volpeon/bunhd_flip.nix b/packages/art/emoji/volpeon/bunhd_flip.nix deleted file mode 100644 index c68614b8..00000000 --- a/packages/art/emoji/volpeon/bunhd_flip.nix +++ /dev/null @@ -1,8 +0,0 @@ -{callPackage}: -callPackage ../../../lib/mkPleromaEmoji.nix {} rec { - name = "bunhd_flip"; - manifest = ./bunhd.json; - configurePhase = '' - rm a*.png - ''; -} diff --git a/packages/art/emoji/volpeon/drgn.json b/packages/art/emoji/volpeon/drgn.json deleted file mode 100644 index c1d6b1f9..00000000 --- a/packages/art/emoji/volpeon/drgn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "drgn": { - "description": "Character by @volpeon@is-a.wyvern.rip", - "files": "drgn.json", - "homepage": "https://volpeon.ink/emojis/drgn/", - "src": "https://volpeon.ink/emojis/drgn/drgn.zip", - "src_sha256": "93db046c56699d3bda223e765778e2e6969fa2df9788f074772d3ed40df3a2af", - "license": "CC BY-NC-SA 4.0" - } -} diff --git a/packages/art/emoji/volpeon/drgn.nix b/packages/art/emoji/volpeon/drgn.nix deleted file mode 100644 index 948be09b..00000000 --- a/packages/art/emoji/volpeon/drgn.nix +++ /dev/null @@ -1,10 +0,0 @@ -{callPackage}: -callPackage ../../../lib/mkPleromaEmoji.nix {} rec { - name = "drgn"; - manifest = ./${name}.json; - passthru.updateScript = [ - ../../../scripts/update-json.sh - "https://volpeon.ink/emojis/${name}/manifest.json" - "art/emoji/volpeon/${name}.json" - ]; -} diff --git a/packages/art/emoji/volpeon/floof.json b/packages/art/emoji/volpeon/floof.json deleted file mode 100644 index 0fa4de51..00000000 --- a/packages/art/emoji/volpeon/floof.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "floof": { - "description": "Character by @volpeon@is-a.wyvern.rip", - "files": "floof.json", - "homepage": "https://volpeon.ink/emojis/floof/", - "src": "https://volpeon.ink/emojis/floof/floof.zip", - "src_sha256": "0e6f66a8df0a1dd724cb3aca0a7d480da7200350933d867946c61db518248c2f", - "license": "CC BY-NC-SA 4.0" - } -} diff --git a/packages/art/emoji/volpeon/floof.nix b/packages/art/emoji/volpeon/floof.nix deleted file mode 100644 index 8d492069..00000000 --- a/packages/art/emoji/volpeon/floof.nix +++ /dev/null @@ -1,10 +0,0 @@ -{callPackage}: -callPackage ../../../lib/mkPleromaEmoji.nix {} rec { - name = "floof"; - manifest = ./${name}.json; - passthru.updateScript = [ - ../../../scripts/update-json.sh - "https://volpeon.ink/emojis/${name}/manifest.json" - "art/emoji/volpeon/${name}.json" - ]; -} diff --git a/packages/art/emoji/volpeon/fox.json b/packages/art/emoji/volpeon/fox.json deleted file mode 100644 index 7e73afc5..00000000 --- a/packages/art/emoji/volpeon/fox.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "fox": { - "description": "Fox emojis inspired by the Windows 11 fox emoji", - "files": "fox.json", - "homepage": "https://volpeon.ink/emojis/fox/", - "src": "https://volpeon.ink/emojis/fox/fox.zip", - "src_sha256": "2f3e4b5ba1e74c81e7c6095c8d6054e2ed8ff99e502bce363b8ffc448e0682b6", - "license": "CC BY-NC-SA 4.0" - } -} diff --git a/packages/art/emoji/volpeon/fox.nix b/packages/art/emoji/volpeon/fox.nix deleted file mode 100644 index 80b1f468..00000000 --- a/packages/art/emoji/volpeon/fox.nix +++ /dev/null @@ -1,10 +0,0 @@ -{callPackage}: -callPackage ../../../lib/mkPleromaEmoji.nix {} rec { - name = "fox"; - manifest = ./${name}.json; - passthru.updateScript = [ - ../../../scripts/update-json.sh - "https://volpeon.ink/emojis/${name}/manifest.json" - "art/emoji/volpeon/${name}.json" - ]; -} diff --git a/packages/art/emoji/volpeon/gphn.json b/packages/art/emoji/volpeon/gphn.json deleted file mode 100644 index 82e8f0d1..00000000 --- a/packages/art/emoji/volpeon/gphn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "gphn": { - "description": "Character by @volpeon@is-a.wyvern.rip", - "files": "gphn.json", - "homepage": "https://volpeon.ink/emojis/gphn/", - "src": "https://volpeon.ink/emojis/gphn/gphn.zip", - "src_sha256": "810e5ce897918dd669c17a712276840562b901fc9f725383301175709442372a", - "license": "CC BY-NC-SA 4.0" - } -} diff --git a/packages/art/emoji/volpeon/gphn.nix b/packages/art/emoji/volpeon/gphn.nix deleted file mode 100644 index ef1941c6..00000000 --- a/packages/art/emoji/volpeon/gphn.nix +++ /dev/null @@ -1,10 +0,0 @@ -{callPackage}: -callPackage ../../../lib/mkPleromaEmoji.nix {} rec { - name = "gphn"; - manifest = ./${name}.json; - passthru.updateScript = [ - ../../../scripts/update-json.sh - "https://volpeon.ink/emojis/${name}/manifest.json" - "art/emoji/volpeon/${name}.json" - ]; -} diff --git a/packages/art/emoji/volpeon/neocat.json b/packages/art/emoji/volpeon/neocat.json deleted file mode 100644 index 6ac38c3c..00000000 --- a/packages/art/emoji/volpeon/neocat.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "neocat": { - "description": "Character by @volpeon@is-a.wyvern.rip", - "files": "neocat.json", - "homepage": "https://volpeon.ink/emojis/neocat/", - "src": "https://volpeon.ink/emojis/neocat/neocat.zip", - "src_sha256": "0d90ee9340e395ac79d387e5356769a80c3e44e2ce3951a3d19bc92f2a2ea3b0", - "license": "CC BY-NC-SA 4.0" - } -} diff --git a/packages/art/emoji/volpeon/neocat.nix b/packages/art/emoji/volpeon/neocat.nix deleted file mode 100644 index a434b321..00000000 --- a/packages/art/emoji/volpeon/neocat.nix +++ /dev/null @@ -1,10 +0,0 @@ -{callPackage}: -callPackage ../../../lib/mkPleromaEmoji.nix {} rec { - name = "neocat"; - manifest = ./${name}.json; - passthru.updateScript = [ - ../../../scripts/update-json.sh - "https://volpeon.ink/emojis/${name}/manifest.json" - "art/emoji/volpeon/${name}.json" - ]; -} diff --git a/packages/art/emoji/volpeon/neofox.json b/packages/art/emoji/volpeon/neofox.json deleted file mode 100644 index dfb6b583..00000000 --- a/packages/art/emoji/volpeon/neofox.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "neofox": { - "description": "Character by @volpeon@is-a.wyvern.rip", - "files": "neofox.json", - "homepage": "https://volpeon.ink/emojis/neofox/", - "src": "https://volpeon.ink/emojis/neofox/neofox.zip", - "src_sha256": "ad950f03b66facef2afe5c7c5cadc8c49d5444b82ad0f4a1ef9d9e5b31beba8b", - "license": "CC BY-NC-SA 4.0" - } -} diff --git a/packages/art/emoji/volpeon/neofox.nix b/packages/art/emoji/volpeon/neofox.nix deleted file mode 100644 index 22f2b99c..00000000 --- a/packages/art/emoji/volpeon/neofox.nix +++ /dev/null @@ -1,10 +0,0 @@ -{callPackage}: -callPackage ../../../lib/mkPleromaEmoji.nix {} rec { - name = "neofox"; - manifest = ./${name}.json; - passthru.updateScript = [ - ../../../scripts/update-json.sh - "https://volpeon.ink/emojis/${name}/manifest.json" - "art/emoji/volpeon/${name}.json" - ]; -} diff --git a/packages/art/emoji/volpeon/raccoon.json b/packages/art/emoji/volpeon/raccoon.json deleted file mode 100644 index 5735027b..00000000 --- a/packages/art/emoji/volpeon/raccoon.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "raccoon": { - "description": "Raccoon emojis adapted from my fox emojis", - "files": "raccoon.json", - "homepage": "https://volpeon.ink/emojis/raccoon/", - "src": "https://volpeon.ink/emojis/raccoon/raccoon.zip", - "src_sha256": "b1986c87e44efcf08abaf2bb818f319e8d3dceb9f2f1a49d50e1c5bfc4434e64", - "license": "CC BY-NC-SA 4.0" - } -} diff --git a/packages/art/emoji/volpeon/raccoon.nix b/packages/art/emoji/volpeon/raccoon.nix deleted file mode 100644 index 902ae9bb..00000000 --- a/packages/art/emoji/volpeon/raccoon.nix +++ /dev/null @@ -1,10 +0,0 @@ -{callPackage}: -callPackage ../../../lib/mkPleromaEmoji.nix {} rec { - name = "raccoon"; - manifest = ./${name}.json; - passthru.updateScript = [ - ../../../scripts/update-json.sh - "https://volpeon.ink/emojis/${name}/manifest.json" - "art/emoji/volpeon/${name}.json" - ]; -} diff --git a/packages/art/emoji/volpeon/vlpn.json b/packages/art/emoji/volpeon/vlpn.json deleted file mode 100644 index 42d98bc4..00000000 --- a/packages/art/emoji/volpeon/vlpn.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "vlpn": { - "description": "More realistic fox emojis", - "files": "vlpn.json", - "homepage": "https://volpeon.ink/emojis/vlpn/", - "src": "https://volpeon.ink/emojis/vlpn/vlpn.zip", - "src_sha256": "4b3764559782dff24aef19b7cef5f40cdd6da73b0985cde416cd11d3fc4be24a", - "license": "Apache 2.0" - } -} diff --git a/packages/art/emoji/volpeon/vlpn.nix b/packages/art/emoji/volpeon/vlpn.nix deleted file mode 100644 index 89796e7a..00000000 --- a/packages/art/emoji/volpeon/vlpn.nix +++ /dev/null @@ -1,10 +0,0 @@ -{callPackage}: -callPackage ../../../lib/mkPleromaEmoji.nix {} rec { - name = "vlpn"; - manifest = ./${name}.json; - passthru.updateScript = [ - ../../../scripts/update-json.sh - "https://volpeon.ink/emojis/${name}/manifest.json" - "art/emoji/volpeon/${name}.json" - ]; -} diff --git a/packages/art/lotte/bgs-nsfw.nix b/packages/art/lotte/bgs-nsfw.nix new file mode 100644 index 00000000..e30a0c25 --- /dev/null +++ b/packages/art/lotte/bgs-nsfw.nix @@ -0,0 +1,39 @@ +{ art-lotte, stdenvNoCC }: +stdenvNoCC.mkDerivation { + pname = "nsfw-bgs"; + inherit (art-lotte) version; + src = art-lotte; + dontUnpack = true; + dontBuild = true; + nsfwBgs = [ + "2020-07-24-urbankitsune-bna-ych.jxl" + "2021-09-15-cloverhare-lotteplush.jxl" + "2021-10-29-butterskunk-lotte-scat-buffet.jxl" + "2021-11-27-theroguez-lottegassyvore1.jxl" + "2021-12-12-baltnwolf-christmas-diaper-messy.jxl" + "2021-12-12-baltnwolf-christmas-diaper.jxl" + "2022-04-20-cloverhare-mxbatty-maffsie-train-plush.jxl" + "2022-04-20-cloverhare-mxbatty-me-train-maffsie-plush.jxl" + "2022-05-02-anonfurryartist-giftart.jxl" + "2022-06-21-sammythetanuki-lotteplushpride.jxl" + "2022-08-12-deathtoaster-funpit-scat.jxl" + "2022-08-15-deathtoaster-funpit-mud.jxl" + "2022-11-15-wolfsifi-maff-me-leashed.jxl" + "2022-12-27-rexyi-scatych.jxl" + "2023-03-09-rexyi-voredisposal-ych.jxl" + "2023-08-09-coldquarantine-lotte-eating-trash.jxl" + "2023-08-10-coldquarantine-lotte-eating-trash-diapers.jxl" + "2023-08-20-coldquarantine-lotte-eating-trash-clean.jxl" + ]; + installPhase = '' + mkdir $out + for f in $nsfwBgs; do + cp $src/$f $out/$f + done + ''; + + meta = { + description = "NSFW computer backgrounds"; + inherit (art-lotte.meta) license; + }; +} diff --git a/packages/art/lotte/bgs-sfw.nix b/packages/art/lotte/bgs-sfw.nix new file mode 100644 index 00000000..d6bc3b2e --- /dev/null +++ b/packages/art/lotte/bgs-sfw.nix @@ -0,0 +1,26 @@ +{ art-lotte, stdenvNoCC }: +stdenvNoCC.mkDerivation { + pname = "sfw-bgs"; + inherit (art-lotte) version; + src = art-lotte; + dontUnpack = true; + dontBuild = true; + sfwBgs = [ + "2020-07-24-urbankitsune-bna-ych.jxl" + "2021-09-15-cloverhare-lotteplush.jxl" + "2022-05-02-anonfurryartist-giftart.jxl" + "2022-06-21-sammythetanuki-lotteplushpride.jxl" + "2022-11-15-wolfsifi-maff-me-leashed.jxl" + ]; + installPhase = '' + mkdir $out + for f in $sfwBgs; do + cp $src/$f $out/$f + done + ''; + + meta = { + description = "SFW computer backgrounds"; + inherit (art-lotte.meta) license; + }; +} diff --git a/packages/art/lotte/default.nix b/packages/art/lotte/default.nix index fa343c0d..dfb0852e 100644 --- a/packages/art/lotte/default.nix +++ b/packages/art/lotte/default.nix @@ -1,25 +1,27 @@ { - stdenv, fetchgit, lib, -}: let - srcInfo = builtins.fromJSON (builtins.readFile ./source.json); +}: +let + srcInfo = lib.importJSON ./source.json; src = fetchgit { - inherit (srcInfo) url rev sha256 fetchLFS fetchSubmodules deepClone leaveDotGit; + inherit (srcInfo) + url + rev + sha256 + fetchLFS + fetchSubmodules + deepClone + leaveDotGit + ; }; in - src.overrideAttrs (_: rec { - name = "${pname}-${version}"; - pname = "lotte-art"; - version = srcInfo.date; - passthru.updateScript = [ - ../../scripts/update-git.sh - "https://git.chir.rs/DarkKirb/lotte-art" - "art/lotte/source.json" - "--fetch-lfs" - ]; - meta = { - description = "Art I commissioned (mostly)"; - license = lib.licenses.cc-by-nc-sa-40; - }; - }) +src.overrideAttrs (_: rec { + name = "${pname}-${version}"; + pname = "lotte-art"; + version = srcInfo.date; + meta = { + description = "Art I commissioned or made"; + license = lib.licenses.cc-by-nc-sa-40; + }; +}) diff --git a/packages/art/lotte/source.json b/packages/art/lotte/source.json index ca404f2e..b00c3008 100644 --- a/packages/art/lotte/source.json +++ b/packages/art/lotte/source.json @@ -1,10 +1,10 @@ { - "url": "https://git.chir.rs/DarkKirb/lotte-art", - "rev": "9d341d1b44bfbd1305e66ac1f5a07f01413951d0", - "date": "2024-09-29T11:09:27+02:00", - "path": "/nix/store/s1j9hzifi3f7wc8w39619yvr6n4a0vv7-lotte-art", - "sha256": "1rzlvlyjqkbzpyl14v6hgiyb9xkx5rzvhgnbn1gwp0pv5r2lbsnn", - "hash": "sha256-1upFRS77gstfsMs+uH8uffa0fHzQbBKov39NLD3d9Oc=", + "url": "https://git.chir.rs/darkkirb/lotte-art", + "rev": "2e4045c8f1c28f43a9727ba502bf1bddcb841747", + "date": "2024-11-11T09:42:08+01:00", + "path": "/nix/store/p714m3g4gdapq6s3pzncfa7d0y9qkhma-lotte-art", + "sha256": "07g0m6gg6vs9v6c1bz2c869gihfk0ara2yy0abmmaa55imys2myg", + "hash": "sha256-z1ehfY2lKFXrUsB7obIC08H4kkFM/BWY2Ulv856p4B0=", "fetchLFS": true, "fetchSubmodules": false, "deepClone": false, diff --git a/packages/art/lotte/updater.nix b/packages/art/lotte/updater.nix new file mode 100644 index 00000000..73d5c4f4 --- /dev/null +++ b/packages/art/lotte/updater.nix @@ -0,0 +1,19 @@ +{ + nix-prefetch-git, + curl, + jq, + lib, +}: +let + srcInfo = lib.importJSON ./source.json; +in +'' + echo "lotte-art: Checking for updates" + CURRENT_COMMIT=$(${curl}/bin/curl https://git.chir.rs/api/v1/repos/darkkirb/lotte-art/commits | ${jq}/bin/jq -r '.[0].sha') + KNOWN_COMMIT=${srcInfo.rev} + if [ $CURRENT_COMMIT != $KNOWN_COMMIT ]; then + echo "lotte-art: Updating from $KNOWN_COMMIT to $CURRENT_COMMIT" + ${nix-prefetch-git}/bin/nix-prefetch-git https://git.chir.rs/darkkirb/lotte-art --fetch-lfs | ${jq}/bin/jq > packages/art/lotte/source.json + fi + echo "lotte-art: Done" +'' diff --git a/packages/art/updater.nix b/packages/art/updater.nix new file mode 100644 index 00000000..bf9022bc --- /dev/null +++ b/packages/art/updater.nix @@ -0,0 +1,5 @@ +{ + lib, + callPackage, +}: +lib.concatMapStringsSep "\n" (f: callPackage "${f}/updater.nix" { }) [ ./lotte ] diff --git a/packages/compiler/asar/default.nix b/packages/compiler/asar/default.nix deleted file mode 100644 index 4e6d9fe7..00000000 --- a/packages/compiler/asar/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - fetchFromGitHub, - cmake, - ninja, - stdenv, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - stdenv.mkDerivation { - pname = "asar"; - version = source.date; - src = fetchFromGitHub { - owner = "RPGHacker"; - repo = "asar"; - inherit (source) rev sha256; - }; - nativeBuildInputs = [cmake ninja]; - postPatch = '' - substituteInPlace src/asar/lib/libasar.pc.in --replace 'ASAR_PKGCONF_INCLUDEDIR' 'CMAKE_INSTALL_FULL_INCLUDEDIR' --replace 'ASAR_PKGCONF_LIBDIR' 'CMAKE_INSTALL_FULL_LIBBDIR' - ''; - cmakeDir = "../src"; - passthru.updateScript = [../../scripts/update-git.sh "https://github.com/RPGHacker/asar" "compiler/asar/source.json"]; - } diff --git a/packages/compiler/asar/source.json b/packages/compiler/asar/source.json deleted file mode 100644 index 34d93bd8..00000000 --- a/packages/compiler/asar/source.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/RPGHacker/asar", - "rev": "5e0cdba7566438be20abf4591633c01d83750dd9", - "date": "2024-07-31T13:41:45+03:00", - "path": "/nix/store/kyppnzkir53l8y10w0qwqvl2azqndfzj-asar", - "sha256": "09qjl6jx39j4578vfcwfjgv8v7v71bs7f0zabdzmjdyfj8gdj767", - "hash": "sha256-xxzZHpLON1l/W+oDd/QKZ5+N9pOOM7fRKUSm0aWhEic=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/default.nix b/packages/default.nix new file mode 100644 index 00000000..95d93148 --- /dev/null +++ b/packages/default.nix @@ -0,0 +1,12 @@ +final: prev: { + art-lotte = final.callPackage ./art/lotte { }; + inherit (prev.inputs.element-web.packages.${prev.system}) element-web; + fish = prev.fish.overrideAttrs { + postPatch = '' + substituteInPlace src/history.cpp --replace-fail 'vacuum = true' 'vacuum = false' + ''; + doCheck = false; + }; + kodi-joyn = final.kodiPackages.callPackage ./kodi/joyn { }; + package-updater = final.callPackage ./updater.nix { }; +} diff --git a/packages/emulator/bsnes-plus/default.nix b/packages/emulator/bsnes-plus/default.nix deleted file mode 100644 index d8b6a3f2..00000000 --- a/packages/emulator/bsnes-plus/default.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ - fetchFromGitHub, - stdenv, - qtbase, - wrapQtAppsHook, - pkg-config, - SDL, - libXv, - libao, - openal, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - stdenv.mkDerivation { - pname = "bsnes-plus"; - version = source.date; - src = fetchFromGitHub { - owner = "devinacker"; - repo = "bsnes-plus"; - inherit (source) rev sha256; - }; - makeFlags = ["-C" "bsnes" "out=bsnes"]; - buildInputs = [qtbase SDL libXv libao openal]; - nativeBuildInputs = [wrapQtAppsHook pkg-config]; - passthru.updateScript = [../../scripts/update-git.sh "https://github.com/devinacker/bsnes-plus" "emulator/bsnes-plus/source.json"]; - preInstall = '' - export HOME=$(mktemp -d) - export prefix=$out - ''; - preFixup = '' - qtWrapperArgs+=("--unset" "WAYLAND_DISPLAY") - ''; - enableParallelBuilding = true; - } diff --git a/packages/emulator/bsnes-plus/source.json b/packages/emulator/bsnes-plus/source.json deleted file mode 100644 index 39b38296..00000000 --- a/packages/emulator/bsnes-plus/source.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/devinacker/bsnes-plus", - "rev": "000310841b9bc9c84b4beda12fa94d4e3c6691a3", - "date": "2023-12-29T10:33:47-05:00", - "path": "/nix/store/4c2lyfdzxisx8dibp3d21vycmpd9776c-bsnes-plus", - "sha256": "1qrrwhc2pyvay2qgfi1x99sm2g690vg5w3z2xbrwdvv2lbc5d38a", - "hash": "sha256-Co1W2KJi78bz6uIPXt4GyTxRdUo9RPew8Gr7KxjkOeM=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/emulator/mgba-dev/default.nix b/packages/emulator/mgba-dev/default.nix deleted file mode 100644 index fbd0f532..00000000 --- a/packages/emulator/mgba-dev/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - mgba, - fetchFromGitHub, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - mgba.overrideAttrs (super: { - version = source.date; - src = fetchFromGitHub { - owner = "mgba-emu"; - repo = "mgba"; - inherit (source) rev sha256; - }; - - passthru.updateScript = [../../scripts/update-git.sh "https://github.com/mgba-emu/mgba" "emulator/mgba-dev/source.json"]; - }) diff --git a/packages/emulator/mgba-dev/source.json b/packages/emulator/mgba-dev/source.json deleted file mode 100644 index 55a269e0..00000000 --- a/packages/emulator/mgba-dev/source.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/mgba-emu/mgba", - "rev": "279485fc3ed54b0dafbbff448e901be47b25ef2f", - "date": "2024-10-20T18:04:30-07:00", - "path": "/nix/store/39kcg0bzsn0p3kj26q52ifphdam91378-mgba", - "sha256": "13nm2bc6krahfbzl9bml5pjr6rq7i2zf308s4wfnxmk9j73yzxbc", - "hash": "sha256-bPXvx5Fp1m4dJxqB4b6IB2eT5S20rkT/clDladgS1Y4=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/fonts/kreative/alco-sans.nix b/packages/fonts/kreative/alco-sans.nix deleted file mode 100644 index 617bdad8..00000000 --- a/packages/fonts/kreative/alco-sans.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - stdenv, - callPackage, - lib, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - stdenv.mkDerivation { - name = "alco-sans"; - version = source.date; - src = callPackage ./source.nix {}; - preferLocalBuild = true; - buildPhase = "true"; - installPhase = '' - install -m444 -Dt $out/share/truetype/AlcoSans AlcoSans/AlcoSans.ttf - ''; - meta = { - description = "Font by Kreative Software"; - license = lib.licenses.ofl; - }; - } diff --git a/packages/fonts/kreative/constructium.nix b/packages/fonts/kreative/constructium.nix deleted file mode 100644 index 2c5b769a..00000000 --- a/packages/fonts/kreative/constructium.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - stdenv, - callPackage, - lib, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - stdenv.mkDerivation { - name = "constructium"; - version = source.date; - src = callPackage ./source.nix {}; - preferLocalBuild = true; - buildPhase = "true"; - installPhase = '' - install -m444 -Dt $out/share/truetype/Constructium Constructium/Constructium.ttf - ''; - meta = { - description = "Fork of SIL Gentium with glyph for Constructed Languages"; - license = lib.licenses.ofl; - }; - } diff --git a/packages/fonts/kreative/fairfax-hd.nix b/packages/fonts/kreative/fairfax-hd.nix deleted file mode 100644 index 12591448..00000000 --- a/packages/fonts/kreative/fairfax-hd.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - stdenv, - callPackage, - lib, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - stdenv.mkDerivation { - name = "fairfax-hd"; - version = source.date; - src = callPackage ./source.nix {}; - preferLocalBuild = true; - buildPhase = "true"; - installPhase = '' - for variant in HD HaxHD PonaHD SMHD; do - install -m444 -Dt $out/share/truetype/FairfaxHD FairfaxHD/Fairfax$variant.ttf - done - ''; - meta = { - description = "Halfwidth scalable monospace font with support for many scripts, including Conscripts"; - license = lib.licenses.ofl; - }; - passthru.updateScript = [ - ../../scripts/update-git.sh - "https://github.com/kreativekorp/open-relay.git" - "fonts/kreative/source.json" - ]; - } diff --git a/packages/fonts/kreative/fairfax.nix b/packages/fonts/kreative/fairfax.nix deleted file mode 100644 index cea46610..00000000 --- a/packages/fonts/kreative/fairfax.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - stdenv, - callPackage, - lib, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - stdenv.mkDerivation { - name = "fairfax"; - version = source.date; - src = callPackage ./source.nix {}; - preferLocalBuild = true; - buildPhase = "true"; - installPhase = '' - for variant in "" Bold Hax HaxBold HaxItalic Italic Pona SM SMBold SMItalic Serif SerifHax SerifSM; do - install -m444 -Dt $out/share/truetype/Fairfax Fairfax/Fairfax$variant.ttf - done - ''; - meta = { - description = "6x12 Bitmap Font supporting many Unicode Characters and Constructed Scripts"; - license = lib.licenses.ofl; - }; - } diff --git a/packages/fonts/kreative/kreative-square.nix b/packages/fonts/kreative/kreative-square.nix deleted file mode 100644 index c14b8b18..00000000 --- a/packages/fonts/kreative/kreative-square.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - stdenv, - callPackage, - lib, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - stdenv.mkDerivation { - name = "kreative-square"; - version = source.date; - src = callPackage ./source.nix {}; - preferLocalBuild = true; - buildPhase = "true"; - installPhase = '' - for variant in "" SM; do - install -m444 -Dt $out/share/truetype/KreativeSquare KreativeSquare/KreativeSquare$variant.ttf - done - ''; - meta = { - description = "Fullwidth scalable monospace font with many Box Drawing characters"; - license = lib.licenses.ofl; - }; - } diff --git a/packages/fonts/kreative/source.json b/packages/fonts/kreative/source.json deleted file mode 100644 index f7eacf33..00000000 --- a/packages/fonts/kreative/source.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/kreativekorp/open-relay.git", - "rev": "8669aa351441125d241f2877c3f184e3094719d9", - "date": "2024-10-09T22:42:19-07:00", - "path": "/nix/store/0c9m0xyj7a1hirayxlhk5spccamz7ysy-open-relay", - "sha256": "106ls1h75pfz3568xy6bizhin0pp2a4giqlkr3wj5njdl23zmsvi", - "hash": "sha256-cev6h6BN2iL5yJPi+IgS9wIb4Y/L+I5MGd/dcmDQ1IA=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/fonts/kreative/source.nix b/packages/fonts/kreative/source.nix deleted file mode 100644 index 1fff16fc..00000000 --- a/packages/fonts/kreative/source.nix +++ /dev/null @@ -1,8 +0,0 @@ -{fetchFromGitHub}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - fetchFromGitHub { - owner = "kreativekorp"; - repo = "open-relay"; - inherit (source) rev sha256; - } diff --git a/packages/fonts/nasin-nanpa/default.nix b/packages/fonts/nasin-nanpa/default.nix deleted file mode 100644 index d7d9a010..00000000 --- a/packages/fonts/nasin-nanpa/default.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - stdenv, - fontforge, - fetchFromGitHub, - lib, - writeScript, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); - version = builtins.fromJSON (builtins.readFile ./version.json); -in - stdenv.mkDerivation { - pname = "nasin-nanpa"; - version = "${version.minor}"; - src = fetchFromGitHub { - owner = "ETBCOR"; - repo = "nasin-nanpa"; - inherit (source) rev sha256; - }; - nativeBuildInputs = [fontforge]; - buildPhase = "fontforge -lang=ff -c 'Open($1); Generate($2)' \"ffversions/${version.major}/nasin-nanpa-${version.minor}.sfd\" \"nasin-nanpa.otf\""; - installPhase = "install -m444 -Dt $out/share/fonts/opentype/nasin-nanpa nasin-nanpa.otf"; - meta = { - description = "A font for sitelen pona"; - license = lib.licenses.mit; - }; - passthru.updateScript = writeScript "update-nasin-nanpa" '' - ${../../scripts/update-git.sh} https://github.com/ETBCOR/nasin-nanpa fonts/nasin-nanpa/source.json - if [ "$(git diff -- fonts/nasin-nanpa/source.json)" ]; then - SRC_PATH=$(nix-build -E '(import ../.).packages.x86_64-linux.nasin-nanpa.src') - ls $SRC_PATH/ffversions/*/*.sfd | sort | tail -n1 | sed 's|[/-]| |g' | sed 's/.sfd//' | awk '{print "{\"major\": \"" $6 "\", \"minor\": \"" $9 "\"}" }' > fonts/nasin-nanpa/version.json - fi - ''; - } diff --git a/packages/fonts/nasin-nanpa/source.json b/packages/fonts/nasin-nanpa/source.json deleted file mode 100644 index ba0b02af..00000000 --- a/packages/fonts/nasin-nanpa/source.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/ETBCOR/nasin-nanpa", - "rev": "0ff17c86aa0c43252a48a2b45dba7de2179ba423", - "date": "2024-09-10T04:04:30-06:00", - "path": "/nix/store/jp534m1a7c91d3rzvdvnf3qx1pk4wiiy-nasin-nanpa", - "sha256": "0g96l1ps9xmglx240jmwmahw9d9vi2jfcsmah91b1djj6kfp7d5x", - "hash": "sha256-vbRz3TRStrBCgqpq5qSIO7XEoaq8SkBEp6/2pG+gJj0=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/fonts/nasin-nanpa/version.json b/packages/fonts/nasin-nanpa/version.json deleted file mode 100644 index b8ced511..00000000 --- a/packages/fonts/nasin-nanpa/version.json +++ /dev/null @@ -1 +0,0 @@ -{"major": "4.0", "minor": "4.0.1"} diff --git a/packages/kodi/joyn/default.nix b/packages/kodi/joyn/default.nix new file mode 100644 index 00000000..01b11c2f --- /dev/null +++ b/packages/kodi/joyn/default.nix @@ -0,0 +1,33 @@ +{ + buildKodiAddon, + fetchFromGitHub, + inputstream-adaptive, + inputstreamhelper, + lib, + simplejson, +}: +let + srcInfo = lib.importJSON ./source.json; +in +buildKodiAddon { + pname = "Joyn"; + namespace = "plugin.video.joyn"; + version = "2.3.1.10"; + src = fetchFromGitHub { + owner = "Maven85"; + repo = "plugin.video.joyn"; + inherit (srcInfo) rev sha256; + }; + preFixup = '' + substituteInPlace $out/share/kodi/addons/plugin.video.joyn/addon.xml --replace-fail '2.26.0' '3.0.0' + ''; + propagatedBuildInputs = [ + inputstream-adaptive + inputstreamhelper + simplejson + ]; + meta = { + license = lib.licenses.gpl2; + description = "Watch VOD content und Live TV provided by Joyn"; + }; +} diff --git a/packages/kodi/joyn/source.json b/packages/kodi/joyn/source.json new file mode 100644 index 00000000..30f092af --- /dev/null +++ b/packages/kodi/joyn/source.json @@ -0,0 +1,12 @@ +{ + "url": "https://github.com/Maven85/plugin.video.joyn", + "rev": "ada6baf66c2938ce2d268c0fc26a03c0f22860c8", + "date": "2024-11-14T12:11:46+01:00", + "path": "/nix/store/pijybsgblp2ajsim9wr40hwfpq5474dr-plugin.video.joyn", + "sha256": "1c8xsf85kvg2bplfcp9fc7a1fh38w5a6m2qy9y5z7ki8p8480crn", + "hash": "sha256-NjOACLoozvOLTx6LalThaEAX1GEuXeboXeLtWZDTHbE=", + "fetchLFS": false, + "fetchSubmodules": false, + "deepClone": false, + "leaveDotGit": false +} diff --git a/packages/kodi/joyn/updater.nix b/packages/kodi/joyn/updater.nix new file mode 100644 index 00000000..2b44e2f5 --- /dev/null +++ b/packages/kodi/joyn/updater.nix @@ -0,0 +1,19 @@ +{ + nix-prefetch-git, + curl, + jq, + lib, +}: +let + srcInfo = lib.importJSON ./source.json; +in +'' + echo "kodi-joyn: Checking for updates" + CURRENT_COMMIT=$(${curl}/bin/curl https://api.github.com/repos/Maven85/plugin.video.joyn/commits | ${jq}/bin/jq -r '.[0].sha') + KNOWN_COMMIT=${srcInfo.rev} + if [ $CURRENT_COMMIT != $KNOWN_COMMIT ]; then + echo "kodi-joyn: Updating from $KNOWN_COMMIT to $CURRENT_COMMIT" + ${nix-prefetch-git}/bin/nix-prefetch-git https://github.com/Maven85/plugin.video.joyn | ${jq}/bin/jq > packages/kodi/joyn/source.json + fi + echo "kodi-joyn: Done" +'' diff --git a/packages/kodi/updater.nix b/packages/kodi/updater.nix new file mode 100644 index 00000000..a69942fd --- /dev/null +++ b/packages/kodi/updater.nix @@ -0,0 +1,7 @@ +{ + lib, + callPackage, +}: +lib.concatMapStringsSep "\n" (f: callPackage "${f}/updater.nix" { }) [ + ./joyn +] diff --git a/packages/lib/crushpng.nix b/packages/lib/crushpng.nix deleted file mode 100644 index a18fdb7c..00000000 --- a/packages/lib/crushpng.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - stdenvNoCC, - pngquant, -}: { - name, - src, - maxsize, -} @ args: -stdenvNoCC.mkDerivation { - dontUnpack = true; - inherit (args) name src maxsize; - nativeBuildInputs = [pngquant]; - buildPhase = '' - ${./crushpng.sh} $src $out $maxsize - ''; - installPhase = "true"; -} diff --git a/packages/lib/crushpng.sh b/packages/lib/crushpng.sh deleted file mode 100755 index 537a4d65..00000000 --- a/packages/lib/crushpng.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh - -set -ex - -if [ "$(wc -c $1 | awk '{print $1}')" -le $3 ]; then - cp $1 $2 - exit 0 -fi - -for i in $(seq 100 -1 0); do - cat $1 | pngquant --quality 0-$i - > $2 - [ "$(wc -c $2 | awk '{print $1}')" -le $3 ] && exit 0 -done - -rm $2 -exit 1 \ No newline at end of file diff --git a/packages/lib/default.nix b/packages/lib/default.nix deleted file mode 100644 index 5e0ad276..00000000 --- a/packages/lib/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{pkgs, ...}: { - mkPleromaEmoji = pkgs.callPackage ./mkPleromaEmoji.nix {}; - gradleDeps = pkgs.callPackage ./gradleDeps.nix {}; - opensslLegacyProvider = pkgs.callPackage ./opensslLegacyProvider.nix {}; - crushpng = pkgs.callPackage ./crushpng.nix {}; - importFlake = import ./importFlake.nix; -} diff --git a/packages/lib/gradleDeps.nix b/packages/lib/gradleDeps.nix deleted file mode 100644 index 1a265751..00000000 --- a/packages/lib/gradleDeps.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - stdenv, - gradle, - openjdk_headless, - perl, - git, -}: { - src, - sha256, - ... -} @ args: -stdenv.mkDerivation ({ - nativeBuildInputs = [gradle openjdk_headless perl git]; - buildPhase = '' - export GRADLE_USER_HOME=$(mktemp -d) - gradle --no-daemon --info -Dorg.gradle.java.home=${openjdk_headless} --write-verification-metadata sha256 - ''; - installPhase = '' - find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(aar\|jar\|pom\|module\)$' \ - | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/maven/$x/$3/$4/$5" #e' \ - | sh - ''; - outputHashAlgo = "sha256"; - outputHashMode = "recursive"; - outputHash = sha256; - } - // args) diff --git a/packages/lib/importFlake.nix b/packages/lib/importFlake.nix deleted file mode 100644 index 918a96b2..00000000 --- a/packages/lib/importFlake.nix +++ /dev/null @@ -1,11 +0,0 @@ -{system}: let - lock = builtins.fromJSON (builtins.readFile ../flake.lock); - flake-compat = fetchTarball { - url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; - sha256 = lock.nodes.flake-compat.locked.narHash; - }; -in - (import flake-compat) { - src = ../.; - inherit system; - } diff --git a/packages/lib/mkPleromaEmoji.nix b/packages/lib/mkPleromaEmoji.nix deleted file mode 100644 index 47646ec6..00000000 --- a/packages/lib/mkPleromaEmoji.nix +++ /dev/null @@ -1,51 +0,0 @@ -{ - stdenv, - fetchurl, - pngquant, - lib, - libarchive, -}: { - name, - manifest, - ... -} @ args: let - manifestData = (builtins.fromJSON (builtins.readFile manifest)).${name}; - src = fetchurl { - url = manifestData.src; - sha256 = manifestData.src_sha256; - }; - brokenLicenses = { - "CC BY-NC-SA 4.0" = lib.licenses.cc-by-nc-sa-20; - "Apache 2.0" = lib.licenses.asl20; - }; - fixLicense = license: brokenLicenses.${license} or license; -in - stdenv.mkDerivation ({ - inherit name src; - nativeBuildInputs = [ - pngquant - libarchive - ]; - unpackPhase = '' - bsdtar -xf $src - ''; - buildPhase = '' - for f in *_256.png; do - f_new=''${f%_256.png} - mv $f ''${f_new}.png - done - find . -type f -name '*.png' -print0 | xargs -0 -n 1 -P $NIX_BUILD_CORES sh -c '${./crushpng.sh} $0 $0.new 50000' - for f in $(find . -type f -name '*.new'); do - mv $f ${"$"}{f%.new} - done - ''; - installPhase = '' - mkdir $out - cp -r *.png $out - ''; - meta = { - inherit (manifestData) description homepage; - license = fixLicense manifestData.license; - }; - } - // args) diff --git a/packages/lib/opensslLegacyProvider.nix b/packages/lib/opensslLegacyProvider.nix deleted file mode 100644 index 1d094169..00000000 --- a/packages/lib/opensslLegacyProvider.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - openssl, - nodejs, -}: -if builtins.compareVersions nodejs.version "18" >= 0 && builtins.compareVersions openssl.version "3" >= 0 -then "--openssl-legacy-provider" -else "" diff --git a/packages/linux/devterm/devterm.json b/packages/linux/devterm/devterm.json deleted file mode 100644 index a8fcc6a9..00000000 --- a/packages/linux/devterm/devterm.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/clockworkpi/DevTerm.git", - "rev": "9a0598e0877f4bdca207074b2c0e7cb229d290f0", - "date": "2024-06-10T08:02:03-07:00", - "path": "/nix/store/nwfg32dz37g5dmnd5xvcsmp9wh7jq0qq-DevTerm", - "sha256": "1461vicaqnnvfczgxzvq8chkcjk2l178n668dixyx6kfp7rf0b31", - "hash": "sha256-YSzg8rlumu57bMgYi06gYko2IUN4//4+c9tarFjcwZA=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/linux/devterm/devterm.nix b/packages/linux/devterm/devterm.nix deleted file mode 100644 index 2fff3b38..00000000 --- a/packages/linux/devterm/devterm.nix +++ /dev/null @@ -1,8 +0,0 @@ -{fetchFromGitHub}: let - source = builtins.fromJSON (builtins.readFile ./devterm.json); -in - fetchFromGitHub { - owner = "clockworkpi"; - repo = "DevTerm"; - inherit (source) rev sha256; - } diff --git a/packages/linux/devterm/kernel-source.nix b/packages/linux/devterm/kernel-source.nix deleted file mode 100644 index 4ac82e39..00000000 --- a/packages/linux/devterm/kernel-source.nix +++ /dev/null @@ -1,8 +0,0 @@ -{fetchFromGitHub}: let - source = builtins.fromJSON (builtins.readFile ./kernel.json); -in - fetchFromGitHub { - owner = "raspberrypi"; - repo = "linux"; - inherit (source) rev sha256; - } diff --git a/packages/linux/devterm/kernel.json b/packages/linux/devterm/kernel.json deleted file mode 100644 index 784e7ff0..00000000 --- a/packages/linux/devterm/kernel.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/raspberrypi/linux", - "rev": "3a33f11c48572b9dd0fecac164b3990fc9234da8", - "date": "2021-04-29T20:34:42+01:00", - "path": "/nix/store/g3cawyxkjchyhz4860d92ql0p6hj2gvj-linux-3a33f11", - "sha256": "154aicn2cd4a6kpnifcb899px6jijg2abavjm3y4w5lfwpipmqck", - "hash": "sha256-k+F64+WOFk78qHKrpcSTUZp+U0KLuWjvNIo0JiyLipQ=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} \ No newline at end of file diff --git a/packages/linux/devterm/kernel.nix b/packages/linux/devterm/kernel.nix deleted file mode 100644 index 4355fcfe..00000000 --- a/packages/linux/devterm/kernel.nix +++ /dev/null @@ -1,44 +0,0 @@ -{ - callPackage, - buildLinux, - lib, - ... -} @ args: let - devterm = callPackage ./devterm.nix {}; -in - buildLinux ( - args - // { - src = callPackage ./kernel-source.nix {}; - version = "5.10.17-v8"; - defconfig = "bcm2711_defconfig"; - autoModules = false; - kernelPatches = [ - { - name = "devterm"; - patch = "${devterm}/Code/patch/cm4/cm4_kernel_0704.patch"; - extraStructuredConfig = with lib.kernel; { - AXP20X_ADC = module; - AXP20X_POWER = module; - BATTERY_AXP20X = module; - CHARGER_AXP20X = module; - INPUT_AXP20X_PEK = yes; - MFD_AXP20X = yes; - MFD_AXP20X_I2C = yes; - REGULATOR_AXP20X = yes; - BACKLIGHT_OCP8178 = module; - DRM_PANEL_CWD686 = module; - TI_ADC081C = module; - I2C_BCM2835 = yes; - FW_LOADER_COMPRESS = yes; - }; - } - { - name = "subcmd-util"; - patch = ./subcmd-util.patch; - extraConfig = ""; - } - ]; - enableCommonConfig = false; - } - ) diff --git a/packages/linux/devterm/subcmd-util.patch b/packages/linux/devterm/subcmd-util.patch deleted file mode 100644 index 2ca4c3eb..00000000 --- a/packages/linux/devterm/subcmd-util.patch +++ /dev/null @@ -1,29 +0,0 @@ - ---- - tools/lib/subcmd/subcmd-util.h | 9 ++++----- - 1 file changed, 4 insertions(+), 5 deletions(-) - -diff --git a/tools/lib/subcmd/subcmd-util.h b/tools/lib/subcmd/subcmd-util.h -index 794a375dad36..7009fc176636 100644 ---- a/tools/lib/subcmd/subcmd-util.h -+++ b/tools/lib/subcmd/subcmd-util.h -@@ -49,13 +49,12 @@ static NORETURN inline void die(const char *err, ...) - - static inline void *xrealloc(void *ptr, size_t size) - { -- void *ret = realloc(ptr, size); -- if (!ret && !size) -- ret = realloc(ptr, 1); -+ void *ret; -+ if (!size) -+ size = 1; -+ ret = realloc(ptr, size); - if (!ret) { - ret = realloc(ptr, size); -- if (!ret && !size) -- ret = realloc(ptr, 1); - if (!ret) - die("Out of memory, realloc failed"); - } --- -2.34.1 \ No newline at end of file diff --git a/packages/linux/vf2/default.nix b/packages/linux/vf2/default.nix deleted file mode 100644 index 4397a701..00000000 --- a/packages/linux/vf2/default.nix +++ /dev/null @@ -1,50 +0,0 @@ -# Based on https://github.com/Snektron/nixos-vf2/blob/master/pkgs/linux-vf2.nix -{ - lib, - fetchFromGitHub, - linuxManualConfig, - fetchpatch, - applyPatches, - ... -} @ args: let - modDirVersion = "6.4.0"; - source = builtins.fromJSON (builtins.readFile ./source.json); -in - linuxManualConfig ({ - inherit modDirVersion; - version = "${modDirVersion}-vf2"; - - src = applyPatches { - src = fetchFromGitHub { - owner = "starfive-tech"; - repo = "linux"; - inherit (source) rev sha256; - }; - patches = [ - (fetchpatch { - name = "axp15060-1.patch"; - url = "https://lore.kernel.org/all/20230524000012.15028-2-andre.przywara@arm.com/raw"; - hash = "sha256-kj4vQaT4CV29EHv8MtuTgM/semIPDdv2dmveo/X27vU="; - }) - (fetchpatch { - name = "axp15060-2.patch"; - url = "https://lore.kernel.org/all/20230524000012.15028-3-andre.przywara@arm.com/raw"; - hash = "sha256-QCPQyKqoapMtqEDB9QgAuXA7n8e1OtG+YlIgeSQBxXM="; - }) - (fetchpatch { - name = "axp15060-3.patch"; - url = "https://lore.kernel.org/all/20230524000012.15028-4-andre.przywara@arm.com/raw"; - hash = "sha256-SpKDm4PXR6qs7kX5SGVpFF/EPBijMhX1NsFUHrlCynM="; - }) - ]; - }; - - configfile = ./vf2.config; - - extraMeta = { - branch = "JH7110_VisionFive2_upstream"; - description = "Linux kernel for StarFive's VisionFive2"; - platforms = ["riscv64-linux"]; - }; - } - // (args.argsOverride or {})) diff --git a/packages/linux/vf2/source.json b/packages/linux/vf2/source.json deleted file mode 100644 index fbca0736..00000000 --- a/packages/linux/vf2/source.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "url": "https://github.com/starfive-tech/linux", - "rev": "e5a381c51d624ffd8784db908a58ae227d0608a4", - "date": "2023-06-29T17:00:49+08:00", - "path": "/nix/store/7ks8y8krj0c37m9a0q6dznjh5lkak8gr-linux", - "sha256": "04f9b8aih2pvxl2vj8xm6m4knkly14h4mcj9ylw9m7nxhkcgw3c2", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/linux/vf2/vf2.config b/packages/linux/vf2/vf2.config deleted file mode 100644 index 3b198986..00000000 --- a/packages/linux/vf2/vf2.config +++ /dev/null @@ -1,6349 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# Linux/riscv 6.4.0 Kernel Configuration -# -CONFIG_CC_VERSION_TEXT="riscv64-unknown-linux-gnu-gcc (GCC) 12.3.0" -CONFIG_CC_IS_GCC=y -CONFIG_GCC_VERSION=120300 -CONFIG_CLANG_VERSION=0 -CONFIG_AS_IS_GNU=y -CONFIG_AS_VERSION=24000 -CONFIG_LD_IS_BFD=y -CONFIG_LD_VERSION=24000 -CONFIG_LLD_VERSION=0 -CONFIG_CC_CAN_LINK=y -CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y -CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y -CONFIG_CC_HAS_ASM_INLINE=y -CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y -CONFIG_PAHOLE_VERSION=0 -CONFIG_IRQ_WORK=y -CONFIG_BUILDTIME_TABLE_SORT=y -CONFIG_THREAD_INFO_IN_TASK=y - -# -# General setup -# -CONFIG_INIT_ENV_ARG_LIMIT=32 -# CONFIG_COMPILE_TEST is not set -# CONFIG_WERROR is not set -CONFIG_LOCALVERSION="" -CONFIG_LOCALVERSION_AUTO=y -CONFIG_BUILD_SALT="" -CONFIG_DEFAULT_INIT="" -CONFIG_DEFAULT_HOSTNAME="(none)" -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -CONFIG_SYSVIPC_COMPAT=y -CONFIG_POSIX_MQUEUE=y -CONFIG_POSIX_MQUEUE_SYSCTL=y -# CONFIG_WATCH_QUEUE is not set -CONFIG_CROSS_MEMORY_ATTACH=y -# CONFIG_USELIB is not set -CONFIG_AUDIT=y -CONFIG_HAVE_ARCH_AUDITSYSCALL=y -CONFIG_AUDITSYSCALL=y - -# -# IRQ subsystem -# -CONFIG_GENERIC_IRQ_SHOW=y -CONFIG_GENERIC_IRQ_SHOW_LEVEL=y -CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y -CONFIG_GENERIC_IRQ_MIGRATION=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_CHIP=y -CONFIG_IRQ_DOMAIN=y -CONFIG_IRQ_DOMAIN_HIERARCHY=y -CONFIG_GENERIC_IRQ_IPI=y -CONFIG_GENERIC_IRQ_IPI_MUX=y -CONFIG_GENERIC_MSI_IRQ=y -CONFIG_IRQ_FORCED_THREADING=y -CONFIG_SPARSE_IRQ=y -# CONFIG_GENERIC_IRQ_DEBUGFS is not set -# end of IRQ subsystem - -CONFIG_GENERIC_IRQ_MULTI_HANDLER=y -CONFIG_GENERIC_TIME_VSYSCALL=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_ARCH_HAS_TICK_BROADCAST=y -CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y -CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y -CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y -CONFIG_CONTEXT_TRACKING=y -CONFIG_CONTEXT_TRACKING_IDLE=y - -# -# Timers subsystem -# -CONFIG_TICK_ONESHOT=y -CONFIG_NO_HZ_COMMON=y -# CONFIG_HZ_PERIODIC is not set -# CONFIG_NO_HZ_IDLE is not set -CONFIG_NO_HZ_FULL=y -CONFIG_CONTEXT_TRACKING_USER=y -# CONFIG_CONTEXT_TRACKING_USER_FORCE is not set -# CONFIG_NO_HZ is not set -CONFIG_HIGH_RES_TIMERS=y -# end of Timers subsystem - -CONFIG_BPF=y -CONFIG_HAVE_EBPF_JIT=y - -# -# BPF subsystem -# -CONFIG_BPF_SYSCALL=y -# CONFIG_BPF_JIT is not set -CONFIG_BPF_UNPRIV_DEFAULT_OFF=y -# CONFIG_BPF_PRELOAD is not set -# end of BPF subsystem - -CONFIG_PREEMPT_VOLUNTARY_BUILD=y -# CONFIG_PREEMPT_NONE is not set -CONFIG_PREEMPT_VOLUNTARY=y -# CONFIG_PREEMPT is not set -CONFIG_PREEMPT_COUNT=y - -# -# CPU/Task time and stats accounting -# -CONFIG_VIRT_CPU_ACCOUNTING=y -CONFIG_VIRT_CPU_ACCOUNTING_GEN=y -# CONFIG_IRQ_TIME_ACCOUNTING is not set -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_TASKSTATS=y -CONFIG_TASK_DELAY_ACCT=y -CONFIG_TASK_XACCT=y -CONFIG_TASK_IO_ACCOUNTING=y -CONFIG_PSI=y -# CONFIG_PSI_DEFAULT_DISABLED is not set -# end of CPU/Task time and stats accounting - -CONFIG_CPU_ISOLATION=y - -# -# RCU Subsystem -# -CONFIG_TREE_RCU=y -# CONFIG_RCU_EXPERT is not set -CONFIG_TREE_SRCU=y -CONFIG_TASKS_RCU_GENERIC=y -CONFIG_TASKS_RUDE_RCU=y -CONFIG_TASKS_TRACE_RCU=y -CONFIG_RCU_STALL_COMMON=y -CONFIG_RCU_NEED_SEGCBLIST=y -CONFIG_RCU_NOCB_CPU=y -# CONFIG_RCU_NOCB_CPU_DEFAULT_ALL is not set -CONFIG_RCU_LAZY=y -# end of RCU Subsystem - -CONFIG_IKCONFIG=y -CONFIG_IKCONFIG_PROC=y -# CONFIG_IKHEADERS is not set -CONFIG_LOG_BUF_SHIFT=17 -CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 -# CONFIG_PRINTK_INDEX is not set -CONFIG_GENERIC_SCHED_CLOCK=y - -# -# Scheduler features -# -# CONFIG_UCLAMP_TASK is not set -# end of Scheduler features - -CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y -CONFIG_CC_HAS_INT128=y -CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" -CONFIG_GCC11_NO_ARRAY_BOUNDS=y -CONFIG_CC_NO_ARRAY_BOUNDS=y -CONFIG_ARCH_SUPPORTS_INT128=y -# CONFIG_NUMA_BALANCING is not set -CONFIG_CGROUPS=y -CONFIG_PAGE_COUNTER=y -# CONFIG_CGROUP_FAVOR_DYNMODS is not set -CONFIG_MEMCG=y -CONFIG_MEMCG_KMEM=y -CONFIG_BLK_CGROUP=y -CONFIG_CGROUP_WRITEBACK=y -CONFIG_CGROUP_SCHED=y -CONFIG_FAIR_GROUP_SCHED=y -CONFIG_CFS_BANDWIDTH=y -# CONFIG_RT_GROUP_SCHED is not set -CONFIG_SCHED_MM_CID=y -CONFIG_CGROUP_PIDS=y -CONFIG_CGROUP_RDMA=y -CONFIG_CGROUP_FREEZER=y -CONFIG_CGROUP_HUGETLB=y -CONFIG_CPUSETS=y -CONFIG_PROC_PID_CPUSET=y -CONFIG_CGROUP_DEVICE=y -CONFIG_CGROUP_CPUACCT=y -CONFIG_CGROUP_PERF=y -CONFIG_CGROUP_BPF=y -# CONFIG_CGROUP_MISC is not set -# CONFIG_CGROUP_DEBUG is not set -CONFIG_SOCK_CGROUP_DATA=y -CONFIG_NAMESPACES=y -CONFIG_UTS_NS=y -CONFIG_TIME_NS=y -CONFIG_IPC_NS=y -CONFIG_USER_NS=y -CONFIG_PID_NS=y -CONFIG_NET_NS=y -CONFIG_CHECKPOINT_RESTORE=y -CONFIG_SCHED_AUTOGROUP=y -CONFIG_RELAY=y -CONFIG_BLK_DEV_INITRD=y -CONFIG_INITRAMFS_SOURCE="" -CONFIG_RD_GZIP=y -CONFIG_RD_BZIP2=y -CONFIG_RD_LZMA=y -CONFIG_RD_XZ=y -CONFIG_RD_LZO=y -CONFIG_RD_LZ4=y -CONFIG_RD_ZSTD=y -# CONFIG_BOOT_CONFIG is not set -CONFIG_INITRAMFS_PRESERVE_MTIME=y -CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set -CONFIG_LD_ORPHAN_WARN=y -CONFIG_LD_ORPHAN_WARN_LEVEL="warn" -CONFIG_SYSCTL=y -CONFIG_SYSCTL_EXCEPTION_TRACE=y -CONFIG_EXPERT=y -CONFIG_MULTIUSER=y -# CONFIG_SGETMASK_SYSCALL is not set -# CONFIG_SYSFS_SYSCALL is not set -CONFIG_FHANDLE=y -CONFIG_POSIX_TIMERS=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_FUTEX_PI=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_TIMERFD=y -CONFIG_EVENTFD=y -CONFIG_SHMEM=y -CONFIG_AIO=y -CONFIG_IO_URING=y -CONFIG_ADVISE_SYSCALLS=y -CONFIG_MEMBARRIER=y -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_SELFTEST is not set -# CONFIG_KALLSYMS_ALL is not set -CONFIG_KALLSYMS_BASE_RELATIVE=y -CONFIG_KCMP=y -CONFIG_RSEQ=y -# CONFIG_DEBUG_RSEQ is not set -# CONFIG_EMBEDDED is not set -CONFIG_HAVE_PERF_EVENTS=y -# CONFIG_PC104 is not set - -# -# Kernel Performance Events And Counters -# -CONFIG_PERF_EVENTS=y -# CONFIG_DEBUG_PERF_USE_VMALLOC is not set -# end of Kernel Performance Events And Counters - -CONFIG_SYSTEM_DATA_VERIFICATION=y -CONFIG_PROFILING=y -CONFIG_TRACEPOINTS=y -# end of General setup - -CONFIG_64BIT=y -CONFIG_RISCV=y -CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE=y -CONFIG_ARCH_MMAP_RND_BITS_MIN=18 -CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 -CONFIG_ARCH_MMAP_RND_BITS_MAX=24 -CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=17 -CONFIG_RISCV_SBI=y -CONFIG_MMU=y -CONFIG_PAGE_OFFSET=0xff60000000000000 -CONFIG_ARCH_SPARSEMEM_ENABLE=y -CONFIG_ARCH_SELECT_MEMORY_MODEL=y -CONFIG_ARCH_SUPPORTS_UPROBES=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_GENERIC_BUG=y -CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_GENERIC_CSUM=y -CONFIG_GENERIC_HWEIGHT=y -CONFIG_FIX_EARLYCON_MEM=y -CONFIG_PGTABLE_LEVELS=5 -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_RISCV_DMA_NONCOHERENT=y -CONFIG_AS_HAS_INSN=y - -# -# SoC selection -# -CONFIG_ARCH_MICROCHIP_POLARFIRE=y -CONFIG_SOC_MICROCHIP_POLARFIRE=y -CONFIG_ARCH_RENESAS=y -CONFIG_ARCH_SIFIVE=y -CONFIG_SOC_SIFIVE=y -CONFIG_ARCH_STARFIVE=y -CONFIG_SOC_STARFIVE=y -CONFIG_ARCH_SUNXI=y -CONFIG_ARCH_VIRT=y -CONFIG_SOC_VIRT=y -# end of SoC selection - -# -# CPU errata selection -# -CONFIG_ERRATA_SIFIVE=y -CONFIG_ERRATA_SIFIVE_CIP_453=y -CONFIG_ERRATA_SIFIVE_CIP_1200=y -CONFIG_ERRATA_THEAD=y -CONFIG_ERRATA_THEAD_PBMT=y -CONFIG_ERRATA_THEAD_CMO=y -CONFIG_ERRATA_THEAD_PMU=y -# end of CPU errata selection - -# -# Platform type -# -# CONFIG_NONPORTABLE is not set -CONFIG_ARCH_RV64I=y -# CONFIG_CMODEL_MEDLOW is not set -CONFIG_CMODEL_MEDANY=y -CONFIG_MODULE_SECTIONS=y -CONFIG_SMP=y -# CONFIG_SCHED_MC is not set -CONFIG_NR_CPUS=64 -CONFIG_HOTPLUG_CPU=y -CONFIG_TUNE_GENERIC=y -CONFIG_NUMA=y -CONFIG_NODES_SHIFT=2 -CONFIG_RISCV_ALTERNATIVE=y -CONFIG_RISCV_ALTERNATIVE_EARLY=y -CONFIG_RISCV_ISA_C=y -CONFIG_RISCV_ISA_SVNAPOT=y -CONFIG_RISCV_ISA_SVPBMT=y -CONFIG_TOOLCHAIN_HAS_ZBB=y -CONFIG_RISCV_ISA_ZBB=y -CONFIG_RISCV_ISA_ZICBOM=y -CONFIG_RISCV_ISA_ZICBOZ=y -CONFIG_TOOLCHAIN_HAS_ZIHINTPAUSE=y -CONFIG_TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI=y -CONFIG_FPU=y -# end of Platform type - -# -# Kernel features -# -# CONFIG_HZ_100 is not set -CONFIG_HZ_250=y -# CONFIG_HZ_300 is not set -# CONFIG_HZ_1000 is not set -CONFIG_HZ=250 -CONFIG_SCHED_HRTICK=y -# CONFIG_RISCV_SBI_V01 is not set -# CONFIG_RISCV_BOOT_SPINWAIT is not set -# CONFIG_KEXEC is not set -CONFIG_KEXEC_FILE=y -CONFIG_ARCH_HAS_KEXEC_PURGATORY=y -# CONFIG_CRASH_DUMP is not set -CONFIG_COMPAT=y -# CONFIG_RELOCATABLE is not set -# end of Kernel features - -# -# Boot options -# -CONFIG_CMDLINE="" -CONFIG_EFI_STUB=y -CONFIG_EFI=y -CONFIG_CC_HAVE_STACKPROTECTOR_TLS=y -CONFIG_STACKPROTECTOR_PER_TASK=y -# end of Boot options - -CONFIG_PORTABLE=y - -# -# Power management options -# -CONFIG_PM=y -# CONFIG_PM_DEBUG is not set -CONFIG_PM_CLK=y -CONFIG_PM_GENERIC_DOMAINS=y -# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set -CONFIG_PM_GENERIC_DOMAINS_OF=y -CONFIG_CPU_PM=y -# CONFIG_ENERGY_MODEL is not set -# end of Power management options - -# -# CPU Power Management -# - -# -# CPU Idle -# -CONFIG_CPU_IDLE=y -CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y -CONFIG_CPU_IDLE_GOV_LADDER=y -CONFIG_CPU_IDLE_GOV_MENU=y -# CONFIG_CPU_IDLE_GOV_TEO is not set -CONFIG_DT_IDLE_STATES=y -CONFIG_DT_IDLE_GENPD=y - -# -# RISC-V CPU Idle Drivers -# -CONFIG_RISCV_SBI_CPUIDLE=y -# end of RISC-V CPU Idle Drivers -# end of CPU Idle - -# -# CPU Frequency scaling -# -CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_GOV_ATTR_SET=y -# CONFIG_CPU_FREQ_STAT is not set -CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y -# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set -CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set -# CONFIG_CPU_FREQ_GOV_USERSPACE is not set -# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set -# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set -CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y - -# -# CPU frequency scaling drivers -# -CONFIG_CPUFREQ_DT=y -CONFIG_CPUFREQ_DT_PLATDEV=y -# end of CPU Frequency scaling -# end of CPU Power Management - -CONFIG_VIRTUALIZATION=y -# CONFIG_KVM is not set - -# -# General architecture-dependent options -# -CONFIG_CRASH_CORE=y -CONFIG_KEXEC_CORE=y -CONFIG_KEXEC_ELF=y -CONFIG_GENERIC_ENTRY=y -CONFIG_KPROBES=y -CONFIG_JUMP_LABEL=y -# CONFIG_STATIC_KEYS_SELFTEST is not set -CONFIG_KPROBES_ON_FTRACE=y -CONFIG_UPROBES=y -CONFIG_HAVE_64BIT_ALIGNED_ACCESS=y -CONFIG_KRETPROBES=y -CONFIG_KRETPROBE_ON_RETHOOK=y -CONFIG_HAVE_KPROBES=y -CONFIG_HAVE_KRETPROBES=y -CONFIG_HAVE_KPROBES_ON_FTRACE=y -CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_HAVE_ARCH_TRACEHOOK=y -CONFIG_HAVE_DMA_CONTIGUOUS=y -CONFIG_GENERIC_SMP_IDLE_THREAD=y -CONFIG_GENERIC_IDLE_POLL_SETUP=y -CONFIG_ARCH_HAS_FORTIFY_SOURCE=y -CONFIG_ARCH_HAS_SET_MEMORY=y -CONFIG_ARCH_HAS_SET_DIRECT_MAP=y -CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y -CONFIG_HAVE_ASM_MODVERSIONS=y -CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y -CONFIG_HAVE_RSEQ=y -CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y -CONFIG_HAVE_PERF_REGS=y -CONFIG_HAVE_PERF_USER_STACK_DUMP=y -CONFIG_HAVE_ARCH_JUMP_LABEL=y -CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y -CONFIG_MMU_LAZY_TLB_REFCOUNT=y -CONFIG_HAVE_ARCH_SECCOMP=y -CONFIG_HAVE_ARCH_SECCOMP_FILTER=y -CONFIG_SECCOMP=y -CONFIG_SECCOMP_FILTER=y -# CONFIG_SECCOMP_CACHE_DEBUG is not set -CONFIG_HAVE_STACKPROTECTOR=y -CONFIG_STACKPROTECTOR=y -CONFIG_STACKPROTECTOR_STRONG=y -CONFIG_LTO_NONE=y -CONFIG_HAVE_CONTEXT_TRACKING_USER=y -CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y -CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y -CONFIG_HAVE_MOVE_PUD=y -CONFIG_HAVE_MOVE_PMD=y -CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y -CONFIG_HAVE_ARCH_HUGE_VMAP=y -CONFIG_HAVE_ARCH_HUGE_VMALLOC=y -CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y -CONFIG_HAVE_MOD_ARCH_SPECIFIC=y -CONFIG_MODULES_USE_ELF_RELA=y -CONFIG_ARCH_HAS_ELF_RANDOMIZE=y -CONFIG_HAVE_ARCH_MMAP_RND_BITS=y -CONFIG_ARCH_MMAP_RND_BITS=18 -CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y -CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8 -CONFIG_PAGE_SIZE_LESS_THAN_64KB=y -CONFIG_PAGE_SIZE_LESS_THAN_256KB=y -CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y -CONFIG_CLONE_BACKWARDS=y -CONFIG_COMPAT_32BIT_TIME=y -CONFIG_HAVE_ARCH_VMAP_STACK=y -CONFIG_VMAP_STACK=y -CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y -CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y -CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y -CONFIG_STRICT_KERNEL_RWX=y -CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y -CONFIG_STRICT_MODULE_RWX=y -CONFIG_ARCH_USE_MEMREMAP_PROT=y -# CONFIG_LOCK_EVENT_COUNTS is not set -CONFIG_ARCH_HAS_VDSO_DATA=y -CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y -CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y -CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y - -# -# GCOV-based kernel profiling -# -# CONFIG_GCOV_KERNEL is not set -CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y -# end of GCOV-based kernel profiling - -CONFIG_HAVE_GCC_PLUGINS=y -CONFIG_GCC_PLUGINS=y -# CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set -CONFIG_FUNCTION_ALIGNMENT=0 -# end of General architecture-dependent options - -CONFIG_RT_MUTEXES=y -CONFIG_BASE_SMALL=0 -CONFIG_MODULES=y -# CONFIG_MODULE_DEBUG is not set -# CONFIG_MODULE_FORCE_LOAD is not set -CONFIG_MODULE_UNLOAD=y -# CONFIG_MODULE_FORCE_UNLOAD is not set -# CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set -# CONFIG_MODVERSIONS is not set -# CONFIG_MODULE_SRCVERSION_ALL is not set -# CONFIG_MODULE_SIG is not set -# CONFIG_MODULE_COMPRESS_NONE is not set -# CONFIG_MODULE_COMPRESS_GZIP is not set -CONFIG_MODULE_COMPRESS_XZ=y -# CONFIG_MODULE_COMPRESS_ZSTD is not set -# CONFIG_MODULE_DECOMPRESS is not set -# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set -CONFIG_MODPROBE_PATH="/sbin/modprobe" -# CONFIG_TRIM_UNUSED_KSYMS is not set -CONFIG_MODULES_TREE_LOOKUP=y -CONFIG_BLOCK=y -CONFIG_BLOCK_LEGACY_AUTOLOAD=y -CONFIG_BLK_RQ_ALLOC_TIME=y -CONFIG_BLK_CGROUP_RWSTAT=y -CONFIG_BLK_DEV_BSG_COMMON=y -CONFIG_BLK_DEV_BSGLIB=y -CONFIG_BLK_DEV_INTEGRITY=y -CONFIG_BLK_DEV_INTEGRITY_T10=y -# CONFIG_BLK_DEV_ZONED is not set -CONFIG_BLK_DEV_THROTTLING=y -# CONFIG_BLK_DEV_THROTTLING_LOW is not set -CONFIG_BLK_WBT=y -CONFIG_BLK_WBT_MQ=y -CONFIG_BLK_CGROUP_IOLATENCY=y -CONFIG_BLK_CGROUP_IOCOST=y -# CONFIG_BLK_CGROUP_IOPRIO is not set -CONFIG_BLK_DEBUG_FS=y -CONFIG_BLK_SED_OPAL=y -# CONFIG_BLK_INLINE_ENCRYPTION is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_AIX_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -CONFIG_LDM_PARTITION=y -# CONFIG_LDM_DEBUG is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_KARMA_PARTITION is not set -CONFIG_EFI_PARTITION=y -# CONFIG_SYSV68_PARTITION is not set -# CONFIG_CMDLINE_PARTITION is not set -# end of Partition Types - -CONFIG_BLK_MQ_PCI=y -CONFIG_BLK_MQ_VIRTIO=y -CONFIG_BLK_PM=y -CONFIG_BLOCK_HOLDER_DEPRECATED=y -CONFIG_BLK_MQ_STACKING=y - -# -# IO Schedulers -# -CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=y -# CONFIG_IOSCHED_BFQ is not set -# end of IO Schedulers - -CONFIG_ASN1=y -CONFIG_UNINLINE_SPIN_UNLOCK=y -CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y -CONFIG_MUTEX_SPIN_ON_OWNER=y -CONFIG_RWSEM_SPIN_ON_OWNER=y -CONFIG_LOCK_SPIN_ON_OWNER=y -CONFIG_ARCH_USE_QUEUED_RWLOCKS=y -CONFIG_QUEUED_RWLOCKS=y -CONFIG_ARCH_HAS_MMIOWB=y -CONFIG_MMIOWB=y -CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y -CONFIG_FREEZER=y - -# -# Executable file formats -# -CONFIG_BINFMT_ELF=y -CONFIG_COMPAT_BINFMT_ELF=y -CONFIG_ELFCORE=y -CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y -CONFIG_BINFMT_SCRIPT=y -CONFIG_ARCH_HAS_BINFMT_FLAT=y -# CONFIG_BINFMT_FLAT is not set -CONFIG_BINFMT_MISC=y -CONFIG_COREDUMP=y -# end of Executable file formats - -# -# Memory Management options -# -CONFIG_ZPOOL=y -CONFIG_SWAP=y -CONFIG_ZSWAP=y -# CONFIG_ZSWAP_DEFAULT_ON is not set -# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set -CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y -# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_842 is not set -# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set -# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4HC is not set -# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set -CONFIG_ZSWAP_COMPRESSOR_DEFAULT="lzo" -CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y -# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set -# CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC is not set -CONFIG_ZSWAP_ZPOOL_DEFAULT="zbud" -CONFIG_ZBUD=y -# CONFIG_Z3FOLD is not set -CONFIG_ZSMALLOC=y -# CONFIG_ZSMALLOC_STAT is not set -CONFIG_ZSMALLOC_CHAIN_SIZE=8 - -# -# SLAB allocator options -# -# CONFIG_SLAB is not set -CONFIG_SLUB=y -# CONFIG_SLUB_TINY is not set -CONFIG_SLAB_MERGE_DEFAULT=y -CONFIG_SLAB_FREELIST_RANDOM=y -CONFIG_SLAB_FREELIST_HARDENED=y -# CONFIG_SLUB_STATS is not set -CONFIG_SLUB_CPU_PARTIAL=y -# end of SLAB allocator options - -# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set -CONFIG_COMPAT_BRK=y -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_SPARSEMEM_MANUAL=y -CONFIG_SPARSEMEM=y -CONFIG_SPARSEMEM_EXTREME=y -CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y -CONFIG_SPARSEMEM_VMEMMAP=y -CONFIG_ARCH_WANT_OPTIMIZE_VMEMMAP=y -CONFIG_MEMORY_ISOLATION=y -CONFIG_EXCLUSIVE_SYSTEM_RAM=y -CONFIG_SPLIT_PTLOCK_CPUS=4 -CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y -CONFIG_MEMORY_BALLOON=y -CONFIG_BALLOON_COMPACTION=y -CONFIG_COMPACTION=y -CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1 -CONFIG_PAGE_REPORTING=y -CONFIG_MIGRATION=y -CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y -CONFIG_ARCH_ENABLE_THP_MIGRATION=y -CONFIG_CONTIG_ALLOC=y -CONFIG_PHYS_ADDR_T_64BIT=y -CONFIG_KSM=y -CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 -CONFIG_ARCH_WANTS_THP_SWAP=y -CONFIG_TRANSPARENT_HUGEPAGE=y -# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set -CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y -CONFIG_THP_SWAP=y -# CONFIG_READ_ONLY_THP_FOR_FS is not set -CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y -CONFIG_USE_PERCPU_NUMA_NODE_ID=y -CONFIG_FRONTSWAP=y -CONFIG_CMA=y -# CONFIG_CMA_DEBUG is not set -# CONFIG_CMA_DEBUGFS is not set -# CONFIG_CMA_SYSFS is not set -CONFIG_CMA_AREAS=19 -CONFIG_GENERIC_EARLY_IOREMAP=y -# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set -CONFIG_PAGE_IDLE_FLAG=y -CONFIG_IDLE_PAGE_TRACKING=y -CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y -CONFIG_ZONE_DMA32=y -CONFIG_VM_EVENT_COUNTERS=y -# CONFIG_PERCPU_STATS is not set -# CONFIG_GUP_TEST is not set -# CONFIG_DMAPOOL_TEST is not set -CONFIG_ARCH_HAS_PTE_SPECIAL=y -CONFIG_SECRETMEM=y -# CONFIG_ANON_VMA_NAME is not set -CONFIG_USERFAULTFD=y -CONFIG_LRU_GEN=y -CONFIG_LRU_GEN_ENABLED=y -# CONFIG_LRU_GEN_STATS is not set - -# -# Data Access Monitoring -# -CONFIG_DAMON=y -CONFIG_DAMON_VADDR=y -CONFIG_DAMON_PADDR=y -CONFIG_DAMON_SYSFS=y -CONFIG_DAMON_DBGFS=y -CONFIG_DAMON_RECLAIM=y -CONFIG_DAMON_LRU_SORT=y -# end of Data Access Monitoring -# end of Memory Management options - -CONFIG_NET=y -CONFIG_COMPAT_NETLINK_MESSAGES=y -CONFIG_NET_INGRESS=y -CONFIG_NET_EGRESS=y -CONFIG_SKB_EXTENSIONS=y - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_DIAG is not set -CONFIG_UNIX=y -CONFIG_UNIX_SCM=y -CONFIG_AF_UNIX_OOB=y -# CONFIG_UNIX_DIAG is not set -CONFIG_TLS=y -CONFIG_TLS_DEVICE=y -# CONFIG_TLS_TOE is not set -# CONFIG_XFRM_USER is not set -# CONFIG_NET_KEY is not set -# CONFIG_SMC is not set -CONFIG_XDP_SOCKETS=y -CONFIG_XDP_SOCKETS_DIAG=y -CONFIG_NET_HANDSHAKE=y -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_ADVANCED_ROUTER=y -# CONFIG_IP_FIB_TRIE_STATS is not set -CONFIG_IP_MULTIPLE_TABLES=y -# CONFIG_IP_ROUTE_MULTIPATH is not set -CONFIG_IP_ROUTE_VERBOSE=y -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE_DEMUX is not set -CONFIG_NET_IP_TUNNEL=y -CONFIG_IP_MROUTE_COMMON=y -# CONFIG_IP_MROUTE is not set -CONFIG_SYN_COOKIES=y -# CONFIG_NET_IPVTI is not set -CONFIG_NET_UDP_TUNNEL=y -CONFIG_NET_FOU=y -CONFIG_NET_FOU_IP_TUNNELS=y -# CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set -# CONFIG_INET_IPCOMP is not set -CONFIG_INET_TABLE_PERTURB_ORDER=16 -CONFIG_INET_TUNNEL=y -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y -# CONFIG_INET_UDP_DIAG is not set -# CONFIG_INET_RAW_DIAG is not set -CONFIG_INET_DIAG_DESTROY=y -CONFIG_TCP_CONG_ADVANCED=y -# CONFIG_TCP_CONG_BIC is not set -CONFIG_TCP_CONG_CUBIC=y -# CONFIG_TCP_CONG_WESTWOOD is not set -# CONFIG_TCP_CONG_HTCP is not set -# CONFIG_TCP_CONG_HSTCP is not set -# CONFIG_TCP_CONG_HYBLA is not set -# CONFIG_TCP_CONG_VEGAS is not set -# CONFIG_TCP_CONG_NV is not set -# CONFIG_TCP_CONG_SCALABLE is not set -# CONFIG_TCP_CONG_LP is not set -# CONFIG_TCP_CONG_VENO is not set -# CONFIG_TCP_CONG_YEAH is not set -# CONFIG_TCP_CONG_ILLINOIS is not set -# CONFIG_TCP_CONG_DCTCP is not set -# CONFIG_TCP_CONG_CDG is not set -# CONFIG_TCP_CONG_BBR is not set -CONFIG_DEFAULT_CUBIC=y -# CONFIG_DEFAULT_RENO is not set -CONFIG_DEFAULT_TCP_CONG="cubic" -# CONFIG_TCP_MD5SIG is not set -CONFIG_IPV6=y -CONFIG_IPV6_ROUTER_PREF=y -CONFIG_IPV6_ROUTE_INFO=y -CONFIG_IPV6_OPTIMISTIC_DAD=y -# CONFIG_INET6_AH is not set -# CONFIG_INET6_ESP is not set -# CONFIG_INET6_IPCOMP is not set -# CONFIG_IPV6_MIP6 is not set -# CONFIG_IPV6_ILA is not set -CONFIG_INET6_TUNNEL=y -# CONFIG_IPV6_VTI is not set -CONFIG_IPV6_SIT=y -# CONFIG_IPV6_SIT_6RD is not set -CONFIG_IPV6_NDISC_NODETYPE=y -CONFIG_IPV6_TUNNEL=y -CONFIG_IPV6_FOU=y -CONFIG_IPV6_FOU_TUNNEL=y -CONFIG_IPV6_MULTIPLE_TABLES=y -CONFIG_IPV6_SUBTREES=y -CONFIG_IPV6_MROUTE=y -CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y -CONFIG_IPV6_PIMSM_V2=y -CONFIG_IPV6_SEG6_LWTUNNEL=y -CONFIG_IPV6_SEG6_HMAC=y -CONFIG_IPV6_SEG6_BPF=y -# CONFIG_IPV6_RPL_LWTUNNEL is not set -# CONFIG_IPV6_IOAM6_LWTUNNEL is not set -# CONFIG_NETLABEL is not set -CONFIG_MPTCP=y -CONFIG_INET_MPTCP_DIAG=y -CONFIG_MPTCP_IPV6=y -CONFIG_NETWORK_SECMARK=y -CONFIG_NET_PTP_CLASSIFY=y -# CONFIG_NETWORK_PHY_TIMESTAMPING is not set -CONFIG_NETFILTER=y -CONFIG_NETFILTER_ADVANCED=y -# CONFIG_BRIDGE_NETFILTER is not set - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_INGRESS=y -CONFIG_NETFILTER_EGRESS=y -CONFIG_NETFILTER_NETLINK=y -CONFIG_NETFILTER_FAMILY_ARP=y -CONFIG_NETFILTER_BPF_LINK=y -# CONFIG_NETFILTER_NETLINK_HOOK is not set -# CONFIG_NETFILTER_NETLINK_ACCT is not set -# CONFIG_NETFILTER_NETLINK_QUEUE is not set -# CONFIG_NETFILTER_NETLINK_LOG is not set -# CONFIG_NETFILTER_NETLINK_OSF is not set -CONFIG_NF_CONNTRACK=y -CONFIG_NF_LOG_SYSLOG=y -CONFIG_NF_CONNTRACK_MARK=y -# CONFIG_NF_CONNTRACK_SECMARK is not set -CONFIG_NF_CONNTRACK_ZONES=y -# CONFIG_NF_CONNTRACK_PROCFS is not set -CONFIG_NF_CONNTRACK_EVENTS=y -CONFIG_NF_CONNTRACK_TIMEOUT=y -CONFIG_NF_CONNTRACK_TIMESTAMP=y -CONFIG_NF_CONNTRACK_LABELS=y -CONFIG_NF_CT_PROTO_DCCP=y -CONFIG_NF_CT_PROTO_SCTP=y -CONFIG_NF_CT_PROTO_UDPLITE=y -# CONFIG_NF_CONNTRACK_AMANDA is not set -# CONFIG_NF_CONNTRACK_FTP is not set -# CONFIG_NF_CONNTRACK_H323 is not set -# CONFIG_NF_CONNTRACK_IRC is not set -# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set -# CONFIG_NF_CONNTRACK_SNMP is not set -# CONFIG_NF_CONNTRACK_PPTP is not set -# CONFIG_NF_CONNTRACK_SANE is not set -# CONFIG_NF_CONNTRACK_SIP is not set -# CONFIG_NF_CONNTRACK_TFTP is not set -# CONFIG_NF_CT_NETLINK is not set -# CONFIG_NF_CT_NETLINK_TIMEOUT is not set -CONFIG_NF_NAT=y -CONFIG_NF_NAT_MASQUERADE=y -CONFIG_NF_TABLES=y -CONFIG_NF_TABLES_INET=y -CONFIG_NF_TABLES_NETDEV=y -# CONFIG_NFT_NUMGEN is not set -# CONFIG_NFT_CT is not set -# CONFIG_NFT_CONNLIMIT is not set -# CONFIG_NFT_LOG is not set -# CONFIG_NFT_LIMIT is not set -# CONFIG_NFT_MASQ is not set -# CONFIG_NFT_REDIR is not set -CONFIG_NFT_NAT=y -# CONFIG_NFT_TUNNEL is not set -# CONFIG_NFT_QUOTA is not set -# CONFIG_NFT_REJECT is not set -CONFIG_NFT_COMPAT=y -# CONFIG_NFT_HASH is not set -# CONFIG_NFT_SOCKET is not set -# CONFIG_NFT_OSF is not set -# CONFIG_NFT_TPROXY is not set -# CONFIG_NFT_SYNPROXY is not set -# CONFIG_NF_DUP_NETDEV is not set -# CONFIG_NFT_DUP_NETDEV is not set -# CONFIG_NFT_FWD_NETDEV is not set -# CONFIG_NF_FLOW_TABLE is not set -CONFIG_NETFILTER_XTABLES=y -# CONFIG_NETFILTER_XTABLES_COMPAT is not set - -# -# Xtables combined modules -# -CONFIG_NETFILTER_XT_MARK=y -# CONFIG_NETFILTER_XT_CONNMARK is not set - -# -# Xtables targets -# -# CONFIG_NETFILTER_XT_TARGET_AUDIT is not set -# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set -# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set -# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set -# CONFIG_NETFILTER_XT_TARGET_CT is not set -# CONFIG_NETFILTER_XT_TARGET_DSCP is not set -# CONFIG_NETFILTER_XT_TARGET_HL is not set -# CONFIG_NETFILTER_XT_TARGET_HMARK is not set -# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set -# CONFIG_NETFILTER_XT_TARGET_LED is not set -CONFIG_NETFILTER_XT_TARGET_LOG=y -# CONFIG_NETFILTER_XT_TARGET_MARK is not set -# CONFIG_NETFILTER_XT_NAT is not set -# CONFIG_NETFILTER_XT_TARGET_NETMAP is not set -# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set -# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set -# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set -# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set -# CONFIG_NETFILTER_XT_TARGET_REDIRECT is not set -CONFIG_NETFILTER_XT_TARGET_MASQUERADE=y -# CONFIG_NETFILTER_XT_TARGET_TEE is not set -# CONFIG_NETFILTER_XT_TARGET_TPROXY is not set -# CONFIG_NETFILTER_XT_TARGET_TRACE is not set -# CONFIG_NETFILTER_XT_TARGET_SECMARK is not set -# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set -# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set - -# -# Xtables matches -# -# CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set -# CONFIG_NETFILTER_XT_MATCH_BPF is not set -# CONFIG_NETFILTER_XT_MATCH_CGROUP is not set -# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set -# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set -# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set -# CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set -# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set -# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y -# CONFIG_NETFILTER_XT_MATCH_CPU is not set -# CONFIG_NETFILTER_XT_MATCH_DCCP is not set -# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set -# CONFIG_NETFILTER_XT_MATCH_DSCP is not set -# CONFIG_NETFILTER_XT_MATCH_ECN is not set -# CONFIG_NETFILTER_XT_MATCH_ESP is not set -# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set -# CONFIG_NETFILTER_XT_MATCH_HELPER is not set -# CONFIG_NETFILTER_XT_MATCH_HL is not set -# CONFIG_NETFILTER_XT_MATCH_IPCOMP is not set -# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set -# CONFIG_NETFILTER_XT_MATCH_L2TP is not set -# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set -# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set -# CONFIG_NETFILTER_XT_MATCH_MAC is not set -# CONFIG_NETFILTER_XT_MATCH_MARK is not set -# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set -# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set -# CONFIG_NETFILTER_XT_MATCH_OSF is not set -# CONFIG_NETFILTER_XT_MATCH_OWNER is not set -CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y -# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set -# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set -# CONFIG_NETFILTER_XT_MATCH_REALM is not set -# CONFIG_NETFILTER_XT_MATCH_RECENT is not set -# CONFIG_NETFILTER_XT_MATCH_SCTP is not set -# CONFIG_NETFILTER_XT_MATCH_SOCKET is not set -# CONFIG_NETFILTER_XT_MATCH_STATE is not set -# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set -# CONFIG_NETFILTER_XT_MATCH_STRING is not set -# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set -# CONFIG_NETFILTER_XT_MATCH_TIME is not set -# CONFIG_NETFILTER_XT_MATCH_U32 is not set -# end of Core Netfilter Configuration - -# CONFIG_IP_SET is not set -# CONFIG_IP_VS is not set - -# -# IP: Netfilter Configuration -# -CONFIG_NF_DEFRAG_IPV4=y -# CONFIG_NF_SOCKET_IPV4 is not set -# CONFIG_NF_TPROXY_IPV4 is not set -CONFIG_NF_TABLES_IPV4=y -# CONFIG_NFT_DUP_IPV4 is not set -# CONFIG_NFT_FIB_IPV4 is not set -CONFIG_NF_TABLES_ARP=y -# CONFIG_NF_DUP_IPV4 is not set -# CONFIG_NF_LOG_ARP is not set -# CONFIG_NF_LOG_IPV4 is not set -# CONFIG_NF_REJECT_IPV4 is not set -CONFIG_IP_NF_IPTABLES=y -# CONFIG_IP_NF_MATCH_AH is not set -# CONFIG_IP_NF_MATCH_ECN is not set -CONFIG_IP_NF_MATCH_RPFILTER=y -# CONFIG_IP_NF_MATCH_TTL is not set -# CONFIG_IP_NF_FILTER is not set -# CONFIG_IP_NF_TARGET_SYNPROXY is not set -# CONFIG_IP_NF_NAT is not set -CONFIG_IP_NF_MANGLE=y -# CONFIG_IP_NF_TARGET_ECN is not set -# CONFIG_IP_NF_TARGET_TTL is not set -CONFIG_IP_NF_RAW=y -# CONFIG_IP_NF_SECURITY is not set -# CONFIG_IP_NF_ARPTABLES is not set -# end of IP: Netfilter Configuration - -# -# IPv6: Netfilter Configuration -# -# CONFIG_NF_SOCKET_IPV6 is not set -# CONFIG_NF_TPROXY_IPV6 is not set -CONFIG_NF_TABLES_IPV6=y -# CONFIG_NFT_DUP_IPV6 is not set -# CONFIG_NFT_FIB_IPV6 is not set -# CONFIG_NF_DUP_IPV6 is not set -# CONFIG_NF_REJECT_IPV6 is not set -CONFIG_NF_LOG_IPV6=y -CONFIG_IP6_NF_IPTABLES=y -# CONFIG_IP6_NF_MATCH_AH is not set -# CONFIG_IP6_NF_MATCH_EUI64 is not set -# CONFIG_IP6_NF_MATCH_FRAG is not set -# CONFIG_IP6_NF_MATCH_OPTS is not set -# CONFIG_IP6_NF_MATCH_HL is not set -# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set -# CONFIG_IP6_NF_MATCH_MH is not set -CONFIG_IP6_NF_MATCH_RPFILTER=y -# CONFIG_IP6_NF_MATCH_RT is not set -# CONFIG_IP6_NF_MATCH_SRH is not set -# CONFIG_IP6_NF_TARGET_HL is not set -# CONFIG_IP6_NF_FILTER is not set -# CONFIG_IP6_NF_TARGET_SYNPROXY is not set -CONFIG_IP6_NF_MANGLE=y -CONFIG_IP6_NF_RAW=y -# CONFIG_IP6_NF_SECURITY is not set -# CONFIG_IP6_NF_NAT is not set -# end of IPv6: Netfilter Configuration - -CONFIG_NF_DEFRAG_IPV6=y -# CONFIG_NF_TABLES_BRIDGE is not set -# CONFIG_NF_CONNTRACK_BRIDGE is not set -# CONFIG_BRIDGE_NF_EBTABLES is not set -# CONFIG_BPFILTER is not set -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -# CONFIG_RDS is not set -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -# CONFIG_L2TP is not set -CONFIG_STP=y -CONFIG_BRIDGE=y -CONFIG_BRIDGE_IGMP_SNOOPING=y -CONFIG_BRIDGE_VLAN_FILTERING=y -# CONFIG_BRIDGE_MRP is not set -# CONFIG_BRIDGE_CFM is not set -# CONFIG_NET_DSA is not set -CONFIG_VLAN_8021Q=y -# CONFIG_VLAN_8021Q_GVRP is not set -# CONFIG_VLAN_8021Q_MVRP is not set -CONFIG_LLC=y -# CONFIG_LLC2 is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_PHONET is not set -# CONFIG_6LOWPAN is not set -# CONFIG_IEEE802154 is not set -CONFIG_NET_SCHED=y - -# -# Queueing/Scheduling -# -# CONFIG_NET_SCH_HTB is not set -# CONFIG_NET_SCH_HFSC is not set -# CONFIG_NET_SCH_PRIO is not set -# CONFIG_NET_SCH_MULTIQ is not set -# CONFIG_NET_SCH_RED is not set -# CONFIG_NET_SCH_SFB is not set -# CONFIG_NET_SCH_SFQ is not set -# CONFIG_NET_SCH_TEQL is not set -# CONFIG_NET_SCH_TBF is not set -# CONFIG_NET_SCH_CBS is not set -# CONFIG_NET_SCH_ETF is not set -# CONFIG_NET_SCH_TAPRIO is not set -# CONFIG_NET_SCH_GRED is not set -# CONFIG_NET_SCH_NETEM is not set -# CONFIG_NET_SCH_DRR is not set -# CONFIG_NET_SCH_MQPRIO is not set -# CONFIG_NET_SCH_SKBPRIO is not set -# CONFIG_NET_SCH_CHOKE is not set -# CONFIG_NET_SCH_QFQ is not set -# CONFIG_NET_SCH_CODEL is not set -CONFIG_NET_SCH_FQ_CODEL=y -# CONFIG_NET_SCH_CAKE is not set -# CONFIG_NET_SCH_FQ is not set -# CONFIG_NET_SCH_HHF is not set -# CONFIG_NET_SCH_PIE is not set -# CONFIG_NET_SCH_PLUG is not set -# CONFIG_NET_SCH_ETS is not set -# CONFIG_NET_SCH_DEFAULT is not set - -# -# Classification -# -# CONFIG_NET_CLS_BASIC is not set -# CONFIG_NET_CLS_ROUTE4 is not set -# CONFIG_NET_CLS_FW is not set -# CONFIG_NET_CLS_U32 is not set -# CONFIG_NET_CLS_FLOW is not set -# CONFIG_NET_CLS_CGROUP is not set -# CONFIG_NET_CLS_BPF is not set -# CONFIG_NET_CLS_FLOWER is not set -# CONFIG_NET_CLS_MATCHALL is not set -# CONFIG_NET_EMATCH is not set -# CONFIG_NET_CLS_ACT is not set -CONFIG_NET_SCH_FIFO=y -# CONFIG_DCB is not set -CONFIG_DNS_RESOLVER=y -# CONFIG_BATMAN_ADV is not set -# CONFIG_OPENVSWITCH is not set -# CONFIG_VSOCKETS is not set -CONFIG_NETLINK_DIAG=y -CONFIG_MPLS=y -# CONFIG_NET_MPLS_GSO is not set -# CONFIG_MPLS_ROUTING is not set -# CONFIG_NET_NSH is not set -# CONFIG_HSR is not set -CONFIG_NET_SWITCHDEV=y -CONFIG_NET_L3_MASTER_DEV=y -# CONFIG_QRTR is not set -# CONFIG_NET_NCSI is not set -CONFIG_PCPU_DEV_REFCNT=y -CONFIG_MAX_SKB_FRAGS=17 -CONFIG_RPS=y -CONFIG_RFS_ACCEL=y -CONFIG_SOCK_RX_QUEUE_MAPPING=y -CONFIG_XPS=y -CONFIG_CGROUP_NET_PRIO=y -CONFIG_CGROUP_NET_CLASSID=y -CONFIG_NET_RX_BUSY_POLL=y -CONFIG_BQL=y -CONFIG_BPF_STREAM_PARSER=y -CONFIG_NET_FLOW_LIMIT=y - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -CONFIG_NET_DROP_MONITOR=y -# end of Network testing -# end of Networking options - -# CONFIG_HAMRADIO is not set -# CONFIG_CAN is not set -# CONFIG_BT is not set -# CONFIG_AF_RXRPC is not set -# CONFIG_AF_KCM is not set -CONFIG_STREAM_PARSER=y -# CONFIG_MCTP is not set -CONFIG_FIB_RULES=y -CONFIG_WIRELESS=y -CONFIG_WEXT_CORE=y -CONFIG_WEXT_PROC=y -CONFIG_CFG80211=y -# CONFIG_NL80211_TESTMODE is not set -# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set -# CONFIG_CFG80211_CERTIFICATION_ONUS is not set -CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y -CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y -CONFIG_CFG80211_DEFAULT_PS=y -# CONFIG_CFG80211_DEBUGFS is not set -CONFIG_CFG80211_CRDA_SUPPORT=y -CONFIG_CFG80211_WEXT=y -# CONFIG_MAC80211 is not set -CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 -CONFIG_RFKILL=y -CONFIG_RFKILL_LEDS=y -# CONFIG_RFKILL_INPUT is not set -# CONFIG_RFKILL_GPIO is not set -CONFIG_NET_9P=y -CONFIG_NET_9P_FD=y -CONFIG_NET_9P_VIRTIO=y -# CONFIG_NET_9P_RDMA is not set -# CONFIG_NET_9P_DEBUG is not set -# CONFIG_CAIF is not set -# CONFIG_CEPH_LIB is not set -# CONFIG_NFC is not set -# CONFIG_PSAMPLE is not set -# CONFIG_NET_IFE is not set -CONFIG_LWTUNNEL=y -CONFIG_LWTUNNEL_BPF=y -CONFIG_DST_CACHE=y -CONFIG_GRO_CELLS=y -CONFIG_SOCK_VALIDATE_XMIT=y -CONFIG_NET_SELFTESTS=y -CONFIG_NET_SOCK_MSG=y -CONFIG_NET_DEVLINK=y -CONFIG_PAGE_POOL=y -CONFIG_PAGE_POOL_STATS=y -CONFIG_FAILOVER=y -CONFIG_ETHTOOL_NETLINK=y - -# -# Device Drivers -# -CONFIG_ARM_AMBA=y -CONFIG_HAVE_PCI=y -CONFIG_PCI=y -CONFIG_PCI_DOMAINS=y -CONFIG_PCI_DOMAINS_GENERIC=y -CONFIG_PCIEPORTBUS=y -# CONFIG_PCIEAER is not set -CONFIG_PCIEASPM=y -CONFIG_PCIEASPM_DEFAULT=y -# CONFIG_PCIEASPM_POWERSAVE is not set -# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set -# CONFIG_PCIEASPM_PERFORMANCE is not set -CONFIG_PCIE_PME=y -# CONFIG_PCIE_PTM is not set -CONFIG_PCI_MSI=y -CONFIG_PCI_QUIRKS=y -# CONFIG_PCI_DEBUG is not set -# CONFIG_PCI_REALLOC_ENABLE_AUTO is not set -# CONFIG_PCI_STUB is not set -# CONFIG_PCI_PF_STUB is not set -CONFIG_PCI_ATS=y -CONFIG_PCI_ECAM=y -CONFIG_PCI_IOV=y -# CONFIG_PCI_PRI is not set -# CONFIG_PCI_PASID is not set -# CONFIG_PCIE_BUS_TUNE_OFF is not set -CONFIG_PCIE_BUS_DEFAULT=y -# CONFIG_PCIE_BUS_SAFE is not set -# CONFIG_PCIE_BUS_PERFORMANCE is not set -# CONFIG_PCIE_BUS_PEER2PEER is not set -CONFIG_VGA_ARB=y -CONFIG_VGA_ARB_MAX_GPUS=16 -# CONFIG_HOTPLUG_PCI is not set - -# -# PCI controller drivers -# -# CONFIG_PCI_FTPCI100 is not set -CONFIG_PCI_HOST_COMMON=y -CONFIG_PCI_HOST_GENERIC=y -# CONFIG_PCIE_MICROCHIP_HOST is not set -# CONFIG_PCIE_RCAR_HOST is not set -CONFIG_PCIE_XILINX=y -CONFIG_PCIE_STARFIVE=y - -# -# Cadence-based PCIe controllers -# -# CONFIG_PCIE_CADENCE_PLAT_HOST is not set -# CONFIG_PCI_J721E_HOST is not set -# end of Cadence-based PCIe controllers - -# -# DesignWare-based PCIe controllers -# -CONFIG_PCIE_DW=y -CONFIG_PCIE_DW_HOST=y -# CONFIG_PCI_MESON is not set -# CONFIG_PCIE_DW_PLAT_HOST is not set -CONFIG_PCIE_FU740=y -# end of DesignWare-based PCIe controllers - -# -# Mobiveil-based PCIe controllers -# -# end of Mobiveil-based PCIe controllers -# end of PCI controller drivers - -# -# PCI Endpoint -# -# CONFIG_PCI_ENDPOINT is not set -# end of PCI Endpoint - -# -# PCI switch controller drivers -# -# CONFIG_PCI_SW_SWITCHTEC is not set -# end of PCI switch controller drivers - -# CONFIG_CXL_BUS is not set -# CONFIG_PCCARD is not set -# CONFIG_RAPIDIO is not set - -# -# Generic Driver Options -# -CONFIG_AUXILIARY_BUS=y -# CONFIG_UEVENT_HELPER is not set -CONFIG_DEVTMPFS=y -CONFIG_DEVTMPFS_MOUNT=y -# CONFIG_DEVTMPFS_SAFE is not set -# CONFIG_STANDALONE is not set -CONFIG_PREVENT_FIRMWARE_BUILD=y - -# -# Firmware loader -# -CONFIG_FW_LOADER=y -CONFIG_FW_LOADER_DEBUG=y -CONFIG_FW_LOADER_PAGED_BUF=y -CONFIG_FW_LOADER_SYSFS=y -CONFIG_EXTRA_FIRMWARE="" -CONFIG_FW_LOADER_USER_HELPER=y -# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set -CONFIG_FW_LOADER_COMPRESS=y -CONFIG_FW_LOADER_COMPRESS_XZ=y -# CONFIG_FW_LOADER_COMPRESS_ZSTD is not set -CONFIG_FW_UPLOAD=y -# end of Firmware loader - -CONFIG_ALLOW_DEV_COREDUMP=y -# CONFIG_DEBUG_DRIVER is not set -# CONFIG_DEBUG_DEVRES is not set -# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set -# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set -CONFIG_SOC_BUS=y -CONFIG_REGMAP=y -CONFIG_REGMAP_I2C=y -CONFIG_REGMAP_SPI=y -CONFIG_REGMAP_MMIO=y -CONFIG_REGMAP_IRQ=y -CONFIG_DMA_SHARED_BUFFER=y -# CONFIG_DMA_FENCE_TRACE is not set -CONFIG_GENERIC_ARCH_TOPOLOGY=y -CONFIG_GENERIC_ARCH_NUMA=y -# CONFIG_FW_DEVLINK_SYNC_STATE_TIMEOUT is not set -# end of Generic Driver Options - -# -# Bus devices -# -# CONFIG_MOXTET is not set -# CONFIG_SUN50I_DE2_BUS is not set -# CONFIG_SUNXI_RSB is not set -# CONFIG_MHI_BUS is not set -# CONFIG_MHI_BUS_EP is not set -# end of Bus devices - -CONFIG_CONNECTOR=y -CONFIG_PROC_EVENTS=y - -# -# Firmware Drivers -# - -# -# ARM System Control and Management Interface Protocol -# -# end of ARM System Control and Management Interface Protocol - -# CONFIG_FIRMWARE_MEMMAP is not set -CONFIG_SYSFB=y -# CONFIG_SYSFB_SIMPLEFB is not set -# CONFIG_GOOGLE_FIRMWARE is not set - -# -# EFI (Extensible Firmware Interface) Support -# -CONFIG_EFI_ESRT=y -CONFIG_EFI_VARS_PSTORE=y -# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set -CONFIG_EFI_PARAMS_FROM_FDT=y -CONFIG_EFI_RUNTIME_WRAPPERS=y -CONFIG_EFI_GENERIC_STUB=y -# CONFIG_EFI_ZBOOT is not set -# CONFIG_EFI_BOOTLOADER_CONTROL is not set -# CONFIG_EFI_CAPSULE_LOADER is not set -# CONFIG_EFI_TEST is not set -# CONFIG_RESET_ATTACK_MITIGATION is not set -# CONFIG_EFI_DISABLE_PCI_DMA is not set -CONFIG_EFI_EARLYCON=y -# CONFIG_EFI_DISABLE_RUNTIME is not set -# CONFIG_EFI_COCO_SECRET is not set -# end of EFI (Extensible Firmware Interface) Support - -# -# Tegra firmware driver -# -# end of Tegra firmware driver -# end of Firmware Drivers - -# CONFIG_GNSS is not set -CONFIG_MTD=y -# CONFIG_MTD_TESTS is not set - -# -# Partition parsers -# -# CONFIG_MTD_AR7_PARTS is not set -CONFIG_MTD_CMDLINE_PARTS=y -CONFIG_MTD_OF_PARTS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# end of Partition parsers - -# -# User Modules And Translation Layers -# -# CONFIG_MTD_BLOCK is not set -# CONFIG_MTD_BLOCK_RO is not set -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set -# CONFIG_SM_FTL is not set -# CONFIG_MTD_OOPS is not set -# CONFIG_MTD_SWAP is not set -# CONFIG_MTD_PARTITIONED_MASTER is not set - -# -# RAM/ROM/Flash chip drivers -# -# CONFIG_MTD_CFI is not set -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_MAP_BANK_WIDTH_1=y -CONFIG_MTD_MAP_BANK_WIDTH_2=y -CONFIG_MTD_MAP_BANK_WIDTH_4=y -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# end of RAM/ROM/Flash chip drivers - -# -# Mapping drivers for chip access -# -CONFIG_MTD_COMPLEX_MAPPINGS=y -# CONFIG_MTD_PCI is not set -# CONFIG_MTD_INTEL_VR_NOR is not set -# CONFIG_MTD_PLATRAM is not set -# end of Mapping drivers for chip access - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_DATAFLASH is not set -# CONFIG_MTD_MCHP23K256 is not set -# CONFIG_MTD_MCHP48L640 is not set -# CONFIG_MTD_SST25L is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOCG3 is not set -# end of Self-contained MTD device drivers - -# -# NAND -# -CONFIG_MTD_NAND_CORE=y -# CONFIG_MTD_ONENAND is not set -# CONFIG_MTD_RAW_NAND is not set -# CONFIG_MTD_SPI_NAND is not set - -# -# ECC engine support -# -CONFIG_MTD_NAND_ECC=y -CONFIG_MTD_NAND_ECC_SW_HAMMING=y -# CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC is not set -# CONFIG_MTD_NAND_ECC_SW_BCH is not set -# CONFIG_MTD_NAND_ECC_MXIC is not set -# end of ECC engine support -# end of NAND - -# -# LPDDR & LPDDR2 PCM memory drivers -# -# CONFIG_MTD_LPDDR is not set -# end of LPDDR & LPDDR2 PCM memory drivers - -CONFIG_MTD_SPI_NOR=y -CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y -# CONFIG_MTD_SPI_NOR_SWP_DISABLE is not set -CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y -# CONFIG_MTD_SPI_NOR_SWP_KEEP is not set -# CONFIG_MTD_UBI is not set -# CONFIG_MTD_HYPERBUS is not set -CONFIG_DTC=y -CONFIG_OF=y -# CONFIG_OF_UNITTEST is not set -CONFIG_OF_FLATTREE=y -CONFIG_OF_EARLY_FLATTREE=y -CONFIG_OF_KOBJ=y -CONFIG_OF_ADDRESS=y -CONFIG_OF_IRQ=y -CONFIG_OF_RESERVED_MEM=y -# CONFIG_OF_OVERLAY is not set -CONFIG_OF_NUMA=y -# CONFIG_PARPORT is not set -CONFIG_BLK_DEV=y -# CONFIG_BLK_DEV_NULL_BLK is not set -CONFIG_CDROM=y -# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set -CONFIG_ZRAM=y -CONFIG_ZRAM_DEF_COMP_LZORLE=y -# CONFIG_ZRAM_DEF_COMP_ZSTD is not set -# CONFIG_ZRAM_DEF_COMP_LZ4 is not set -# CONFIG_ZRAM_DEF_COMP_LZO is not set -# CONFIG_ZRAM_DEF_COMP_LZ4HC is not set -# CONFIG_ZRAM_DEF_COMP_842 is not set -CONFIG_ZRAM_DEF_COMP="lzo-rle" -CONFIG_ZRAM_WRITEBACK=y -# CONFIG_ZRAM_MEMORY_TRACKING is not set -# CONFIG_ZRAM_MULTI_COMP is not set -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 -# CONFIG_BLK_DEV_DRBD is not set -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_RAM is not set -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set -CONFIG_VIRTIO_BLK=y -# CONFIG_BLK_DEV_RBD is not set -# CONFIG_BLK_DEV_UBLK is not set - -# -# NVME Support -# -# CONFIG_BLK_DEV_NVME is not set -# CONFIG_NVME_RDMA is not set -# CONFIG_NVME_FC is not set -# CONFIG_NVME_TCP is not set -# CONFIG_NVME_TARGET is not set -# end of NVME Support - -# -# Misc devices -# -# CONFIG_AD525X_DPOT is not set -# CONFIG_DUMMY_IRQ is not set -# CONFIG_PHANTOM is not set -# CONFIG_TIFM_CORE is not set -# CONFIG_ICS932S401 is not set -# CONFIG_ENCLOSURE_SERVICES is not set -# CONFIG_HP_ILO is not set -# CONFIG_APDS9802ALS is not set -# CONFIG_ISL29003 is not set -# CONFIG_ISL29020 is not set -# CONFIG_SENSORS_TSL2550 is not set -# CONFIG_SENSORS_BH1770 is not set -# CONFIG_SENSORS_APDS990X is not set -# CONFIG_HMC6352 is not set -# CONFIG_DS1682 is not set -# CONFIG_LATTICE_ECP3_CONFIG is not set -# CONFIG_SRAM is not set -# CONFIG_DW_XDATA_PCIE is not set -# CONFIG_PCI_ENDPOINT_TEST is not set -# CONFIG_XILINX_SDFEC is not set -# CONFIG_HISI_HIKEY_USB is not set -# CONFIG_OPEN_DICE is not set -# CONFIG_VCPU_STALL_DETECTOR is not set -# CONFIG_C2PORT is not set - -# -# EEPROM support -# -# CONFIG_EEPROM_AT24 is not set -# CONFIG_EEPROM_AT25 is not set -# CONFIG_EEPROM_LEGACY is not set -# CONFIG_EEPROM_MAX6875 is not set -# CONFIG_EEPROM_93CX6 is not set -# CONFIG_EEPROM_93XX46 is not set -# CONFIG_EEPROM_IDT_89HPESX is not set -# CONFIG_EEPROM_EE1004 is not set -# end of EEPROM support - -# CONFIG_CB710_CORE is not set - -# -# Texas Instruments shared transport line discipline -# -# CONFIG_TI_ST is not set -# end of Texas Instruments shared transport line discipline - -# CONFIG_SENSORS_LIS3_SPI is not set -# CONFIG_SENSORS_LIS3_I2C is not set -# CONFIG_ALTERA_STAPL is not set -# CONFIG_GENWQE is not set -# CONFIG_ECHO is not set -# CONFIG_BCM_VK is not set -# CONFIG_MISC_ALCOR_PCI is not set -# CONFIG_MISC_RTSX_PCI is not set -# CONFIG_MISC_RTSX_USB is not set -# CONFIG_UACCE is not set -# CONFIG_PVPANIC is not set -# CONFIG_GP_PCI1XXXX is not set -# end of Misc devices - -# -# SCSI device support -# -CONFIG_SCSI_MOD=y -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI_COMMON=y -CONFIG_SCSI=y -CONFIG_SCSI_DMA=y -CONFIG_SCSI_PROC_FS=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=y -# CONFIG_CHR_DEV_ST is not set -CONFIG_BLK_DEV_SR=y -# CONFIG_CHR_DEV_SG is not set -CONFIG_BLK_DEV_BSG=y -# CONFIG_CHR_DEV_SCH is not set -# CONFIG_SCSI_CONSTANTS is not set -CONFIG_SCSI_LOGGING=y -# CONFIG_SCSI_SCAN_ASYNC is not set - -# -# SCSI Transports -# -# CONFIG_SCSI_SPI_ATTRS is not set -# CONFIG_SCSI_FC_ATTRS is not set -CONFIG_SCSI_ISCSI_ATTRS=y -# CONFIG_SCSI_SAS_ATTRS is not set -# CONFIG_SCSI_SAS_LIBSAS is not set -# CONFIG_SCSI_SRP_ATTRS is not set -# end of SCSI Transports - -CONFIG_SCSI_LOWLEVEL=y -CONFIG_ISCSI_TCP=y -CONFIG_ISCSI_BOOT_SYSFS=y -CONFIG_SCSI_CXGB3_ISCSI=y -CONFIG_SCSI_CXGB4_ISCSI=y -CONFIG_SCSI_BNX2_ISCSI=y -CONFIG_BE2ISCSI=y -# CONFIG_BLK_DEV_3W_XXXX_RAID is not set -# CONFIG_SCSI_HPSA is not set -# CONFIG_SCSI_3W_9XXX is not set -# CONFIG_SCSI_3W_SAS is not set -# CONFIG_SCSI_ACARD is not set -# CONFIG_SCSI_AACRAID is not set -# CONFIG_SCSI_AIC7XXX is not set -# CONFIG_SCSI_AIC79XX is not set -# CONFIG_SCSI_AIC94XX is not set -# CONFIG_SCSI_MVSAS is not set -# CONFIG_SCSI_MVUMI is not set -# CONFIG_SCSI_ADVANSYS is not set -# CONFIG_SCSI_ARCMSR is not set -# CONFIG_SCSI_ESAS2R is not set -CONFIG_MEGARAID_NEWGEN=y -# CONFIG_MEGARAID_MM is not set -# CONFIG_MEGARAID_LEGACY is not set -# CONFIG_MEGARAID_SAS is not set -# CONFIG_SCSI_MPT3SAS is not set -# CONFIG_SCSI_MPT2SAS is not set -# CONFIG_SCSI_MPI3MR is not set -# CONFIG_SCSI_SMARTPQI is not set -# CONFIG_SCSI_HPTIOP is not set -# CONFIG_SCSI_BUSLOGIC is not set -# CONFIG_SCSI_MYRB is not set -# CONFIG_SCSI_MYRS is not set -# CONFIG_SCSI_SNIC is not set -# CONFIG_SCSI_DMX3191D is not set -# CONFIG_SCSI_FDOMAIN_PCI is not set -# CONFIG_SCSI_IPS is not set -# CONFIG_SCSI_INITIO is not set -# CONFIG_SCSI_INIA100 is not set -# CONFIG_SCSI_STEX is not set -# CONFIG_SCSI_SYM53C8XX_2 is not set -# CONFIG_SCSI_IPR is not set -# CONFIG_SCSI_QLOGIC_1280 is not set -CONFIG_SCSI_QLA_ISCSI=y -CONFIG_QEDI=y -# CONFIG_SCSI_DC395x is not set -# CONFIG_SCSI_AM53C974 is not set -# CONFIG_SCSI_WD719X is not set -# CONFIG_SCSI_DEBUG is not set -# CONFIG_SCSI_PMCRAID is not set -# CONFIG_SCSI_PM8001 is not set -CONFIG_SCSI_VIRTIO=y -# CONFIG_SCSI_DH is not set -# end of SCSI device support - -CONFIG_ATA=y -CONFIG_SATA_HOST=y -CONFIG_ATA_VERBOSE_ERROR=y -CONFIG_ATA_FORCE=y -CONFIG_SATA_PMP=y - -# -# Controllers with non-SFF native interface -# -CONFIG_SATA_AHCI=y -CONFIG_SATA_MOBILE_LPM_POLICY=0 -CONFIG_SATA_AHCI_PLATFORM=y -# CONFIG_AHCI_DWC is not set -# CONFIG_AHCI_CEVA is not set -# CONFIG_AHCI_SUNXI is not set -# CONFIG_SATA_INIC162X is not set -# CONFIG_SATA_ACARD_AHCI is not set -# CONFIG_SATA_SIL24 is not set -CONFIG_ATA_SFF=y - -# -# SFF controllers with custom DMA interface -# -# CONFIG_PDC_ADMA is not set -# CONFIG_SATA_QSTOR is not set -# CONFIG_SATA_SX4 is not set -CONFIG_ATA_BMDMA=y - -# -# SATA SFF controllers with BMDMA -# -# CONFIG_ATA_PIIX is not set -# CONFIG_SATA_DWC is not set -# CONFIG_SATA_MV is not set -# CONFIG_SATA_NV is not set -# CONFIG_SATA_PROMISE is not set -# CONFIG_SATA_RCAR is not set -# CONFIG_SATA_SIL is not set -# CONFIG_SATA_SIS is not set -# CONFIG_SATA_SVW is not set -# CONFIG_SATA_ULI is not set -# CONFIG_SATA_VIA is not set -# CONFIG_SATA_VITESSE is not set - -# -# PATA SFF controllers with BMDMA -# -# CONFIG_PATA_ALI is not set -# CONFIG_PATA_AMD is not set -# CONFIG_PATA_ARTOP is not set -# CONFIG_PATA_ATIIXP is not set -# CONFIG_PATA_ATP867X is not set -# CONFIG_PATA_CMD64X is not set -# CONFIG_PATA_CYPRESS is not set -# CONFIG_PATA_EFAR is not set -# CONFIG_PATA_HPT366 is not set -# CONFIG_PATA_HPT37X is not set -# CONFIG_PATA_HPT3X2N is not set -# CONFIG_PATA_HPT3X3 is not set -# CONFIG_PATA_IT8213 is not set -# CONFIG_PATA_IT821X is not set -# CONFIG_PATA_JMICRON is not set -# CONFIG_PATA_MARVELL is not set -# CONFIG_PATA_NETCELL is not set -# CONFIG_PATA_NINJA32 is not set -# CONFIG_PATA_NS87415 is not set -# CONFIG_PATA_OLDPIIX is not set -# CONFIG_PATA_OPTIDMA is not set -# CONFIG_PATA_PDC2027X is not set -# CONFIG_PATA_PDC_OLD is not set -# CONFIG_PATA_RADISYS is not set -# CONFIG_PATA_RDC is not set -# CONFIG_PATA_SCH is not set -# CONFIG_PATA_SERVERWORKS is not set -# CONFIG_PATA_SIL680 is not set -# CONFIG_PATA_SIS is not set -# CONFIG_PATA_TOSHIBA is not set -# CONFIG_PATA_TRIFLEX is not set -# CONFIG_PATA_VIA is not set -# CONFIG_PATA_WINBOND is not set - -# -# PIO-only SFF controllers -# -# CONFIG_PATA_CMD640_PCI is not set -# CONFIG_PATA_MPIIX is not set -# CONFIG_PATA_NS87410 is not set -# CONFIG_PATA_OPTI is not set -# CONFIG_PATA_OF_PLATFORM is not set -# CONFIG_PATA_RZ1000 is not set - -# -# Generic fallback / legacy drivers -# -# CONFIG_ATA_GENERIC is not set -# CONFIG_PATA_LEGACY is not set -CONFIG_MD=y -# CONFIG_BLK_DEV_MD is not set -# CONFIG_BCACHE is not set -CONFIG_BLK_DEV_DM_BUILTIN=y -CONFIG_BLK_DEV_DM=y -# CONFIG_DM_DEBUG is not set -# CONFIG_DM_UNSTRIPED is not set -# CONFIG_DM_CRYPT is not set -# CONFIG_DM_SNAPSHOT is not set -# CONFIG_DM_THIN_PROVISIONING is not set -# CONFIG_DM_CACHE is not set -# CONFIG_DM_WRITECACHE is not set -# CONFIG_DM_EBS is not set -# CONFIG_DM_ERA is not set -# CONFIG_DM_CLONE is not set -# CONFIG_DM_MIRROR is not set -# CONFIG_DM_RAID is not set -# CONFIG_DM_ZERO is not set -# CONFIG_DM_MULTIPATH is not set -# CONFIG_DM_DELAY is not set -# CONFIG_DM_DUST is not set -# CONFIG_DM_INIT is not set -# CONFIG_DM_UEVENT is not set -# CONFIG_DM_FLAKEY is not set -# CONFIG_DM_VERITY is not set -# CONFIG_DM_SWITCH is not set -# CONFIG_DM_LOG_WRITES is not set -# CONFIG_DM_INTEGRITY is not set -CONFIG_DM_AUDIT=y -# CONFIG_TARGET_CORE is not set -CONFIG_FUSION=y -# CONFIG_FUSION_SPI is not set -# CONFIG_FUSION_SAS is not set -CONFIG_FUSION_MAX_SGE=128 -# CONFIG_FUSION_LOGGING is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_FIREWIRE is not set -# CONFIG_FIREWIRE_NOSY is not set -# end of IEEE 1394 (FireWire) support - -CONFIG_NETDEVICES=y -CONFIG_MII=y -CONFIG_NET_CORE=y -# CONFIG_BONDING is not set -# CONFIG_DUMMY is not set -CONFIG_WIREGUARD=y -# CONFIG_WIREGUARD_DEBUG is not set -# CONFIG_EQUALIZER is not set -CONFIG_NET_FC=y -# CONFIG_NET_TEAM is not set -CONFIG_MACVLAN=y -CONFIG_MACVTAP=y -# CONFIG_IPVLAN is not set -# CONFIG_VXLAN is not set -# CONFIG_GENEVE is not set -# CONFIG_BAREUDP is not set -# CONFIG_GTP is not set -# CONFIG_AMT is not set -# CONFIG_MACSEC is not set -# CONFIG_NETCONSOLE is not set -CONFIG_TUN=y -CONFIG_TAP=y -# CONFIG_TUN_VNET_CROSS_LE is not set -# CONFIG_VETH is not set -CONFIG_VIRTIO_NET=y -# CONFIG_NLMON is not set -# CONFIG_NET_VRF is not set -# CONFIG_ARCNET is not set -CONFIG_ETHERNET=y -CONFIG_MDIO=y -CONFIG_NET_VENDOR_3COM=y -# CONFIG_VORTEX is not set -# CONFIG_TYPHOON is not set -CONFIG_NET_VENDOR_ADAPTEC=y -# CONFIG_ADAPTEC_STARFIRE is not set -CONFIG_NET_VENDOR_AGERE=y -# CONFIG_ET131X is not set -CONFIG_NET_VENDOR_ALACRITECH=y -# CONFIG_SLICOSS is not set -CONFIG_NET_VENDOR_ALLWINNER=y -# CONFIG_SUN4I_EMAC is not set -CONFIG_NET_VENDOR_ALTEON=y -# CONFIG_ACENIC is not set -# CONFIG_ALTERA_TSE is not set -CONFIG_NET_VENDOR_AMAZON=y -# CONFIG_ENA_ETHERNET is not set -CONFIG_NET_VENDOR_AMD=y -# CONFIG_AMD8111_ETH is not set -# CONFIG_PCNET32 is not set -# CONFIG_PDS_CORE is not set -CONFIG_NET_VENDOR_AQUANTIA=y -# CONFIG_AQTION is not set -CONFIG_NET_VENDOR_ARC=y -CONFIG_NET_VENDOR_ASIX=y -# CONFIG_SPI_AX88796C is not set -CONFIG_NET_VENDOR_ATHEROS=y -# CONFIG_ATL2 is not set -# CONFIG_ATL1 is not set -# CONFIG_ATL1E is not set -# CONFIG_ATL1C is not set -# CONFIG_ALX is not set -CONFIG_NET_VENDOR_BROADCOM=y -# CONFIG_B44 is not set -# CONFIG_BCMGENET is not set -CONFIG_BNX2=y -CONFIG_CNIC=y -# CONFIG_TIGON3 is not set -# CONFIG_BNX2X is not set -# CONFIG_SYSTEMPORT is not set -# CONFIG_BNXT is not set -CONFIG_NET_VENDOR_CADENCE=y -# CONFIG_MACB is not set -CONFIG_NET_VENDOR_CAVIUM=y -# CONFIG_THUNDER_NIC_PF is not set -# CONFIG_THUNDER_NIC_VF is not set -# CONFIG_THUNDER_NIC_BGX is not set -# CONFIG_THUNDER_NIC_RGX is not set -# CONFIG_CAVIUM_PTP is not set -# CONFIG_LIQUIDIO is not set -# CONFIG_LIQUIDIO_VF is not set -CONFIG_NET_VENDOR_CHELSIO=y -# CONFIG_CHELSIO_T1 is not set -CONFIG_CHELSIO_T3=y -CONFIG_CHELSIO_T4=y -# CONFIG_CHELSIO_T4VF is not set -CONFIG_CHELSIO_LIB=y -CONFIG_CHELSIO_INLINE_CRYPTO=y -# CONFIG_CHELSIO_TLS_DEVICE is not set -CONFIG_NET_VENDOR_CISCO=y -# CONFIG_ENIC is not set -CONFIG_NET_VENDOR_CORTINA=y -# CONFIG_GEMINI_ETHERNET is not set -CONFIG_NET_VENDOR_DAVICOM=y -# CONFIG_DM9051 is not set -# CONFIG_DNET is not set -CONFIG_NET_VENDOR_DEC=y -# CONFIG_NET_TULIP is not set -CONFIG_NET_VENDOR_DLINK=y -# CONFIG_DL2K is not set -# CONFIG_SUNDANCE is not set -CONFIG_NET_VENDOR_EMULEX=y -# CONFIG_BE2NET is not set -CONFIG_NET_VENDOR_ENGLEDER=y -# CONFIG_TSNEP is not set -CONFIG_NET_VENDOR_EZCHIP=y -# CONFIG_EZCHIP_NPS_MANAGEMENT_ENET is not set -CONFIG_NET_VENDOR_FUNGIBLE=y -# CONFIG_FUN_ETH is not set -CONFIG_NET_VENDOR_GOOGLE=y -CONFIG_NET_VENDOR_HUAWEI=y -CONFIG_NET_VENDOR_I825XX=y -CONFIG_NET_VENDOR_INTEL=y -# CONFIG_E100 is not set -# CONFIG_E1000 is not set -# CONFIG_E1000E is not set -# CONFIG_IGB is not set -# CONFIG_IGBVF is not set -# CONFIG_IXGBE is not set -# CONFIG_IXGBEVF is not set -# CONFIG_I40E is not set -# CONFIG_I40EVF is not set -# CONFIG_ICE is not set -# CONFIG_FM10K is not set -# CONFIG_IGC is not set -# CONFIG_JME is not set -CONFIG_NET_VENDOR_ADI=y -# CONFIG_ADIN1110 is not set -CONFIG_NET_VENDOR_LITEX=y -# CONFIG_LITEX_LITEETH is not set -CONFIG_NET_VENDOR_MARVELL=y -# CONFIG_MVMDIO is not set -# CONFIG_SKGE is not set -# CONFIG_SKY2 is not set -# CONFIG_OCTEON_EP is not set -# CONFIG_PRESTERA is not set -CONFIG_NET_VENDOR_MELLANOX=y -# CONFIG_MLX4_EN is not set -# CONFIG_MLX5_CORE is not set -# CONFIG_MLXSW_CORE is not set -# CONFIG_MLXFW is not set -CONFIG_NET_VENDOR_MICREL=y -# CONFIG_KS8842 is not set -# CONFIG_KS8851 is not set -# CONFIG_KS8851_MLL is not set -# CONFIG_KSZ884X_PCI is not set -CONFIG_NET_VENDOR_MICROCHIP=y -# CONFIG_ENC28J60 is not set -# CONFIG_ENCX24J600 is not set -# CONFIG_LAN743X is not set -# CONFIG_LAN966X_SWITCH is not set -CONFIG_VCAP=y -CONFIG_NET_VENDOR_MICROSEMI=y -# CONFIG_MSCC_OCELOT_SWITCH is not set -CONFIG_NET_VENDOR_MICROSOFT=y -CONFIG_NET_VENDOR_MYRI=y -# CONFIG_MYRI10GE is not set -# CONFIG_FEALNX is not set -CONFIG_NET_VENDOR_NI=y -# CONFIG_NI_XGE_MANAGEMENT_ENET is not set -CONFIG_NET_VENDOR_NATSEMI=y -# CONFIG_NATSEMI is not set -# CONFIG_NS83820 is not set -CONFIG_NET_VENDOR_NETERION=y -# CONFIG_S2IO is not set -CONFIG_NET_VENDOR_NETRONOME=y -# CONFIG_NFP is not set -CONFIG_NET_VENDOR_8390=y -# CONFIG_NE2K_PCI is not set -CONFIG_NET_VENDOR_NVIDIA=y -# CONFIG_FORCEDETH is not set -CONFIG_NET_VENDOR_OKI=y -# CONFIG_ETHOC is not set -CONFIG_NET_VENDOR_PACKET_ENGINES=y -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -CONFIG_NET_VENDOR_PENSANDO=y -# CONFIG_IONIC is not set -CONFIG_NET_VENDOR_QLOGIC=y -# CONFIG_QLA3XXX is not set -# CONFIG_QLCNIC is not set -# CONFIG_NETXEN_NIC is not set -CONFIG_QED=y -CONFIG_QED_LL2=y -CONFIG_QED_SRIOV=y -# CONFIG_QEDE is not set -CONFIG_QED_ISCSI=y -CONFIG_QED_OOO=y -CONFIG_NET_VENDOR_BROCADE=y -# CONFIG_BNA is not set -CONFIG_NET_VENDOR_QUALCOMM=y -# CONFIG_QCA7000_SPI is not set -# CONFIG_QCA7000_UART is not set -# CONFIG_QCOM_EMAC is not set -# CONFIG_RMNET is not set -CONFIG_NET_VENDOR_RDC=y -# CONFIG_R6040 is not set -CONFIG_NET_VENDOR_REALTEK=y -# CONFIG_8139CP is not set -# CONFIG_8139TOO is not set -CONFIG_R8169=y -CONFIG_NET_VENDOR_RENESAS=y -# CONFIG_SH_ETH is not set -# CONFIG_RAVB is not set -# CONFIG_RENESAS_ETHER_SWITCH is not set -CONFIG_NET_VENDOR_ROCKER=y -# CONFIG_ROCKER is not set -CONFIG_NET_VENDOR_SAMSUNG=y -# CONFIG_SXGBE_ETH is not set -CONFIG_NET_VENDOR_SEEQ=y -CONFIG_NET_VENDOR_SILAN=y -# CONFIG_SC92031 is not set -CONFIG_NET_VENDOR_SIS=y -# CONFIG_SIS900 is not set -# CONFIG_SIS190 is not set -CONFIG_NET_VENDOR_SOLARFLARE=y -# CONFIG_SFC is not set -# CONFIG_SFC_FALCON is not set -# CONFIG_SFC_SIENA is not set -CONFIG_NET_VENDOR_SMSC=y -# CONFIG_EPIC100 is not set -# CONFIG_SMSC911X is not set -# CONFIG_SMSC9420 is not set -CONFIG_NET_VENDOR_SOCIONEXT=y -CONFIG_NET_VENDOR_STMICRO=y -CONFIG_STMMAC_ETH=y -# CONFIG_STMMAC_SELFTESTS is not set -CONFIG_STMMAC_PLATFORM=y -# CONFIG_DWMAC_DWC_QOS_ETH is not set -# CONFIG_DWMAC_GENERIC is not set -CONFIG_DWMAC_STARFIVE=y -# CONFIG_DWMAC_SUNXI is not set -# CONFIG_DWMAC_SUN8I is not set -# CONFIG_DWMAC_INTEL_PLAT is not set -# CONFIG_DWMAC_LOONGSON is not set -# CONFIG_STMMAC_PCI is not set -CONFIG_NET_VENDOR_SUN=y -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_CASSINI is not set -# CONFIG_NIU is not set -CONFIG_NET_VENDOR_SYNOPSYS=y -# CONFIG_DWC_XLGMAC is not set -CONFIG_NET_VENDOR_TEHUTI=y -# CONFIG_TEHUTI is not set -CONFIG_NET_VENDOR_TI=y -# CONFIG_TI_CPSW_PHY_SEL is not set -# CONFIG_TLAN is not set -CONFIG_NET_VENDOR_VERTEXCOM=y -# CONFIG_MSE102X is not set -CONFIG_NET_VENDOR_VIA=y -# CONFIG_VIA_RHINE is not set -# CONFIG_VIA_VELOCITY is not set -CONFIG_NET_VENDOR_WANGXUN=y -# CONFIG_NGBE is not set -# CONFIG_TXGBE is not set -CONFIG_NET_VENDOR_WIZNET=y -# CONFIG_WIZNET_W5100 is not set -# CONFIG_WIZNET_W5300 is not set -CONFIG_NET_VENDOR_XILINX=y -# CONFIG_XILINX_EMACLITE is not set -# CONFIG_XILINX_AXI_EMAC is not set -# CONFIG_XILINX_LL_TEMAC is not set -# CONFIG_FDDI is not set -CONFIG_HIPPI=y -# CONFIG_ROADRUNNER is not set -CONFIG_PHYLINK=y -CONFIG_PHYLIB=y -CONFIG_SWPHY=y -# CONFIG_LED_TRIGGER_PHY is not set -CONFIG_PHYLIB_LEDS=y -CONFIG_FIXED_PHY=y -# CONFIG_SFP is not set - -# -# MII PHY device drivers -# -# CONFIG_AMD_PHY is not set -# CONFIG_ADIN_PHY is not set -# CONFIG_ADIN1100_PHY is not set -# CONFIG_AQUANTIA_PHY is not set -# CONFIG_AX88796B_PHY is not set -# CONFIG_BROADCOM_PHY is not set -# CONFIG_BCM54140_PHY is not set -# CONFIG_BCM7XXX_PHY is not set -# CONFIG_BCM84881_PHY is not set -# CONFIG_BCM87XX_PHY is not set -# CONFIG_CICADA_PHY is not set -# CONFIG_CORTINA_PHY is not set -# CONFIG_DAVICOM_PHY is not set -# CONFIG_ICPLUS_PHY is not set -# CONFIG_LXT_PHY is not set -# CONFIG_INTEL_XWAY_PHY is not set -# CONFIG_LSI_ET1011C_PHY is not set -# CONFIG_MARVELL_PHY is not set -# CONFIG_MARVELL_10G_PHY is not set -# CONFIG_MARVELL_88X2222_PHY is not set -# CONFIG_MAXLINEAR_GPHY is not set -# CONFIG_MEDIATEK_GE_PHY is not set -# CONFIG_MICREL_PHY is not set -# CONFIG_MICROCHIP_T1S_PHY is not set -# CONFIG_MICROCHIP_PHY is not set -# CONFIG_MICROCHIP_T1_PHY is not set -# CONFIG_MICROSEMI_PHY is not set -CONFIG_MOTORCOMM_PHY=y -# CONFIG_NATIONAL_PHY is not set -# CONFIG_NXP_CBTX_PHY is not set -# CONFIG_NXP_C45_TJA11XX_PHY is not set -# CONFIG_NXP_TJA11XX_PHY is not set -# CONFIG_NCN26000_PHY is not set -# CONFIG_AT803X_PHY is not set -# CONFIG_QSEMI_PHY is not set -CONFIG_REALTEK_PHY=y -# CONFIG_RENESAS_PHY is not set -# CONFIG_ROCKCHIP_PHY is not set -# CONFIG_SMSC_PHY is not set -# CONFIG_STE10XP is not set -# CONFIG_TERANETICS_PHY is not set -# CONFIG_DP83822_PHY is not set -# CONFIG_DP83TC811_PHY is not set -# CONFIG_DP83848_PHY is not set -# CONFIG_DP83867_PHY is not set -# CONFIG_DP83869_PHY is not set -# CONFIG_DP83TD510_PHY is not set -# CONFIG_VITESSE_PHY is not set -# CONFIG_XILINX_GMII2RGMII is not set -# CONFIG_MICREL_KS8995MA is not set -# CONFIG_PSE_CONTROLLER is not set -CONFIG_MDIO_DEVICE=y -CONFIG_MDIO_BUS=y -CONFIG_FWNODE_MDIO=y -CONFIG_OF_MDIO=y -CONFIG_MDIO_DEVRES=y -# CONFIG_MDIO_SUN4I is not set -# CONFIG_MDIO_BITBANG is not set -# CONFIG_MDIO_BCM_UNIMAC is not set -# CONFIG_MDIO_HISI_FEMAC is not set -# CONFIG_MDIO_MVUSB is not set -# CONFIG_MDIO_MSCC_MIIM is not set -# CONFIG_MDIO_OCTEON is not set -# CONFIG_MDIO_IPQ4019 is not set -# CONFIG_MDIO_IPQ8064 is not set -# CONFIG_MDIO_THUNDER is not set - -# -# MDIO Multiplexers -# -# CONFIG_MDIO_BUS_MUX_GPIO is not set -# CONFIG_MDIO_BUS_MUX_MULTIPLEXER is not set -# CONFIG_MDIO_BUS_MUX_MMIOREG is not set - -# -# PCS device drivers -# -CONFIG_PCS_XPCS=y -# end of PCS device drivers - -# CONFIG_PPP is not set -# CONFIG_SLIP is not set -CONFIG_USB_NET_DRIVERS=y -# CONFIG_USB_CATC is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_RTL8150 is not set -# CONFIG_USB_RTL8152 is not set -# CONFIG_USB_LAN78XX is not set -# CONFIG_USB_USBNET is not set -# CONFIG_USB_HSO is not set -# CONFIG_USB_IPHETH is not set -CONFIG_WLAN=y -CONFIG_WLAN_VENDOR_ADMTEK=y -CONFIG_WLAN_VENDOR_ATH=y -# CONFIG_ATH_DEBUG is not set -CONFIG_ATH5K_PCI=y -# CONFIG_ATH6KL is not set -# CONFIG_WIL6210 is not set -CONFIG_WLAN_VENDOR_ATMEL=y -# CONFIG_ATMEL is not set -CONFIG_WLAN_VENDOR_BROADCOM=y -# CONFIG_BRCMFMAC is not set -CONFIG_WLAN_VENDOR_CISCO=y -# CONFIG_AIRO is not set -CONFIG_WLAN_VENDOR_INTEL=y -# CONFIG_IPW2100 is not set -# CONFIG_IPW2200 is not set -# CONFIG_IWLWIFI is not set -CONFIG_WLAN_VENDOR_INTERSIL=y -# CONFIG_HOSTAP is not set -# CONFIG_HERMES is not set -CONFIG_WLAN_VENDOR_MARVELL=y -# CONFIG_LIBERTAS is not set -# CONFIG_MWIFIEX is not set -CONFIG_WLAN_VENDOR_MEDIATEK=y -CONFIG_WLAN_VENDOR_MICROCHIP=y -# CONFIG_WILC1000_SDIO is not set -# CONFIG_WILC1000_SPI is not set -CONFIG_WLAN_VENDOR_PURELIFI=y -CONFIG_WLAN_VENDOR_RALINK=y -CONFIG_WLAN_VENDOR_REALTEK=y -CONFIG_WLAN_VENDOR_RSI=y -CONFIG_WLAN_VENDOR_SILABS=y -CONFIG_WLAN_VENDOR_ST=y -CONFIG_WLAN_VENDOR_TI=y -CONFIG_WLAN_VENDOR_ZYDAS=y -# CONFIG_USB_ZD1201 is not set -CONFIG_WLAN_VENDOR_QUANTENNA=y -# CONFIG_QTNFMAC_PCIE is not set -# CONFIG_USB_NET_RNDIS_WLAN is not set -# CONFIG_VIRT_WIFI is not set -CONFIG_WAN=y -# CONFIG_HDLC is not set - -# -# Wireless WAN -# -# CONFIG_WWAN is not set -# end of Wireless WAN - -# CONFIG_VMXNET3 is not set -# CONFIG_NETDEVSIM is not set -CONFIG_NET_FAILOVER=y -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y -# CONFIG_INPUT_LEDS is not set -# CONFIG_INPUT_FF_MEMLESS is not set -# CONFIG_INPUT_SPARSEKMAP is not set -# CONFIG_INPUT_MATRIXKMAP is not set -CONFIG_INPUT_VIVALDIFMAP=y - -# -# Userland interfaces -# -CONFIG_INPUT_MOUSEDEV=y -# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set -# CONFIG_INPUT_EVBUG is not set - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -# CONFIG_KEYBOARD_ADP5588 is not set -# CONFIG_KEYBOARD_ADP5589 is not set -CONFIG_KEYBOARD_ATKBD=y -# CONFIG_KEYBOARD_QT1050 is not set -# CONFIG_KEYBOARD_QT1070 is not set -# CONFIG_KEYBOARD_QT2160 is not set -# CONFIG_KEYBOARD_DLINK_DIR685 is not set -# CONFIG_KEYBOARD_LKKBD is not set -# CONFIG_KEYBOARD_GPIO is not set -# CONFIG_KEYBOARD_GPIO_POLLED is not set -# CONFIG_KEYBOARD_TCA6416 is not set -# CONFIG_KEYBOARD_TCA8418 is not set -# CONFIG_KEYBOARD_MATRIX is not set -# CONFIG_KEYBOARD_LM8323 is not set -# CONFIG_KEYBOARD_LM8333 is not set -# CONFIG_KEYBOARD_MAX7359 is not set -# CONFIG_KEYBOARD_MCS is not set -# CONFIG_KEYBOARD_MPR121 is not set -# CONFIG_KEYBOARD_NEWTON is not set -# CONFIG_KEYBOARD_OPENCORES is not set -# CONFIG_KEYBOARD_PINEPHONE is not set -# CONFIG_KEYBOARD_SAMSUNG is not set -# CONFIG_KEYBOARD_GOLDFISH_EVENTS is not set -# CONFIG_KEYBOARD_STOWAWAY is not set -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_SUN4I_LRADC is not set -# CONFIG_KEYBOARD_OMAP4 is not set -# CONFIG_KEYBOARD_TM2_TOUCHKEY is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_CAP11XX is not set -# CONFIG_KEYBOARD_BCM is not set -# CONFIG_KEYBOARD_CYPRESS_SF is not set -CONFIG_INPUT_MOUSE=y -CONFIG_MOUSE_PS2=y -CONFIG_MOUSE_PS2_ALPS=y -CONFIG_MOUSE_PS2_BYD=y -CONFIG_MOUSE_PS2_LOGIPS2PP=y -CONFIG_MOUSE_PS2_SYNAPTICS=y -CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y -CONFIG_MOUSE_PS2_CYPRESS=y -CONFIG_MOUSE_PS2_TRACKPOINT=y -CONFIG_MOUSE_PS2_ELANTECH=y -CONFIG_MOUSE_PS2_ELANTECH_SMBUS=y -# CONFIG_MOUSE_PS2_SENTELIC is not set -# CONFIG_MOUSE_PS2_TOUCHKIT is not set -CONFIG_MOUSE_PS2_FOCALTECH=y -CONFIG_MOUSE_PS2_SMBUS=y -# CONFIG_MOUSE_SERIAL is not set -# CONFIG_MOUSE_APPLETOUCH is not set -# CONFIG_MOUSE_BCM5974 is not set -# CONFIG_MOUSE_CYAPA is not set -# CONFIG_MOUSE_ELAN_I2C is not set -# CONFIG_MOUSE_VSXXXAA is not set -# CONFIG_MOUSE_GPIO is not set -# CONFIG_MOUSE_SYNAPTICS_I2C is not set -# CONFIG_MOUSE_SYNAPTICS_USB is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TABLET is not set -# CONFIG_INPUT_TOUCHSCREEN is not set -# CONFIG_INPUT_MISC is not set -# CONFIG_RMI4_CORE is not set - -# -# Hardware I/O ports -# -CONFIG_SERIO=y -CONFIG_SERIO_SERPORT=y -# CONFIG_SERIO_AMBAKMI is not set -# CONFIG_SERIO_PCIPS2 is not set -CONFIG_SERIO_LIBPS2=y -# CONFIG_SERIO_RAW is not set -# CONFIG_SERIO_ALTERA_PS2 is not set -# CONFIG_SERIO_PS2MULT is not set -# CONFIG_SERIO_ARC_PS2 is not set -# CONFIG_SERIO_APBPS2 is not set -# CONFIG_SERIO_SUN4I_PS2 is not set -# CONFIG_SERIO_GPIO_PS2 is not set -# CONFIG_USERIO is not set -# CONFIG_GAMEPORT is not set -# end of Hardware I/O ports -# end of Input device support - -# -# Character devices -# -CONFIG_TTY=y -CONFIG_VT=y -CONFIG_CONSOLE_TRANSLATIONS=y -CONFIG_VT_CONSOLE=y -CONFIG_HW_CONSOLE=y -CONFIG_VT_HW_CONSOLE_BINDING=y -CONFIG_UNIX98_PTYS=y -CONFIG_LEGACY_PTYS=y -CONFIG_LEGACY_PTY_COUNT=256 -CONFIG_LEGACY_TIOCSTI=y -CONFIG_LDISC_AUTOLOAD=y - -# -# Serial drivers -# -CONFIG_SERIAL_EARLYCON=y -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y -CONFIG_SERIAL_8250_16550A_VARIANTS=y -# CONFIG_SERIAL_8250_FINTEK is not set -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_SERIAL_8250_DMA=y -CONFIG_SERIAL_8250_PCILIB=y -CONFIG_SERIAL_8250_PCI=y -CONFIG_SERIAL_8250_EXAR=y -CONFIG_SERIAL_8250_NR_UARTS=4 -CONFIG_SERIAL_8250_RUNTIME_UARTS=4 -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_PCI1XXXX is not set -CONFIG_SERIAL_8250_DWLIB=y -CONFIG_SERIAL_8250_DW=y -# CONFIG_SERIAL_8250_EM is not set -# CONFIG_SERIAL_8250_RT288X is not set -CONFIG_SERIAL_8250_PERICOM=y -CONFIG_SERIAL_OF_PLATFORM=y - -# -# Non-8250 serial port support -# -# CONFIG_SERIAL_AMBA_PL010 is not set -# CONFIG_SERIAL_AMBA_PL011 is not set -# CONFIG_SERIAL_EARLYCON_SEMIHOST is not set -# CONFIG_SERIAL_MAX3100 is not set -# CONFIG_SERIAL_MAX310X is not set -# CONFIG_SERIAL_UARTLITE is not set -CONFIG_SERIAL_SH_SCI=y -CONFIG_SERIAL_SH_SCI_NR_UARTS=18 -CONFIG_SERIAL_SH_SCI_CONSOLE=y -CONFIG_SERIAL_SH_SCI_EARLYCON=y -CONFIG_SERIAL_SH_SCI_DMA=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -# CONFIG_SERIAL_JSM is not set -CONFIG_SERIAL_SIFIVE=y -CONFIG_SERIAL_SIFIVE_CONSOLE=y -# CONFIG_SERIAL_SCCNXP is not set -# CONFIG_SERIAL_SC16IS7XX is not set -# CONFIG_SERIAL_ALTERA_JTAGUART is not set -# CONFIG_SERIAL_ALTERA_UART is not set -# CONFIG_SERIAL_XILINX_PS_UART is not set -# CONFIG_SERIAL_ARC is not set -# CONFIG_SERIAL_RP2 is not set -# CONFIG_SERIAL_FSL_LPUART is not set -# CONFIG_SERIAL_FSL_LINFLEXUART is not set -# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set -# CONFIG_SERIAL_SPRD is not set -# end of Serial drivers - -CONFIG_SERIAL_MCTRL_GPIO=y -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_GOLDFISH_TTY is not set -# CONFIG_N_GSM is not set -# CONFIG_NOZOMI is not set -# CONFIG_NULL_TTY is not set -CONFIG_HVC_DRIVER=y -# CONFIG_RPMSG_TTY is not set -CONFIG_SERIAL_DEV_BUS=y -CONFIG_SERIAL_DEV_CTRL_TTYPORT=y -# CONFIG_TTY_PRINTK is not set -CONFIG_VIRTIO_CONSOLE=y -# CONFIG_IPMI_HANDLER is not set -# CONFIG_SSIF_IPMI_BMC is not set -# CONFIG_IPMB_DEVICE_INTERFACE is not set -CONFIG_HW_RANDOM=y -# CONFIG_HW_RANDOM_TIMERIOMEM is not set -# CONFIG_HW_RANDOM_BA431 is not set -CONFIG_HW_RANDOM_VIRTIO=y -# CONFIG_HW_RANDOM_CCTRNG is not set -# CONFIG_HW_RANDOM_XIPHERA is not set -CONFIG_HW_RANDOM_JH7110=y -# CONFIG_APPLICOM is not set -CONFIG_DEVMEM=y -CONFIG_DEVPORT=y -# CONFIG_TCG_TPM is not set -# CONFIG_XILLYBUS is not set -# CONFIG_XILLYUSB is not set -# end of Character devices - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_COMPAT=y -# CONFIG_I2C_CHARDEV is not set -# CONFIG_I2C_MUX is not set -CONFIG_I2C_HELPER_AUTO=y - -# -# I2C Hardware Bus support -# - -# -# PC SMBus host controller drivers -# -# CONFIG_I2C_ALI1535 is not set -# CONFIG_I2C_ALI1563 is not set -# CONFIG_I2C_ALI15X3 is not set -# CONFIG_I2C_AMD756 is not set -# CONFIG_I2C_AMD8111 is not set -# CONFIG_I2C_I801 is not set -# CONFIG_I2C_ISCH is not set -# CONFIG_I2C_PIIX4 is not set -# CONFIG_I2C_NFORCE2 is not set -# CONFIG_I2C_NVIDIA_GPU is not set -# CONFIG_I2C_SIS5595 is not set -# CONFIG_I2C_SIS630 is not set -# CONFIG_I2C_SIS96X is not set -# CONFIG_I2C_VIA is not set -# CONFIG_I2C_VIAPRO is not set - -# -# I2C system bus drivers (mostly embedded / system-on-chip) -# -# CONFIG_I2C_CBUS_GPIO is not set -CONFIG_I2C_DESIGNWARE_CORE=y -# CONFIG_I2C_DESIGNWARE_SLAVE is not set -CONFIG_I2C_DESIGNWARE_PLATFORM=y -# CONFIG_I2C_DESIGNWARE_PCI is not set -# CONFIG_I2C_EMEV2 is not set -# CONFIG_I2C_GPIO is not set -# CONFIG_I2C_MICROCHIP_CORE is not set -# CONFIG_I2C_MV64XXX is not set -# CONFIG_I2C_NOMADIK is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PCA_PLATFORM is not set -# CONFIG_I2C_RIIC is not set -# CONFIG_I2C_RK3X is not set -# CONFIG_I2C_RZV2M is not set -# CONFIG_I2C_SH_MOBILE is not set -# CONFIG_I2C_SIMTEC is not set -# CONFIG_I2C_XILINX is not set -# CONFIG_I2C_RCAR is not set - -# -# External I2C/SMBus adapter drivers -# -# CONFIG_I2C_DIOLAN_U2C is not set -# CONFIG_I2C_CP2615 is not set -# CONFIG_I2C_PCI1XXXX is not set -# CONFIG_I2C_ROBOTFUZZ_OSIF is not set -# CONFIG_I2C_TAOS_EVM is not set -# CONFIG_I2C_TINY_USB is not set - -# -# Other I2C/SMBus bus drivers -# -# CONFIG_I2C_VIRTIO is not set -# end of I2C Hardware Bus support - -# CONFIG_I2C_STUB is not set -CONFIG_I2C_SLAVE=y -# CONFIG_I2C_SLAVE_EEPROM is not set -# CONFIG_I2C_SLAVE_TESTUNIT is not set -# CONFIG_I2C_DEBUG_CORE is not set -# CONFIG_I2C_DEBUG_ALGO is not set -# CONFIG_I2C_DEBUG_BUS is not set -# end of I2C support - -# CONFIG_I3C is not set -CONFIG_SPI=y -# CONFIG_SPI_DEBUG is not set -CONFIG_SPI_MASTER=y -CONFIG_SPI_MEM=y - -# -# SPI Master Controller Drivers -# -# CONFIG_SPI_ALTERA is not set -# CONFIG_SPI_AXI_SPI_ENGINE is not set -# CONFIG_SPI_BITBANG is not set -# CONFIG_SPI_CADENCE is not set -CONFIG_SPI_CADENCE_QUADSPI=y -# CONFIG_SPI_CADENCE_XSPI is not set -# CONFIG_SPI_DESIGNWARE is not set -# CONFIG_SPI_GPIO is not set -# CONFIG_SPI_FSL_SPI is not set -# CONFIG_SPI_MICROCHIP_CORE is not set -# CONFIG_SPI_MICROCHIP_CORE_QSPI is not set -# CONFIG_SPI_OC_TINY is not set -# CONFIG_SPI_PCI1XXXX is not set -CONFIG_SPI_PL022=y -# CONFIG_SPI_PXA2XX is not set -# CONFIG_SPI_RSPI is not set -# CONFIG_SPI_SC18IS602 is not set -# CONFIG_SPI_SH_MSIOF is not set -# CONFIG_SPI_SH_HSPI is not set -CONFIG_SPI_SIFIVE=y -# CONFIG_SPI_SN_F_OSPI is not set -# CONFIG_SPI_SUN4I is not set -CONFIG_SPI_SUN6I=y -# CONFIG_SPI_MXIC is not set -# CONFIG_SPI_XCOMM is not set -# CONFIG_SPI_XILINX is not set -# CONFIG_SPI_ZYNQMP_GQSPI is not set -# CONFIG_SPI_AMD is not set - -# -# SPI Multiplexer support -# -# CONFIG_SPI_MUX is not set - -# -# SPI Protocol Masters -# -# CONFIG_SPI_SPIDEV is not set -# CONFIG_SPI_LOOPBACK_TEST is not set -# CONFIG_SPI_TLE62X0 is not set -# CONFIG_SPI_SLAVE is not set -# CONFIG_SPMI is not set -# CONFIG_HSI is not set -CONFIG_PPS=y -# CONFIG_PPS_DEBUG is not set - -# -# PPS clients support -# -# CONFIG_PPS_CLIENT_KTIMER is not set -# CONFIG_PPS_CLIENT_LDISC is not set -# CONFIG_PPS_CLIENT_GPIO is not set - -# -# PPS generators support -# - -# -# PTP clock support -# -CONFIG_PTP_1588_CLOCK=y -CONFIG_PTP_1588_CLOCK_OPTIONAL=y - -# -# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. -# -# CONFIG_PTP_1588_CLOCK_IDT82P33 is not set -# CONFIG_PTP_1588_CLOCK_IDTCM is not set -# CONFIG_PTP_1588_CLOCK_OCP is not set -# end of PTP clock support - -CONFIG_PINCTRL=y -CONFIG_GENERIC_PINCTRL_GROUPS=y -CONFIG_PINMUX=y -CONFIG_GENERIC_PINMUX_FUNCTIONS=y -CONFIG_PINCONF=y -CONFIG_GENERIC_PINCONF=y -# CONFIG_DEBUG_PINCTRL is not set -# CONFIG_PINCTRL_AXP209 is not set -# CONFIG_PINCTRL_CY8C95X0 is not set -# CONFIG_PINCTRL_MCP23S08 is not set -# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set -# CONFIG_PINCTRL_OCELOT is not set -# CONFIG_PINCTRL_SINGLE is not set -# CONFIG_PINCTRL_STMFX is not set -# CONFIG_PINCTRL_SX150X is not set - -# -# Renesas pinctrl drivers -# -CONFIG_PINCTRL_RENESAS=y -CONFIG_PINCTRL_RZG2L=y -# end of Renesas pinctrl drivers - -CONFIG_PINCTRL_STARFIVE_JH7100=y -CONFIG_PINCTRL_STARFIVE_JH7110=y -CONFIG_PINCTRL_STARFIVE_JH7110_SYS=y -CONFIG_PINCTRL_STARFIVE_JH7110_AON=y -CONFIG_PINCTRL_SUNXI=y -# CONFIG_PINCTRL_SUN4I_A10 is not set -# CONFIG_PINCTRL_SUN5I is not set -# CONFIG_PINCTRL_SUN6I_A31 is not set -# CONFIG_PINCTRL_SUN6I_A31_R is not set -# CONFIG_PINCTRL_SUN8I_A23 is not set -# CONFIG_PINCTRL_SUN8I_A33 is not set -# CONFIG_PINCTRL_SUN8I_A83T is not set -# CONFIG_PINCTRL_SUN8I_A83T_R is not set -# CONFIG_PINCTRL_SUN8I_A23_R is not set -# CONFIG_PINCTRL_SUN8I_H3 is not set -# CONFIG_PINCTRL_SUN8I_H3_R is not set -# CONFIG_PINCTRL_SUN8I_V3S is not set -# CONFIG_PINCTRL_SUN9I_A80 is not set -# CONFIG_PINCTRL_SUN9I_A80_R is not set -CONFIG_PINCTRL_SUN20I_D1=y -# CONFIG_PINCTRL_SUN50I_A64 is not set -# CONFIG_PINCTRL_SUN50I_A64_R is not set -# CONFIG_PINCTRL_SUN50I_A100 is not set -# CONFIG_PINCTRL_SUN50I_A100_R is not set -# CONFIG_PINCTRL_SUN50I_H5 is not set -# CONFIG_PINCTRL_SUN50I_H6 is not set -# CONFIG_PINCTRL_SUN50I_H6_R is not set -# CONFIG_PINCTRL_SUN50I_H616 is not set -# CONFIG_PINCTRL_SUN50I_H616_R is not set -CONFIG_GPIOLIB=y -CONFIG_GPIOLIB_FASTPATH_LIMIT=512 -CONFIG_OF_GPIO=y -CONFIG_GPIOLIB_IRQCHIP=y -# CONFIG_DEBUG_GPIO is not set -CONFIG_GPIO_SYSFS=y -CONFIG_GPIO_CDEV=y -CONFIG_GPIO_CDEV_V1=y -CONFIG_GPIO_GENERIC=y - -# -# Memory mapped GPIO drivers -# -# CONFIG_GPIO_74XX_MMIO is not set -# CONFIG_GPIO_ALTERA is not set -# CONFIG_GPIO_CADENCE is not set -# CONFIG_GPIO_DWAPB is not set -# CONFIG_GPIO_EXAR is not set -# CONFIG_GPIO_FTGPIO010 is not set -# CONFIG_GPIO_GENERIC_PLATFORM is not set -# CONFIG_GPIO_GRGPIO is not set -# CONFIG_GPIO_HLWD is not set -# CONFIG_GPIO_LOGICVC is not set -# CONFIG_GPIO_MB86S7X is not set -# CONFIG_GPIO_PL061 is not set -# CONFIG_GPIO_RCAR is not set -CONFIG_GPIO_SIFIVE=y -# CONFIG_GPIO_SYSCON is not set -# CONFIG_GPIO_XILINX is not set -# CONFIG_GPIO_AMD_FCH is not set -# end of Memory mapped GPIO drivers - -# -# I2C GPIO expanders -# -# CONFIG_GPIO_ADNP is not set -# CONFIG_GPIO_FXL6408 is not set -# CONFIG_GPIO_GW_PLD is not set -# CONFIG_GPIO_MAX7300 is not set -# CONFIG_GPIO_MAX732X is not set -# CONFIG_GPIO_PCA953X is not set -# CONFIG_GPIO_PCA9570 is not set -# CONFIG_GPIO_PCF857X is not set -# CONFIG_GPIO_TPIC2810 is not set -# end of I2C GPIO expanders - -# -# MFD GPIO expanders -# -# end of MFD GPIO expanders - -# -# PCI GPIO expanders -# -# CONFIG_GPIO_BT8XX is not set -# CONFIG_GPIO_PCI_IDIO_16 is not set -# CONFIG_GPIO_PCIE_IDIO_24 is not set -# CONFIG_GPIO_RDC321X is not set -# end of PCI GPIO expanders - -# -# SPI GPIO expanders -# -# CONFIG_GPIO_74X164 is not set -# CONFIG_GPIO_MAX3191X is not set -# CONFIG_GPIO_MAX7301 is not set -# CONFIG_GPIO_MC33880 is not set -# CONFIG_GPIO_PISOSR is not set -# CONFIG_GPIO_XRA1403 is not set -# end of SPI GPIO expanders - -# -# USB GPIO expanders -# -# end of USB GPIO expanders - -# -# Virtual GPIO drivers -# -# CONFIG_GPIO_AGGREGATOR is not set -# CONFIG_GPIO_LATCH is not set -# CONFIG_GPIO_MOCKUP is not set -# CONFIG_GPIO_VIRTIO is not set -# CONFIG_GPIO_SIM is not set -# end of Virtual GPIO drivers - -# CONFIG_W1 is not set -CONFIG_POWER_RESET=y -# CONFIG_POWER_RESET_GPIO is not set -CONFIG_POWER_RESET_GPIO_RESTART=y -# CONFIG_POWER_RESET_LTC2952 is not set -# CONFIG_POWER_RESET_REGULATOR is not set -# CONFIG_POWER_RESET_RESTART is not set -CONFIG_POWER_RESET_SYSCON=y -CONFIG_POWER_RESET_SYSCON_POWEROFF=y -# CONFIG_SYSCON_REBOOT_MODE is not set -# CONFIG_NVMEM_REBOOT_MODE is not set -CONFIG_POWER_SUPPLY=y -# CONFIG_POWER_SUPPLY_DEBUG is not set -CONFIG_POWER_SUPPLY_HWMON=y -# CONFIG_IP5XXX_POWER is not set -# CONFIG_TEST_POWER is not set -# CONFIG_CHARGER_ADP5061 is not set -# CONFIG_BATTERY_CW2015 is not set -# CONFIG_BATTERY_DS2780 is not set -# CONFIG_BATTERY_DS2781 is not set -# CONFIG_BATTERY_DS2782 is not set -# CONFIG_BATTERY_SAMSUNG_SDI is not set -# CONFIG_BATTERY_SBS is not set -# CONFIG_CHARGER_SBS is not set -# CONFIG_BATTERY_BQ27XXX is not set -# CONFIG_BATTERY_MAX17040 is not set -# CONFIG_BATTERY_MAX17042 is not set -# CONFIG_CHARGER_MAX8903 is not set -# CONFIG_CHARGER_LP8727 is not set -# CONFIG_CHARGER_GPIO is not set -# CONFIG_CHARGER_MANAGER is not set -# CONFIG_CHARGER_LT3651 is not set -# CONFIG_CHARGER_LTC4162L is not set -# CONFIG_CHARGER_DETECTOR_MAX14656 is not set -# CONFIG_CHARGER_MAX77976 is not set -# CONFIG_CHARGER_BQ2415X is not set -# CONFIG_CHARGER_BQ24190 is not set -# CONFIG_CHARGER_BQ24257 is not set -# CONFIG_CHARGER_BQ24735 is not set -# CONFIG_CHARGER_BQ2515X is not set -# CONFIG_CHARGER_BQ25890 is not set -# CONFIG_CHARGER_BQ25980 is not set -# CONFIG_CHARGER_BQ256XX is not set -# CONFIG_CHARGER_SMB347 is not set -# CONFIG_BATTERY_GAUGE_LTC2941 is not set -# CONFIG_BATTERY_GOLDFISH is not set -# CONFIG_BATTERY_RT5033 is not set -# CONFIG_CHARGER_RT9455 is not set -# CONFIG_CHARGER_RT9467 is not set -# CONFIG_CHARGER_RT9471 is not set -# CONFIG_CHARGER_UCS1002 is not set -# CONFIG_CHARGER_BD99954 is not set -# CONFIG_BATTERY_UG3105 is not set -CONFIG_HWMON=y -# CONFIG_HWMON_DEBUG_CHIP is not set - -# -# Native drivers -# -# CONFIG_SENSORS_AD7314 is not set -# CONFIG_SENSORS_AD7414 is not set -# CONFIG_SENSORS_AD7418 is not set -# CONFIG_SENSORS_ADM1021 is not set -# CONFIG_SENSORS_ADM1025 is not set -# CONFIG_SENSORS_ADM1026 is not set -# CONFIG_SENSORS_ADM1029 is not set -# CONFIG_SENSORS_ADM1031 is not set -# CONFIG_SENSORS_ADM1177 is not set -# CONFIG_SENSORS_ADM9240 is not set -# CONFIG_SENSORS_ADT7310 is not set -# CONFIG_SENSORS_ADT7410 is not set -# CONFIG_SENSORS_ADT7411 is not set -# CONFIG_SENSORS_ADT7462 is not set -# CONFIG_SENSORS_ADT7470 is not set -# CONFIG_SENSORS_ADT7475 is not set -# CONFIG_SENSORS_AHT10 is not set -# CONFIG_SENSORS_AQUACOMPUTER_D5NEXT is not set -# CONFIG_SENSORS_AS370 is not set -# CONFIG_SENSORS_ASC7621 is not set -# CONFIG_SENSORS_AXI_FAN_CONTROL is not set -# CONFIG_SENSORS_ATXP1 is not set -# CONFIG_SENSORS_CORSAIR_CPRO is not set -# CONFIG_SENSORS_CORSAIR_PSU is not set -# CONFIG_SENSORS_DRIVETEMP is not set -# CONFIG_SENSORS_DS620 is not set -# CONFIG_SENSORS_DS1621 is not set -# CONFIG_SENSORS_I5K_AMB is not set -# CONFIG_SENSORS_F71805F is not set -# CONFIG_SENSORS_F71882FG is not set -# CONFIG_SENSORS_F75375S is not set -# CONFIG_SENSORS_FTSTEUTATES is not set -# CONFIG_SENSORS_GL518SM is not set -# CONFIG_SENSORS_GL520SM is not set -# CONFIG_SENSORS_G760A is not set -# CONFIG_SENSORS_G762 is not set -# CONFIG_SENSORS_GPIO_FAN is not set -# CONFIG_SENSORS_HIH6130 is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_JC42 is not set -# CONFIG_SENSORS_POWR1220 is not set -# CONFIG_SENSORS_LINEAGE is not set -# CONFIG_SENSORS_LTC2945 is not set -# CONFIG_SENSORS_LTC2947_I2C is not set -# CONFIG_SENSORS_LTC2947_SPI is not set -# CONFIG_SENSORS_LTC2990 is not set -# CONFIG_SENSORS_LTC2992 is not set -# CONFIG_SENSORS_LTC4151 is not set -# CONFIG_SENSORS_LTC4215 is not set -# CONFIG_SENSORS_LTC4222 is not set -# CONFIG_SENSORS_LTC4245 is not set -# CONFIG_SENSORS_LTC4260 is not set -# CONFIG_SENSORS_LTC4261 is not set -# CONFIG_SENSORS_MAX1111 is not set -# CONFIG_SENSORS_MAX127 is not set -# CONFIG_SENSORS_MAX16065 is not set -# CONFIG_SENSORS_MAX1619 is not set -# CONFIG_SENSORS_MAX1668 is not set -# CONFIG_SENSORS_MAX197 is not set -# CONFIG_SENSORS_MAX31722 is not set -# CONFIG_SENSORS_MAX31730 is not set -# CONFIG_SENSORS_MAX31760 is not set -# CONFIG_SENSORS_MAX6620 is not set -# CONFIG_SENSORS_MAX6621 is not set -# CONFIG_SENSORS_MAX6639 is not set -# CONFIG_SENSORS_MAX6642 is not set -# CONFIG_SENSORS_MAX6650 is not set -# CONFIG_SENSORS_MAX6697 is not set -# CONFIG_SENSORS_MAX31790 is not set -# CONFIG_SENSORS_MC34VR500 is not set -# CONFIG_SENSORS_MCP3021 is not set -# CONFIG_SENSORS_TC654 is not set -# CONFIG_SENSORS_TPS23861 is not set -# CONFIG_SENSORS_MR75203 is not set -# CONFIG_SENSORS_ADCXX is not set -# CONFIG_SENSORS_LM63 is not set -# CONFIG_SENSORS_LM70 is not set -# CONFIG_SENSORS_LM73 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM77 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM80 is not set -# CONFIG_SENSORS_LM83 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_LM87 is not set -# CONFIG_SENSORS_LM90 is not set -# CONFIG_SENSORS_LM92 is not set -# CONFIG_SENSORS_LM93 is not set -# CONFIG_SENSORS_LM95234 is not set -# CONFIG_SENSORS_LM95241 is not set -# CONFIG_SENSORS_LM95245 is not set -# CONFIG_SENSORS_PC87360 is not set -# CONFIG_SENSORS_PC87427 is not set -# CONFIG_SENSORS_NCT6683 is not set -# CONFIG_SENSORS_NCT6775_I2C is not set -# CONFIG_SENSORS_NCT7802 is not set -# CONFIG_SENSORS_NCT7904 is not set -# CONFIG_SENSORS_NPCM7XX is not set -# CONFIG_SENSORS_NZXT_KRAKEN2 is not set -# CONFIG_SENSORS_NZXT_SMART2 is not set -# CONFIG_SENSORS_OCC_P8_I2C is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_PMBUS is not set -# CONFIG_SENSORS_PWM_FAN is not set -# CONFIG_SENSORS_SBTSI is not set -# CONFIG_SENSORS_SBRMI is not set -# CONFIG_SENSORS_SHT15 is not set -# CONFIG_SENSORS_SHT21 is not set -# CONFIG_SENSORS_SHT3x is not set -# CONFIG_SENSORS_SHT4x is not set -# CONFIG_SENSORS_SHTC1 is not set -# CONFIG_SENSORS_SIS5595 is not set -# CONFIG_SENSORS_DME1737 is not set -# CONFIG_SENSORS_EMC1403 is not set -# CONFIG_SENSORS_EMC2103 is not set -# CONFIG_SENSORS_EMC2305 is not set -# CONFIG_SENSORS_EMC6W201 is not set -# CONFIG_SENSORS_SMSC47M1 is not set -# CONFIG_SENSORS_SMSC47M192 is not set -# CONFIG_SENSORS_SMSC47B397 is not set -# CONFIG_SENSORS_SCH5627 is not set -# CONFIG_SENSORS_SCH5636 is not set -# CONFIG_SENSORS_STTS751 is not set -CONFIG_SENSORS_SFCTEMP=y -# CONFIG_SENSORS_SMM665 is not set -# CONFIG_SENSORS_ADC128D818 is not set -# CONFIG_SENSORS_ADS7828 is not set -# CONFIG_SENSORS_ADS7871 is not set -# CONFIG_SENSORS_AMC6821 is not set -# CONFIG_SENSORS_INA209 is not set -# CONFIG_SENSORS_INA2XX is not set -# CONFIG_SENSORS_INA238 is not set -# CONFIG_SENSORS_INA3221 is not set -# CONFIG_SENSORS_TC74 is not set -# CONFIG_SENSORS_THMC50 is not set -# CONFIG_SENSORS_TMP102 is not set -# CONFIG_SENSORS_TMP103 is not set -# CONFIG_SENSORS_TMP108 is not set -# CONFIG_SENSORS_TMP401 is not set -# CONFIG_SENSORS_TMP421 is not set -# CONFIG_SENSORS_TMP464 is not set -# CONFIG_SENSORS_TMP513 is not set -# CONFIG_SENSORS_VIA686A is not set -# CONFIG_SENSORS_VT1211 is not set -# CONFIG_SENSORS_VT8231 is not set -# CONFIG_SENSORS_W83773G is not set -# CONFIG_SENSORS_W83781D is not set -# CONFIG_SENSORS_W83791D is not set -# CONFIG_SENSORS_W83792D is not set -# CONFIG_SENSORS_W83793 is not set -# CONFIG_SENSORS_W83795 is not set -# CONFIG_SENSORS_W83L785TS is not set -# CONFIG_SENSORS_W83L786NG is not set -# CONFIG_SENSORS_W83627HF is not set -# CONFIG_SENSORS_W83627EHF is not set -CONFIG_THERMAL=y -# CONFIG_THERMAL_NETLINK is not set -# CONFIG_THERMAL_STATISTICS is not set -CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 -CONFIG_THERMAL_HWMON=y -CONFIG_THERMAL_OF=y -# CONFIG_THERMAL_WRITABLE_TRIPS is not set -CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y -# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set -# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set -# CONFIG_THERMAL_GOV_FAIR_SHARE is not set -CONFIG_THERMAL_GOV_STEP_WISE=y -# CONFIG_THERMAL_GOV_BANG_BANG is not set -# CONFIG_THERMAL_GOV_USER_SPACE is not set -# CONFIG_CPU_THERMAL is not set -# CONFIG_DEVFREQ_THERMAL is not set -# CONFIG_THERMAL_EMULATION is not set -# CONFIG_THERMAL_MMIO is not set -# CONFIG_SUN8I_THERMAL is not set -# CONFIG_RCAR_THERMAL is not set -# CONFIG_RCAR_GEN3_THERMAL is not set -# CONFIG_RZG2L_THERMAL is not set -CONFIG_WATCHDOG=y -CONFIG_WATCHDOG_CORE=y -# CONFIG_WATCHDOG_NOWAYOUT is not set -CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y -CONFIG_WATCHDOG_OPEN_TIMEOUT=0 -# CONFIG_WATCHDOG_SYSFS is not set -# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set - -# -# Watchdog Pretimeout Governors -# -# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set - -# -# Watchdog Device Drivers -# -# CONFIG_SOFT_WATCHDOG is not set -# CONFIG_GPIO_WATCHDOG is not set -# CONFIG_XILINX_WATCHDOG is not set -# CONFIG_ZIIRAVE_WATCHDOG is not set -# CONFIG_CADENCE_WATCHDOG is not set -# CONFIG_DW_WATCHDOG is not set -CONFIG_SUNXI_WATCHDOG=y -# CONFIG_MAX63XX_WATCHDOG is not set -# CONFIG_RENESAS_WDT is not set -# CONFIG_RENESAS_RZAWDT is not set -# CONFIG_RENESAS_RZN1WDT is not set -# CONFIG_RENESAS_RZG2LWDT is not set -# CONFIG_ALIM7101_WDT is not set -# CONFIG_I6300ESB_WDT is not set -# CONFIG_MEN_A21_WDT is not set -CONFIG_STARFIVE_WATCHDOG=y - -# -# PCI-based Watchdog Cards -# -# CONFIG_PCIPCWATCHDOG is not set -# CONFIG_WDTPCI is not set - -# -# USB-based Watchdog Cards -# -# CONFIG_USBPCWATCHDOG is not set -CONFIG_SSB_POSSIBLE=y -# CONFIG_SSB is not set -CONFIG_BCMA_POSSIBLE=y -# CONFIG_BCMA is not set - -# -# Multifunction device drivers -# -CONFIG_MFD_CORE=y -# CONFIG_MFD_ACT8945A is not set -# CONFIG_MFD_SUN4I_GPADC is not set -# CONFIG_MFD_AS3711 is not set -# CONFIG_MFD_SMPRO is not set -# CONFIG_MFD_AS3722 is not set -# CONFIG_PMIC_ADP5520 is not set -# CONFIG_MFD_AAT2870_CORE is not set -# CONFIG_MFD_ATMEL_FLEXCOM is not set -# CONFIG_MFD_ATMEL_HLCDC is not set -# CONFIG_MFD_BCM590XX is not set -# CONFIG_MFD_BD9571MWV is not set -CONFIG_MFD_AXP20X=y -CONFIG_MFD_AXP20X_I2C=y -# CONFIG_MFD_MADERA is not set -# CONFIG_MFD_MAX597X is not set -# CONFIG_PMIC_DA903X is not set -# CONFIG_MFD_DA9052_SPI is not set -# CONFIG_MFD_DA9052_I2C is not set -# CONFIG_MFD_DA9055 is not set -# CONFIG_MFD_DA9062 is not set -# CONFIG_MFD_DA9063 is not set -# CONFIG_MFD_DA9150 is not set -# CONFIG_MFD_DLN2 is not set -# CONFIG_MFD_GATEWORKS_GSC is not set -# CONFIG_MFD_MC13XXX_SPI is not set -# CONFIG_MFD_MC13XXX_I2C is not set -# CONFIG_MFD_MP2629 is not set -# CONFIG_MFD_HI6421_PMIC is not set -# CONFIG_LPC_ICH is not set -# CONFIG_LPC_SCH is not set -# CONFIG_MFD_IQS62X is not set -# CONFIG_MFD_JANZ_CMODIO is not set -# CONFIG_MFD_KEMPLD is not set -# CONFIG_MFD_88PM800 is not set -# CONFIG_MFD_88PM805 is not set -# CONFIG_MFD_88PM860X is not set -# CONFIG_MFD_MAX14577 is not set -# CONFIG_MFD_MAX77620 is not set -# CONFIG_MFD_MAX77650 is not set -# CONFIG_MFD_MAX77686 is not set -# CONFIG_MFD_MAX77693 is not set -# CONFIG_MFD_MAX77714 is not set -# CONFIG_MFD_MAX77843 is not set -# CONFIG_MFD_MAX8907 is not set -# CONFIG_MFD_MAX8925 is not set -# CONFIG_MFD_MAX8997 is not set -# CONFIG_MFD_MAX8998 is not set -# CONFIG_MFD_MT6360 is not set -# CONFIG_MFD_MT6370 is not set -# CONFIG_MFD_MT6397 is not set -# CONFIG_MFD_MENF21BMC is not set -# CONFIG_MFD_OCELOT is not set -# CONFIG_EZX_PCAP is not set -# CONFIG_MFD_CPCAP is not set -# CONFIG_MFD_VIPERBOARD is not set -# CONFIG_MFD_NTXEC is not set -# CONFIG_MFD_RETU is not set -# CONFIG_MFD_PCF50633 is not set -# CONFIG_MFD_SY7636A is not set -# CONFIG_MFD_RDC321X is not set -# CONFIG_MFD_RT4831 is not set -# CONFIG_MFD_RT5033 is not set -# CONFIG_MFD_RT5120 is not set -# CONFIG_MFD_RC5T583 is not set -# CONFIG_MFD_RK808 is not set -# CONFIG_MFD_RN5T618 is not set -# CONFIG_MFD_SEC_CORE is not set -# CONFIG_MFD_SI476X_CORE is not set -# CONFIG_MFD_SM501 is not set -# CONFIG_MFD_SKY81452 is not set -# CONFIG_RZ_MTU3 is not set -# CONFIG_MFD_STMPE is not set -# CONFIG_MFD_SUN6I_PRCM is not set -CONFIG_MFD_SYSCON=y -# CONFIG_MFD_TI_AM335X_TSCADC is not set -# CONFIG_MFD_LP3943 is not set -# CONFIG_MFD_LP8788 is not set -# CONFIG_MFD_TI_LMU is not set -# CONFIG_MFD_PALMAS is not set -# CONFIG_TPS6105X is not set -# CONFIG_TPS65010 is not set -# CONFIG_TPS6507X is not set -# CONFIG_MFD_TPS65086 is not set -# CONFIG_MFD_TPS65090 is not set -# CONFIG_MFD_TPS65217 is not set -# CONFIG_MFD_TI_LP873X is not set -# CONFIG_MFD_TI_LP87565 is not set -# CONFIG_MFD_TPS65218 is not set -# CONFIG_MFD_TPS65219 is not set -# CONFIG_MFD_TPS6586X is not set -# CONFIG_MFD_TPS65910 is not set -# CONFIG_MFD_TPS65912_I2C is not set -# CONFIG_MFD_TPS65912_SPI is not set -# CONFIG_TWL4030_CORE is not set -# CONFIG_TWL6040_CORE is not set -# CONFIG_MFD_WL1273_CORE is not set -# CONFIG_MFD_LM3533 is not set -# CONFIG_MFD_TC3589X is not set -# CONFIG_MFD_TQMX86 is not set -# CONFIG_MFD_VX855 is not set -# CONFIG_MFD_LOCHNAGAR is not set -# CONFIG_MFD_ARIZONA_I2C is not set -# CONFIG_MFD_ARIZONA_SPI is not set -# CONFIG_MFD_WM8400 is not set -# CONFIG_MFD_WM831X_I2C is not set -# CONFIG_MFD_WM831X_SPI is not set -# CONFIG_MFD_WM8350_I2C is not set -# CONFIG_MFD_WM8994 is not set -# CONFIG_MFD_ROHM_BD718XX is not set -# CONFIG_MFD_ROHM_BD71828 is not set -# CONFIG_MFD_ROHM_BD957XMUF is not set -# CONFIG_MFD_STPMIC1 is not set -# CONFIG_MFD_STMFX is not set -# CONFIG_MFD_ATC260X_I2C is not set -# CONFIG_MFD_QCOM_PM8008 is not set -# CONFIG_RAVE_SP_CORE is not set -# CONFIG_MFD_INTEL_M10_BMC_SPI is not set -# CONFIG_MFD_RSMU_I2C is not set -# CONFIG_MFD_RSMU_SPI is not set -# end of Multifunction device drivers - -CONFIG_REGULATOR=y -# CONFIG_REGULATOR_DEBUG is not set -CONFIG_REGULATOR_FIXED_VOLTAGE=y -# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set -# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set -# CONFIG_REGULATOR_88PG86X is not set -# CONFIG_REGULATOR_ACT8865 is not set -# CONFIG_REGULATOR_AD5398 is not set -CONFIG_REGULATOR_AXP20X=y -# CONFIG_REGULATOR_DA9121 is not set -# CONFIG_REGULATOR_DA9210 is not set -# CONFIG_REGULATOR_DA9211 is not set -# CONFIG_REGULATOR_FAN53555 is not set -# CONFIG_REGULATOR_FAN53880 is not set -# CONFIG_REGULATOR_GPIO is not set -# CONFIG_REGULATOR_ISL9305 is not set -# CONFIG_REGULATOR_ISL6271A is not set -# CONFIG_REGULATOR_LP3971 is not set -# CONFIG_REGULATOR_LP3972 is not set -# CONFIG_REGULATOR_LP872X is not set -# CONFIG_REGULATOR_LP8755 is not set -# CONFIG_REGULATOR_LTC3589 is not set -# CONFIG_REGULATOR_LTC3676 is not set -# CONFIG_REGULATOR_MAX1586 is not set -# CONFIG_REGULATOR_MAX8649 is not set -# CONFIG_REGULATOR_MAX8660 is not set -# CONFIG_REGULATOR_MAX8893 is not set -# CONFIG_REGULATOR_MAX8952 is not set -# CONFIG_REGULATOR_MAX8973 is not set -# CONFIG_REGULATOR_MAX20086 is not set -# CONFIG_REGULATOR_MAX20411 is not set -# CONFIG_REGULATOR_MAX77826 is not set -# CONFIG_REGULATOR_MCP16502 is not set -# CONFIG_REGULATOR_MP5416 is not set -# CONFIG_REGULATOR_MP8859 is not set -# CONFIG_REGULATOR_MP886X is not set -# CONFIG_REGULATOR_MPQ7920 is not set -# CONFIG_REGULATOR_MT6311 is not set -# CONFIG_REGULATOR_PCA9450 is not set -# CONFIG_REGULATOR_PF8X00 is not set -# CONFIG_REGULATOR_PFUZE100 is not set -# CONFIG_REGULATOR_PV88060 is not set -# CONFIG_REGULATOR_PV88080 is not set -# CONFIG_REGULATOR_PV88090 is not set -# CONFIG_REGULATOR_PWM is not set -# CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY is not set -# CONFIG_REGULATOR_RT4801 is not set -# CONFIG_REGULATOR_RT4803 is not set -# CONFIG_REGULATOR_RT5190A is not set -# CONFIG_REGULATOR_RT5739 is not set -# CONFIG_REGULATOR_RT5759 is not set -# CONFIG_REGULATOR_RT6160 is not set -# CONFIG_REGULATOR_RT6190 is not set -# CONFIG_REGULATOR_RT6245 is not set -# CONFIG_REGULATOR_RTQ2134 is not set -# CONFIG_REGULATOR_RTMV20 is not set -# CONFIG_REGULATOR_RTQ6752 is not set -# CONFIG_REGULATOR_SLG51000 is not set -# CONFIG_REGULATOR_SY8106A is not set -# CONFIG_REGULATOR_SY8824X is not set -# CONFIG_REGULATOR_SY8827N is not set -# CONFIG_REGULATOR_TPS51632 is not set -# CONFIG_REGULATOR_TPS62360 is not set -# CONFIG_REGULATOR_TPS6286X is not set -# CONFIG_REGULATOR_TPS65023 is not set -# CONFIG_REGULATOR_TPS6507X is not set -# CONFIG_REGULATOR_TPS65132 is not set -# CONFIG_REGULATOR_TPS6524X is not set -# CONFIG_REGULATOR_VCTRL is not set -# CONFIG_RC_CORE is not set - -# -# CEC support -# -# CONFIG_MEDIA_CEC_SUPPORT is not set -# end of CEC support - -CONFIG_MEDIA_SUPPORT=y -# CONFIG_MEDIA_SUPPORT_FILTER is not set -# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set - -# -# Media device types -# -CONFIG_MEDIA_CAMERA_SUPPORT=y -CONFIG_MEDIA_ANALOG_TV_SUPPORT=y -CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y -CONFIG_MEDIA_RADIO_SUPPORT=y -CONFIG_MEDIA_SDR_SUPPORT=y -CONFIG_MEDIA_PLATFORM_SUPPORT=y -CONFIG_MEDIA_TEST_SUPPORT=y -# end of Media device types - -# -# Media core support -# -CONFIG_VIDEO_DEV=y -CONFIG_MEDIA_CONTROLLER=y -# CONFIG_DVB_CORE is not set -# end of Media core support - -# -# Video4Linux options -# -CONFIG_VIDEO_V4L2_I2C=y -CONFIG_VIDEO_V4L2_SUBDEV_API=y -# CONFIG_VIDEO_ADV_DEBUG is not set -# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set -CONFIG_V4L2_FWNODE=y -CONFIG_V4L2_ASYNC=y -# end of Video4Linux options - -# -# Media controller options -# -# end of Media controller options - -# -# Media drivers -# - -# -# Media drivers -# -CONFIG_MEDIA_USB_SUPPORT=y - -# -# Webcam devices -# -# CONFIG_USB_GSPCA is not set -# CONFIG_USB_PWC is not set -# CONFIG_USB_S2255 is not set -# CONFIG_VIDEO_USBTV is not set -# CONFIG_USB_VIDEO_CLASS is not set - -# -# Analog TV USB devices -# -# CONFIG_VIDEO_GO7007 is not set -# CONFIG_VIDEO_HDPVR is not set -# CONFIG_VIDEO_STK1160_COMMON is not set - -# -# Analog/digital TV USB devices -# - -# -# Digital TV USB devices -# - -# -# Webcam, TV (analog/digital) USB devices -# -# CONFIG_VIDEO_EM28XX is not set - -# -# Software defined radio USB devices -# -# CONFIG_USB_AIRSPY is not set -# CONFIG_USB_HACKRF is not set -# CONFIG_USB_MSI2500 is not set -CONFIG_MEDIA_PCI_SUPPORT=y - -# -# Media capture support -# -# CONFIG_VIDEO_SOLO6X10 is not set -# CONFIG_VIDEO_TW5864 is not set -# CONFIG_VIDEO_TW68 is not set -# CONFIG_VIDEO_TW686X is not set - -# -# Media capture/analog TV support -# -# CONFIG_VIDEO_DT3155 is not set -# CONFIG_VIDEO_HEXIUM_GEMINI is not set -# CONFIG_VIDEO_HEXIUM_ORION is not set -# CONFIG_VIDEO_MXB is not set - -# -# Media capture/analog/hybrid TV support -# -# CONFIG_VIDEO_COBALT is not set -# CONFIG_VIDEO_CX25821 is not set -# CONFIG_VIDEO_SAA7134 is not set - -# -# Media digital TV PCI Adapters -# -# CONFIG_RADIO_ADAPTERS is not set -CONFIG_MEDIA_PLATFORM_DRIVERS=y -# CONFIG_V4L_PLATFORM_DRIVERS is not set -# CONFIG_SDR_PLATFORM_DRIVERS is not set -# CONFIG_DVB_PLATFORM_DRIVERS is not set -# CONFIG_V4L_MEM2MEM_DRIVERS is not set - -# -# Allegro DVT media platform drivers -# - -# -# Amlogic media platform drivers -# - -# -# Amphion drivers -# - -# -# Aspeed media platform drivers -# - -# -# Atmel media platform drivers -# - -# -# Cadence media platform drivers -# -CONFIG_VIDEO_CADENCE_CSI2RX=y -# CONFIG_VIDEO_CADENCE_CSI2TX is not set - -# -# Chips&Media media platform drivers -# - -# -# Intel media platform drivers -# - -# -# Marvell media platform drivers -# - -# -# Mediatek media platform drivers -# - -# -# Microchip Technology, Inc. media platform drivers -# - -# -# NVidia media platform drivers -# - -# -# NXP media platform drivers -# - -# -# Qualcomm media platform drivers -# - -# -# Renesas media platform drivers -# - -# -# Rockchip media platform drivers -# - -# -# Samsung media platform drivers -# - -# -# STMicroelectronics media platform drivers -# - -# -# StarFive media platform drivers -# - -# -# Sunxi media platform drivers -# - -# -# Texas Instruments drivers -# - -# -# Verisilicon media platform drivers -# - -# -# VIA media platform drivers -# - -# -# Xilinx media platform drivers -# -# CONFIG_V4L_TEST_DRIVERS is not set -# end of Media drivers - -# -# Media ancillary drivers -# -CONFIG_MEDIA_ATTACH=y - -# -# Camera sensor devices -# -# CONFIG_VIDEO_AR0521 is not set -# CONFIG_VIDEO_HI556 is not set -# CONFIG_VIDEO_HI846 is not set -# CONFIG_VIDEO_HI847 is not set -# CONFIG_VIDEO_IMX208 is not set -# CONFIG_VIDEO_IMX214 is not set -CONFIG_VIDEO_IMX219=y -# CONFIG_VIDEO_IMX258 is not set -# CONFIG_VIDEO_IMX274 is not set -# CONFIG_VIDEO_IMX290 is not set -# CONFIG_VIDEO_IMX296 is not set -# CONFIG_VIDEO_IMX319 is not set -# CONFIG_VIDEO_IMX334 is not set -# CONFIG_VIDEO_IMX335 is not set -# CONFIG_VIDEO_IMX355 is not set -# CONFIG_VIDEO_IMX412 is not set -# CONFIG_VIDEO_IMX415 is not set -# CONFIG_VIDEO_MT9M001 is not set -# CONFIG_VIDEO_MT9M111 is not set -# CONFIG_VIDEO_MT9P031 is not set -# CONFIG_VIDEO_MT9T112 is not set -# CONFIG_VIDEO_MT9V011 is not set -# CONFIG_VIDEO_MT9V032 is not set -# CONFIG_VIDEO_MT9V111 is not set -# CONFIG_VIDEO_OG01A1B is not set -# CONFIG_VIDEO_OV02A10 is not set -# CONFIG_VIDEO_OV08D10 is not set -# CONFIG_VIDEO_OV08X40 is not set -# CONFIG_VIDEO_OV13858 is not set -# CONFIG_VIDEO_OV13B10 is not set -# CONFIG_VIDEO_OV2640 is not set -# CONFIG_VIDEO_OV2659 is not set -# CONFIG_VIDEO_OV2680 is not set -# CONFIG_VIDEO_OV2685 is not set -# CONFIG_VIDEO_OV4689 is not set -# CONFIG_VIDEO_OV5640 is not set -# CONFIG_VIDEO_OV5645 is not set -# CONFIG_VIDEO_OV5647 is not set -# CONFIG_VIDEO_OV5648 is not set -# CONFIG_VIDEO_OV5670 is not set -# CONFIG_VIDEO_OV5675 is not set -# CONFIG_VIDEO_OV5693 is not set -# CONFIG_VIDEO_OV5695 is not set -# CONFIG_VIDEO_OV6650 is not set -# CONFIG_VIDEO_OV7251 is not set -# CONFIG_VIDEO_OV7640 is not set -# CONFIG_VIDEO_OV7670 is not set -# CONFIG_VIDEO_OV772X is not set -# CONFIG_VIDEO_OV7740 is not set -# CONFIG_VIDEO_OV8856 is not set -# CONFIG_VIDEO_OV8858 is not set -# CONFIG_VIDEO_OV8865 is not set -# CONFIG_VIDEO_OV9282 is not set -# CONFIG_VIDEO_OV9640 is not set -# CONFIG_VIDEO_OV9650 is not set -# CONFIG_VIDEO_RDACM20 is not set -# CONFIG_VIDEO_RDACM21 is not set -# CONFIG_VIDEO_RJ54N1 is not set -# CONFIG_VIDEO_S5C73M3 is not set -# CONFIG_VIDEO_S5K5BAF is not set -# CONFIG_VIDEO_S5K6A3 is not set -# CONFIG_VIDEO_ST_VGXY61 is not set -# CONFIG_VIDEO_CCS is not set -# CONFIG_VIDEO_ET8EK8 is not set -# end of Camera sensor devices - -# -# Lens drivers -# -# CONFIG_VIDEO_AD5820 is not set -# CONFIG_VIDEO_AK7375 is not set -# CONFIG_VIDEO_DW9714 is not set -# CONFIG_VIDEO_DW9768 is not set -# CONFIG_VIDEO_DW9807_VCM is not set -# end of Lens drivers - -# -# Flash devices -# -# CONFIG_VIDEO_ADP1653 is not set -# CONFIG_VIDEO_LM3560 is not set -# CONFIG_VIDEO_LM3646 is not set -# end of Flash devices - -# -# Audio decoders, processors and mixers -# -# CONFIG_VIDEO_CS3308 is not set -# CONFIG_VIDEO_CS5345 is not set -# CONFIG_VIDEO_CS53L32A is not set -# CONFIG_VIDEO_MSP3400 is not set -# CONFIG_VIDEO_SONY_BTF_MPX is not set -# CONFIG_VIDEO_TDA1997X is not set -# CONFIG_VIDEO_TDA7432 is not set -# CONFIG_VIDEO_TDA9840 is not set -# CONFIG_VIDEO_TEA6415C is not set -# CONFIG_VIDEO_TEA6420 is not set -# CONFIG_VIDEO_TLV320AIC23B is not set -# CONFIG_VIDEO_TVAUDIO is not set -# CONFIG_VIDEO_UDA1342 is not set -# CONFIG_VIDEO_VP27SMPX is not set -# CONFIG_VIDEO_WM8739 is not set -# CONFIG_VIDEO_WM8775 is not set -# end of Audio decoders, processors and mixers - -# -# RDS decoders -# -# CONFIG_VIDEO_SAA6588 is not set -# end of RDS decoders - -# -# Video decoders -# -# CONFIG_VIDEO_ADV7180 is not set -# CONFIG_VIDEO_ADV7183 is not set -# CONFIG_VIDEO_ADV748X is not set -# CONFIG_VIDEO_ADV7604 is not set -# CONFIG_VIDEO_ADV7842 is not set -# CONFIG_VIDEO_BT819 is not set -# CONFIG_VIDEO_BT856 is not set -# CONFIG_VIDEO_BT866 is not set -# CONFIG_VIDEO_ISL7998X is not set -# CONFIG_VIDEO_KS0127 is not set -# CONFIG_VIDEO_ML86V7667 is not set -# CONFIG_VIDEO_SAA7110 is not set -# CONFIG_VIDEO_SAA711X is not set -# CONFIG_VIDEO_TC358743 is not set -# CONFIG_VIDEO_TC358746 is not set -# CONFIG_VIDEO_TVP514X is not set -# CONFIG_VIDEO_TVP5150 is not set -# CONFIG_VIDEO_TVP7002 is not set -# CONFIG_VIDEO_TW2804 is not set -# CONFIG_VIDEO_TW9903 is not set -# CONFIG_VIDEO_TW9906 is not set -# CONFIG_VIDEO_TW9910 is not set -# CONFIG_VIDEO_VPX3220 is not set - -# -# Video and audio decoders -# -# CONFIG_VIDEO_SAA717X is not set -# CONFIG_VIDEO_CX25840 is not set -# end of Video decoders - -# -# Video encoders -# -# CONFIG_VIDEO_ADV7170 is not set -# CONFIG_VIDEO_ADV7175 is not set -# CONFIG_VIDEO_ADV7343 is not set -# CONFIG_VIDEO_ADV7393 is not set -# CONFIG_VIDEO_ADV7511 is not set -# CONFIG_VIDEO_AK881X is not set -# CONFIG_VIDEO_SAA7127 is not set -# CONFIG_VIDEO_SAA7185 is not set -# CONFIG_VIDEO_THS8200 is not set -# end of Video encoders - -# -# Video improvement chips -# -# CONFIG_VIDEO_UPD64031A is not set -# CONFIG_VIDEO_UPD64083 is not set -# end of Video improvement chips - -# -# Audio/Video compression chips -# -# CONFIG_VIDEO_SAA6752HS is not set -# end of Audio/Video compression chips - -# -# SDR tuner chips -# -# CONFIG_SDR_MAX2175 is not set -# end of SDR tuner chips - -# -# Miscellaneous helper chips -# -# CONFIG_VIDEO_I2C is not set -# CONFIG_VIDEO_M52790 is not set -# CONFIG_VIDEO_ST_MIPID02 is not set -# CONFIG_VIDEO_THS7303 is not set -# end of Miscellaneous helper chips - -# -# Media SPI Adapters -# -# CONFIG_VIDEO_GS1662 is not set -# end of Media SPI Adapters - -CONFIG_MEDIA_TUNER=y - -# -# Customize TV tuners -# -# CONFIG_MEDIA_TUNER_E4000 is not set -# CONFIG_MEDIA_TUNER_FC0011 is not set -# CONFIG_MEDIA_TUNER_FC0012 is not set -# CONFIG_MEDIA_TUNER_FC0013 is not set -# CONFIG_MEDIA_TUNER_FC2580 is not set -# CONFIG_MEDIA_TUNER_IT913X is not set -# CONFIG_MEDIA_TUNER_M88RS6000T is not set -# CONFIG_MEDIA_TUNER_MAX2165 is not set -# CONFIG_MEDIA_TUNER_MC44S803 is not set -# CONFIG_MEDIA_TUNER_MSI001 is not set -# CONFIG_MEDIA_TUNER_MT2060 is not set -# CONFIG_MEDIA_TUNER_MT2063 is not set -# CONFIG_MEDIA_TUNER_MT20XX is not set -# CONFIG_MEDIA_TUNER_MT2131 is not set -# CONFIG_MEDIA_TUNER_MT2266 is not set -# CONFIG_MEDIA_TUNER_MXL301RF is not set -# CONFIG_MEDIA_TUNER_MXL5005S is not set -# CONFIG_MEDIA_TUNER_MXL5007T is not set -# CONFIG_MEDIA_TUNER_QM1D1B0004 is not set -# CONFIG_MEDIA_TUNER_QM1D1C0042 is not set -# CONFIG_MEDIA_TUNER_QT1010 is not set -# CONFIG_MEDIA_TUNER_R820T is not set -# CONFIG_MEDIA_TUNER_SI2157 is not set -# CONFIG_MEDIA_TUNER_SIMPLE is not set -# CONFIG_MEDIA_TUNER_TDA18212 is not set -# CONFIG_MEDIA_TUNER_TDA18218 is not set -# CONFIG_MEDIA_TUNER_TDA18250 is not set -# CONFIG_MEDIA_TUNER_TDA18271 is not set -# CONFIG_MEDIA_TUNER_TDA827X is not set -# CONFIG_MEDIA_TUNER_TDA8290 is not set -# CONFIG_MEDIA_TUNER_TDA9887 is not set -# CONFIG_MEDIA_TUNER_TEA5761 is not set -# CONFIG_MEDIA_TUNER_TEA5767 is not set -# CONFIG_MEDIA_TUNER_TUA9001 is not set -# CONFIG_MEDIA_TUNER_XC2028 is not set -# CONFIG_MEDIA_TUNER_XC4000 is not set -# CONFIG_MEDIA_TUNER_XC5000 is not set -# end of Customize TV tuners - -# -# Customise DVB Frontends -# -# end of Customise DVB Frontends - -# -# Tools to develop new frontends -# -# end of Media ancillary drivers - -# -# Graphics support -# -CONFIG_APERTURE_HELPERS=y -CONFIG_VIDEO_CMDLINE=y -CONFIG_VIDEO_NOMODESET=y -CONFIG_DRM=y -# CONFIG_DRM_DEBUG_MM is not set -# CONFIG_DRM_DEBUG_MODESET_LOCK is not set -CONFIG_DRM_LOAD_EDID_FIRMWARE=y - -# -# ARM devices -# -# CONFIG_DRM_KOMEDA is not set -# end of ARM devices - -# CONFIG_DRM_RADEON is not set -# CONFIG_DRM_AMDGPU is not set -# CONFIG_DRM_NOUVEAU is not set -# CONFIG_DRM_VGEM is not set -# CONFIG_DRM_VKMS is not set -# CONFIG_DRM_UDL is not set -# CONFIG_DRM_AST is not set -# CONFIG_DRM_MGAG200 is not set -# CONFIG_DRM_RZG2L_MIPI_DSI is not set -# CONFIG_DRM_SUN4I is not set -# CONFIG_DRM_QXL is not set -# CONFIG_DRM_VIRTIO_GPU is not set -CONFIG_DRM_PANEL=y - -# -# Display Panels -# -# CONFIG_DRM_PANEL_ABT_Y030XX067A is not set -# CONFIG_DRM_PANEL_ARM_VERSATILE is not set -# CONFIG_DRM_PANEL_AUO_A030JTN01 is not set -# CONFIG_DRM_PANEL_LVDS is not set -# CONFIG_DRM_PANEL_SIMPLE is not set -# CONFIG_DRM_PANEL_EDP is not set -# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set -# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set -# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set -# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set -# CONFIG_DRM_PANEL_LG_LB035Q02 is not set -# CONFIG_DRM_PANEL_LG_LG4573 is not set -# CONFIG_DRM_PANEL_NEC_NL8048HL11 is not set -# CONFIG_DRM_PANEL_NEWVISION_NV3052C is not set -# CONFIG_DRM_PANEL_NOVATEK_NT39016 is not set -# CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO is not set -# CONFIG_DRM_PANEL_ORISETECH_OTA5601A is not set -# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set -# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set -# CONFIG_DRM_PANEL_SEIKO_43WVF1G is not set -# CONFIG_DRM_PANEL_SHARP_LS037V7DW01 is not set -# CONFIG_DRM_PANEL_SITRONIX_ST7789V is not set -# CONFIG_DRM_PANEL_SONY_ACX565AKM is not set -# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set -# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set -# CONFIG_DRM_PANEL_TPO_TPG110 is not set -# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set -# end of Display Panels - -CONFIG_DRM_BRIDGE=y -CONFIG_DRM_PANEL_BRIDGE=y - -# -# Display Interface Bridges -# -# CONFIG_DRM_CHIPONE_ICN6211 is not set -# CONFIG_DRM_CHRONTEL_CH7033 is not set -# CONFIG_DRM_DISPLAY_CONNECTOR is not set -# CONFIG_DRM_ITE_IT6505 is not set -# CONFIG_DRM_LONTIUM_LT8912B is not set -# CONFIG_DRM_LONTIUM_LT9211 is not set -# CONFIG_DRM_LONTIUM_LT9611 is not set -# CONFIG_DRM_LONTIUM_LT9611UXC is not set -# CONFIG_DRM_ITE_IT66121 is not set -# CONFIG_DRM_LVDS_CODEC is not set -# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set -# CONFIG_DRM_NWL_MIPI_DSI is not set -# CONFIG_DRM_NXP_PTN3460 is not set -# CONFIG_DRM_PARADE_PS8622 is not set -# CONFIG_DRM_PARADE_PS8640 is not set -# CONFIG_DRM_SAMSUNG_DSIM is not set -# CONFIG_DRM_SIL_SII8620 is not set -# CONFIG_DRM_SII902X is not set -# CONFIG_DRM_SII9234 is not set -# CONFIG_DRM_SIMPLE_BRIDGE is not set -# CONFIG_DRM_THINE_THC63LVD1024 is not set -# CONFIG_DRM_TOSHIBA_TC358762 is not set -# CONFIG_DRM_TOSHIBA_TC358764 is not set -# CONFIG_DRM_TOSHIBA_TC358767 is not set -# CONFIG_DRM_TOSHIBA_TC358768 is not set -# CONFIG_DRM_TOSHIBA_TC358775 is not set -# CONFIG_DRM_TI_DLPC3433 is not set -# CONFIG_DRM_TI_TFP410 is not set -# CONFIG_DRM_TI_SN65DSI83 is not set -# CONFIG_DRM_TI_SN65DSI86 is not set -# CONFIG_DRM_TI_TPD12S015 is not set -# CONFIG_DRM_ANALOGIX_ANX6345 is not set -# CONFIG_DRM_ANALOGIX_ANX78XX is not set -# CONFIG_DRM_ANALOGIX_ANX7625 is not set -# CONFIG_DRM_I2C_ADV7511 is not set -# CONFIG_DRM_CDNS_DSI is not set -# CONFIG_DRM_CDNS_MHDP8546 is not set -# end of Display Interface Bridges - -# CONFIG_DRM_ETNAVIV is not set -# CONFIG_DRM_LOGICVC is not set -# CONFIG_DRM_ARCPGU is not set -# CONFIG_DRM_BOCHS is not set -# CONFIG_DRM_CIRRUS_QEMU is not set -# CONFIG_DRM_GM12U320 is not set -# CONFIG_DRM_PANEL_MIPI_DBI is not set -# CONFIG_DRM_SIMPLEDRM is not set -# CONFIG_TINYDRM_HX8357D is not set -# CONFIG_TINYDRM_ILI9163 is not set -# CONFIG_TINYDRM_ILI9225 is not set -# CONFIG_TINYDRM_ILI9341 is not set -# CONFIG_TINYDRM_ILI9486 is not set -# CONFIG_TINYDRM_MI0283QT is not set -# CONFIG_TINYDRM_REPAPER is not set -# CONFIG_TINYDRM_ST7586 is not set -# CONFIG_TINYDRM_ST7735R is not set -# CONFIG_DRM_GUD is not set -# CONFIG_DRM_SSD130X is not set -# CONFIG_DRM_VERISILICON is not set -# CONFIG_STARFIVE_HDMI is not set -# CONFIG_DRM_LEGACY is not set -CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y - -# -# Frame buffer Devices -# -CONFIG_FB_NOTIFY=y -CONFIG_FB=y -# CONFIG_FIRMWARE_EDID is not set -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -# CONFIG_FB_FOREIGN_ENDIAN is not set -CONFIG_FB_MODE_HELPERS=y -CONFIG_FB_TILEBLITTING=y - -# -# Frame buffer hardware drivers -# -# CONFIG_FB_CIRRUS is not set -# CONFIG_FB_PM2 is not set -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_ASILIANT is not set -# CONFIG_FB_IMSTT is not set -# CONFIG_FB_UVESA is not set -CONFIG_FB_EFI=y -# CONFIG_FB_OPENCORES is not set -# CONFIG_FB_S1D13XXX is not set -# CONFIG_FB_NVIDIA is not set -# CONFIG_FB_RIVA is not set -# CONFIG_FB_I740 is not set -# CONFIG_FB_MATROX is not set -# CONFIG_FB_RADEON is not set -# CONFIG_FB_ATY128 is not set -# CONFIG_FB_ATY is not set -# CONFIG_FB_S3 is not set -# CONFIG_FB_SAVAGE is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_NEOMAGIC is not set -# CONFIG_FB_KYRO is not set -# CONFIG_FB_3DFX is not set -# CONFIG_FB_VOODOO1 is not set -# CONFIG_FB_VT8623 is not set -# CONFIG_FB_TRIDENT is not set -# CONFIG_FB_ARK is not set -# CONFIG_FB_PM3 is not set -# CONFIG_FB_CARMINE is not set -# CONFIG_FB_SH_MOBILE_LCDC is not set -# CONFIG_FB_SMSCUFX is not set -# CONFIG_FB_UDL is not set -# CONFIG_FB_IBM_GXT4500 is not set -# CONFIG_FB_GOLDFISH is not set -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FB_METRONOME is not set -# CONFIG_FB_MB862XX is not set -# CONFIG_FB_SIMPLE is not set -# CONFIG_FB_SSD1307 is not set -# CONFIG_FB_SM712 is not set -# end of Frame buffer Devices - -# -# Backlight & LCD device support -# -# CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_BACKLIGHT_CLASS_DEVICE=y -# CONFIG_BACKLIGHT_KTD253 is not set -# CONFIG_BACKLIGHT_KTZ8866 is not set -# CONFIG_BACKLIGHT_PWM is not set -# CONFIG_BACKLIGHT_QCOM_WLED is not set -# CONFIG_BACKLIGHT_ADP8860 is not set -# CONFIG_BACKLIGHT_ADP8870 is not set -# CONFIG_BACKLIGHT_LM3630A is not set -# CONFIG_BACKLIGHT_LM3639 is not set -# CONFIG_BACKLIGHT_LP855X is not set -# CONFIG_BACKLIGHT_GPIO is not set -# CONFIG_BACKLIGHT_LV5207LP is not set -# CONFIG_BACKLIGHT_BD6107 is not set -# CONFIG_BACKLIGHT_ARCXCNN is not set -# CONFIG_BACKLIGHT_LED is not set -# end of Backlight & LCD device support - -CONFIG_HDMI=y - -# -# Console display driver support -# -CONFIG_VGA_CONSOLE=y -CONFIG_DUMMY_CONSOLE=y -CONFIG_DUMMY_CONSOLE_COLUMNS=80 -CONFIG_DUMMY_CONSOLE_ROWS=25 -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION is not set -CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y -CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y -CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y -# end of Console display driver support - -# CONFIG_LOGO is not set -# end of Graphics support - -# CONFIG_DRM_ACCEL is not set -CONFIG_SOUND=y -CONFIG_SOUND_OSS_CORE=y -CONFIG_SOUND_OSS_CORE_PRECLAIM=y -CONFIG_SND=y -CONFIG_SND_TIMER=y -CONFIG_SND_PCM=y -CONFIG_SND_DMAENGINE_PCM=y -CONFIG_SND_JACK=y -CONFIG_SND_JACK_INPUT_DEV=y -CONFIG_SND_OSSEMUL=y -# CONFIG_SND_MIXER_OSS is not set -# CONFIG_SND_PCM_OSS is not set -CONFIG_SND_PCM_TIMER=y -# CONFIG_SND_HRTIMER is not set -CONFIG_SND_DYNAMIC_MINORS=y -CONFIG_SND_MAX_CARDS=32 -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_PROC_FS=y -CONFIG_SND_VERBOSE_PROCFS=y -# CONFIG_SND_VERBOSE_PRINTK is not set -CONFIG_SND_CTL_FAST_LOOKUP=y -# CONFIG_SND_DEBUG is not set -# CONFIG_SND_CTL_INPUT_VALIDATION is not set -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_DRIVERS=y -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_ALOOP is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_SERIAL_GENERIC is not set -# CONFIG_SND_MPU401 is not set -CONFIG_SND_PCI=y -# CONFIG_SND_AD1889 is not set -# CONFIG_SND_ATIIXP is not set -# CONFIG_SND_ATIIXP_MODEM is not set -# CONFIG_SND_AU8810 is not set -# CONFIG_SND_AU8820 is not set -# CONFIG_SND_AU8830 is not set -# CONFIG_SND_AW2 is not set -# CONFIG_SND_BT87X is not set -# CONFIG_SND_CA0106 is not set -# CONFIG_SND_CMIPCI is not set -# CONFIG_SND_OXYGEN is not set -# CONFIG_SND_CS4281 is not set -# CONFIG_SND_CS46XX is not set -# CONFIG_SND_CTXFI is not set -# CONFIG_SND_DARLA20 is not set -# CONFIG_SND_GINA20 is not set -# CONFIG_SND_LAYLA20 is not set -# CONFIG_SND_DARLA24 is not set -# CONFIG_SND_GINA24 is not set -# CONFIG_SND_LAYLA24 is not set -# CONFIG_SND_MONA is not set -# CONFIG_SND_MIA is not set -# CONFIG_SND_ECHO3G is not set -# CONFIG_SND_INDIGO is not set -# CONFIG_SND_INDIGOIO is not set -# CONFIG_SND_INDIGODJ is not set -# CONFIG_SND_INDIGOIOX is not set -# CONFIG_SND_INDIGODJX is not set -# CONFIG_SND_ENS1370 is not set -# CONFIG_SND_ENS1371 is not set -# CONFIG_SND_FM801 is not set -# CONFIG_SND_HDSP is not set -# CONFIG_SND_HDSPM is not set -# CONFIG_SND_ICE1724 is not set -# CONFIG_SND_INTEL8X0 is not set -# CONFIG_SND_INTEL8X0M is not set -# CONFIG_SND_KORG1212 is not set -# CONFIG_SND_LOLA is not set -# CONFIG_SND_LX6464ES is not set -# CONFIG_SND_MIXART is not set -# CONFIG_SND_NM256 is not set -# CONFIG_SND_PCXHR is not set -# CONFIG_SND_RIPTIDE is not set -# CONFIG_SND_RME32 is not set -# CONFIG_SND_RME96 is not set -# CONFIG_SND_RME9652 is not set -# CONFIG_SND_SE6X is not set -# CONFIG_SND_VIA82XX is not set -# CONFIG_SND_VIA82XX_MODEM is not set -# CONFIG_SND_VIRTUOSO is not set -# CONFIG_SND_VX222 is not set -# CONFIG_SND_YMFPCI is not set - -# -# HD-Audio -# -# CONFIG_SND_HDA_INTEL is not set -# end of HD-Audio - -CONFIG_SND_HDA_PREALLOC_SIZE=64 -CONFIG_SND_SPI=y -CONFIG_SND_USB=y -# CONFIG_SND_USB_AUDIO is not set -# CONFIG_SND_USB_UA101 is not set -# CONFIG_SND_USB_CAIAQ is not set -# CONFIG_SND_USB_6FIRE is not set -# CONFIG_SND_USB_HIFACE is not set -# CONFIG_SND_BCD2000 is not set -# CONFIG_SND_USB_POD is not set -# CONFIG_SND_USB_PODHD is not set -# CONFIG_SND_USB_TONEPORT is not set -# CONFIG_SND_USB_VARIAX is not set -CONFIG_SND_SOC=y -CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y -# CONFIG_SND_SOC_ADI is not set -# CONFIG_SND_SOC_AMD_ACP is not set -# CONFIG_SND_AMD_ACP_CONFIG is not set -# CONFIG_SND_ATMEL_SOC is not set -# CONFIG_SND_BCM63XX_I2S_WHISTLER is not set -# CONFIG_SND_DESIGNWARE_I2S is not set - -# -# SoC Audio for Freescale CPUs -# - -# -# Common SoC Audio options for Freescale CPUs: -# -# CONFIG_SND_SOC_FSL_ASRC is not set -# CONFIG_SND_SOC_FSL_SAI is not set -# CONFIG_SND_SOC_FSL_AUDMIX is not set -# CONFIG_SND_SOC_FSL_SSI is not set -# CONFIG_SND_SOC_FSL_SPDIF is not set -# CONFIG_SND_SOC_FSL_ESAI is not set -# CONFIG_SND_SOC_FSL_MICFIL is not set -# CONFIG_SND_SOC_FSL_XCVR is not set -# CONFIG_SND_SOC_FSL_RPMSG is not set -# CONFIG_SND_SOC_IMX_AUDMUX is not set -# end of SoC Audio for Freescale CPUs - -# CONFIG_SND_I2S_HI6210_I2S is not set -# CONFIG_SND_SOC_IMG is not set -# CONFIG_SND_SOC_MTK_BTCVSD is not set - -# -# SoC Audio support for Renesas SoCs -# -# CONFIG_SND_SOC_SH4_FSI is not set -# CONFIG_SND_SOC_RCAR is not set -# CONFIG_SND_SOC_RZ is not set -# end of SoC Audio support for Renesas SoCs - -# CONFIG_SND_SOC_SOF_TOPLEVEL is not set -CONFIG_SND_SOC_STARFIVE=y -# CONFIG_SND_SOC_JH7110_PWMDAC is not set -CONFIG_SND_SOC_JH7110_TDM=y - -# -# STMicroelectronics STM32 SOC audio support -# -# end of STMicroelectronics STM32 SOC audio support - -# -# Allwinner SoC Audio support -# -# CONFIG_SND_SUN4I_CODEC is not set -# CONFIG_SND_SUN4I_I2S is not set -# CONFIG_SND_SUN4I_SPDIF is not set -# CONFIG_SND_SUN50I_DMIC is not set -# end of Allwinner SoC Audio support - -# CONFIG_SND_SOC_XILINX_I2S is not set -# CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER is not set -# CONFIG_SND_SOC_XILINX_SPDIF is not set -# CONFIG_SND_SOC_XTFPGA_I2S is not set -CONFIG_SND_SOC_I2C_AND_SPI=y - -# -# CODEC drivers -# -# CONFIG_SND_SOC_AC97_CODEC is not set -# CONFIG_SND_SOC_ADAU1372_I2C is not set -# CONFIG_SND_SOC_ADAU1372_SPI is not set -# CONFIG_SND_SOC_ADAU1701 is not set -# CONFIG_SND_SOC_ADAU1761_I2C is not set -# CONFIG_SND_SOC_ADAU1761_SPI is not set -# CONFIG_SND_SOC_ADAU7002 is not set -# CONFIG_SND_SOC_ADAU7118_HW is not set -# CONFIG_SND_SOC_ADAU7118_I2C is not set -# CONFIG_SND_SOC_AK4104 is not set -# CONFIG_SND_SOC_AK4118 is not set -# CONFIG_SND_SOC_AK4375 is not set -# CONFIG_SND_SOC_AK4458 is not set -# CONFIG_SND_SOC_AK4554 is not set -# CONFIG_SND_SOC_AK4613 is not set -# CONFIG_SND_SOC_AK4642 is not set -# CONFIG_SND_SOC_AK5386 is not set -# CONFIG_SND_SOC_AK5558 is not set -# CONFIG_SND_SOC_ALC5623 is not set -# CONFIG_SND_SOC_AW8738 is not set -# CONFIG_SND_SOC_AW88395 is not set -# CONFIG_SND_SOC_BD28623 is not set -# CONFIG_SND_SOC_BT_SCO is not set -# CONFIG_SND_SOC_CS35L32 is not set -# CONFIG_SND_SOC_CS35L33 is not set -# CONFIG_SND_SOC_CS35L34 is not set -# CONFIG_SND_SOC_CS35L35 is not set -# CONFIG_SND_SOC_CS35L36 is not set -# CONFIG_SND_SOC_CS35L41_SPI is not set -# CONFIG_SND_SOC_CS35L41_I2C is not set -# CONFIG_SND_SOC_CS35L45_SPI is not set -# CONFIG_SND_SOC_CS35L45_I2C is not set -# CONFIG_SND_SOC_CS35L56_I2C is not set -# CONFIG_SND_SOC_CS35L56_SPI is not set -# CONFIG_SND_SOC_CS42L42 is not set -# CONFIG_SND_SOC_CS42L51_I2C is not set -# CONFIG_SND_SOC_CS42L52 is not set -# CONFIG_SND_SOC_CS42L56 is not set -# CONFIG_SND_SOC_CS42L73 is not set -# CONFIG_SND_SOC_CS42L83 is not set -# CONFIG_SND_SOC_CS4234 is not set -# CONFIG_SND_SOC_CS4265 is not set -# CONFIG_SND_SOC_CS4270 is not set -# CONFIG_SND_SOC_CS4271_I2C is not set -# CONFIG_SND_SOC_CS4271_SPI is not set -# CONFIG_SND_SOC_CS42XX8_I2C is not set -# CONFIG_SND_SOC_CS43130 is not set -# CONFIG_SND_SOC_CS4341 is not set -# CONFIG_SND_SOC_CS4349 is not set -# CONFIG_SND_SOC_CS53L30 is not set -# CONFIG_SND_SOC_CX2072X is not set -# CONFIG_SND_SOC_JH7110_PWMDAC_DIT is not set -# CONFIG_SND_SOC_DA7213 is not set -# CONFIG_SND_SOC_DMIC is not set -# CONFIG_SND_SOC_ES7134 is not set -# CONFIG_SND_SOC_ES7241 is not set -# CONFIG_SND_SOC_ES8316 is not set -# CONFIG_SND_SOC_ES8326 is not set -# CONFIG_SND_SOC_ES8328_I2C is not set -# CONFIG_SND_SOC_ES8328_SPI is not set -# CONFIG_SND_SOC_GTM601 is not set -# CONFIG_SND_SOC_HDA is not set -# CONFIG_SND_SOC_ICS43432 is not set -# CONFIG_SND_SOC_IDT821034 is not set -# CONFIG_SND_SOC_INNO_RK3036 is not set -# CONFIG_SND_SOC_MAX98088 is not set -# CONFIG_SND_SOC_MAX98090 is not set -# CONFIG_SND_SOC_MAX98357A is not set -# CONFIG_SND_SOC_MAX98504 is not set -# CONFIG_SND_SOC_MAX9867 is not set -# CONFIG_SND_SOC_MAX98927 is not set -# CONFIG_SND_SOC_MAX98520 is not set -# CONFIG_SND_SOC_MAX98373_I2C is not set -# CONFIG_SND_SOC_MAX98390 is not set -# CONFIG_SND_SOC_MAX98396 is not set -# CONFIG_SND_SOC_MAX9860 is not set -# CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set -# CONFIG_SND_SOC_PCM1681 is not set -# CONFIG_SND_SOC_PCM1789_I2C is not set -# CONFIG_SND_SOC_PCM179X_I2C is not set -# CONFIG_SND_SOC_PCM179X_SPI is not set -# CONFIG_SND_SOC_PCM186X_I2C is not set -# CONFIG_SND_SOC_PCM186X_SPI is not set -# CONFIG_SND_SOC_PCM3060_I2C is not set -# CONFIG_SND_SOC_PCM3060_SPI is not set -# CONFIG_SND_SOC_PCM3168A_I2C is not set -# CONFIG_SND_SOC_PCM3168A_SPI is not set -# CONFIG_SND_SOC_PCM5102A is not set -# CONFIG_SND_SOC_PCM512x_I2C is not set -# CONFIG_SND_SOC_PCM512x_SPI is not set -# CONFIG_SND_SOC_PEB2466 is not set -# CONFIG_SND_SOC_RK3328 is not set -# CONFIG_SND_SOC_RT5616 is not set -# CONFIG_SND_SOC_RT5631 is not set -# CONFIG_SND_SOC_RT5640 is not set -# CONFIG_SND_SOC_RT5659 is not set -# CONFIG_SND_SOC_RT9120 is not set -# CONFIG_SND_SOC_SGTL5000 is not set -# CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not set -# CONFIG_SND_SOC_SIMPLE_MUX is not set -# CONFIG_SND_SOC_SMA1303 is not set -# CONFIG_SND_SOC_SPDIF is not set -# CONFIG_SND_SOC_SRC4XXX_I2C is not set -# CONFIG_SND_SOC_SSM2305 is not set -# CONFIG_SND_SOC_SSM2518 is not set -# CONFIG_SND_SOC_SSM2602_SPI is not set -# CONFIG_SND_SOC_SSM2602_I2C is not set -# CONFIG_SND_SOC_SSM4567 is not set -# CONFIG_SND_SOC_STA32X is not set -# CONFIG_SND_SOC_STA350 is not set -# CONFIG_SND_SOC_STI_SAS is not set -# CONFIG_SND_SOC_TAS2552 is not set -# CONFIG_SND_SOC_TAS2562 is not set -# CONFIG_SND_SOC_TAS2764 is not set -# CONFIG_SND_SOC_TAS2770 is not set -# CONFIG_SND_SOC_TAS2780 is not set -# CONFIG_SND_SOC_TAS5086 is not set -# CONFIG_SND_SOC_TAS571X is not set -# CONFIG_SND_SOC_TAS5720 is not set -# CONFIG_SND_SOC_TAS5805M is not set -# CONFIG_SND_SOC_TAS6424 is not set -# CONFIG_SND_SOC_TDA7419 is not set -# CONFIG_SND_SOC_TFA9879 is not set -# CONFIG_SND_SOC_TFA989X is not set -# CONFIG_SND_SOC_TLV320ADC3XXX is not set -# CONFIG_SND_SOC_TLV320AIC23_I2C is not set -# CONFIG_SND_SOC_TLV320AIC23_SPI is not set -# CONFIG_SND_SOC_TLV320AIC31XX is not set -# CONFIG_SND_SOC_TLV320AIC32X4_I2C is not set -# CONFIG_SND_SOC_TLV320AIC32X4_SPI is not set -# CONFIG_SND_SOC_TLV320AIC3X_I2C is not set -# CONFIG_SND_SOC_TLV320AIC3X_SPI is not set -# CONFIG_SND_SOC_TLV320ADCX140 is not set -# CONFIG_SND_SOC_TS3A227E is not set -# CONFIG_SND_SOC_TSCS42XX is not set -# CONFIG_SND_SOC_TSCS454 is not set -# CONFIG_SND_SOC_UDA1334 is not set -# CONFIG_SND_SOC_WM8510 is not set -# CONFIG_SND_SOC_WM8523 is not set -# CONFIG_SND_SOC_WM8524 is not set -# CONFIG_SND_SOC_WM8580 is not set -# CONFIG_SND_SOC_WM8711 is not set -# CONFIG_SND_SOC_WM8728 is not set -# CONFIG_SND_SOC_WM8731_I2C is not set -# CONFIG_SND_SOC_WM8731_SPI is not set -# CONFIG_SND_SOC_WM8737 is not set -# CONFIG_SND_SOC_WM8741 is not set -# CONFIG_SND_SOC_WM8750 is not set -# CONFIG_SND_SOC_WM8753 is not set -# CONFIG_SND_SOC_WM8770 is not set -# CONFIG_SND_SOC_WM8776 is not set -# CONFIG_SND_SOC_WM8782 is not set -# CONFIG_SND_SOC_WM8804_I2C is not set -# CONFIG_SND_SOC_WM8804_SPI is not set -# CONFIG_SND_SOC_WM8903 is not set -# CONFIG_SND_SOC_WM8904 is not set -# CONFIG_SND_SOC_WM8940 is not set -# CONFIG_SND_SOC_WM8960 is not set -# CONFIG_SND_SOC_WM8961 is not set -# CONFIG_SND_SOC_WM8962 is not set -# CONFIG_SND_SOC_WM8974 is not set -# CONFIG_SND_SOC_WM8978 is not set -# CONFIG_SND_SOC_WM8985 is not set -# CONFIG_SND_SOC_ZL38060 is not set -# CONFIG_SND_SOC_MAX9759 is not set -# CONFIG_SND_SOC_MT6351 is not set -# CONFIG_SND_SOC_MT6358 is not set -# CONFIG_SND_SOC_MT6660 is not set -# CONFIG_SND_SOC_NAU8315 is not set -# CONFIG_SND_SOC_NAU8540 is not set -# CONFIG_SND_SOC_NAU8810 is not set -# CONFIG_SND_SOC_NAU8821 is not set -# CONFIG_SND_SOC_NAU8822 is not set -# CONFIG_SND_SOC_NAU8824 is not set -# CONFIG_SND_SOC_TPA6130A2 is not set -# CONFIG_SND_SOC_LPASS_WSA_MACRO is not set -# CONFIG_SND_SOC_LPASS_VA_MACRO is not set -# CONFIG_SND_SOC_LPASS_RX_MACRO is not set -# CONFIG_SND_SOC_LPASS_TX_MACRO is not set -# end of CODEC drivers - -# CONFIG_SND_SIMPLE_CARD is not set -# CONFIG_SND_AUDIO_GRAPH_CARD is not set -# CONFIG_SND_AUDIO_GRAPH_CARD2 is not set -# CONFIG_SND_TEST_COMPONENT is not set -# CONFIG_SND_VIRTIO is not set -CONFIG_HID_SUPPORT=y -CONFIG_HID=y -CONFIG_HID_BATTERY_STRENGTH=y -CONFIG_HIDRAW=y -# CONFIG_UHID is not set -CONFIG_HID_GENERIC=y - -# -# Special HID drivers -# -# CONFIG_HID_A4TECH is not set -# CONFIG_HID_ACCUTOUCH is not set -# CONFIG_HID_ACRUX is not set -# CONFIG_HID_APPLE is not set -# CONFIG_HID_APPLEIR is not set -# CONFIG_HID_ASUS is not set -# CONFIG_HID_AUREAL is not set -# CONFIG_HID_BELKIN is not set -# CONFIG_HID_BETOP_FF is not set -# CONFIG_HID_BIGBEN_FF is not set -# CONFIG_HID_CHERRY is not set -# CONFIG_HID_CHICONY is not set -# CONFIG_HID_CORSAIR is not set -# CONFIG_HID_COUGAR is not set -# CONFIG_HID_MACALLY is not set -# CONFIG_HID_PRODIKEYS is not set -# CONFIG_HID_CMEDIA is not set -# CONFIG_HID_CP2112 is not set -# CONFIG_HID_CREATIVE_SB0540 is not set -# CONFIG_HID_CYPRESS is not set -# CONFIG_HID_DRAGONRISE is not set -# CONFIG_HID_EMS_FF is not set -# CONFIG_HID_ELAN is not set -# CONFIG_HID_ELECOM is not set -# CONFIG_HID_ELO is not set -# CONFIG_HID_EVISION is not set -# CONFIG_HID_EZKEY is not set -# CONFIG_HID_FT260 is not set -# CONFIG_HID_GEMBIRD is not set -# CONFIG_HID_GFRM is not set -# CONFIG_HID_GLORIOUS is not set -# CONFIG_HID_HOLTEK is not set -# CONFIG_HID_VIVALDI is not set -# CONFIG_HID_GT683R is not set -# CONFIG_HID_KEYTOUCH is not set -# CONFIG_HID_KYE is not set -# CONFIG_HID_UCLOGIC is not set -# CONFIG_HID_WALTOP is not set -# CONFIG_HID_VIEWSONIC is not set -# CONFIG_HID_VRC2 is not set -# CONFIG_HID_XIAOMI is not set -# CONFIG_HID_GYRATION is not set -# CONFIG_HID_ICADE is not set -# CONFIG_HID_ITE is not set -# CONFIG_HID_JABRA is not set -# CONFIG_HID_TWINHAN is not set -# CONFIG_HID_KENSINGTON is not set -# CONFIG_HID_LCPOWER is not set -# CONFIG_HID_LED is not set -# CONFIG_HID_LENOVO is not set -# CONFIG_HID_LETSKETCH is not set -# CONFIG_HID_LOGITECH is not set -# CONFIG_HID_MAGICMOUSE is not set -# CONFIG_HID_MALTRON is not set -# CONFIG_HID_MAYFLASH is not set -# CONFIG_HID_MEGAWORLD_FF is not set -# CONFIG_HID_REDRAGON is not set -# CONFIG_HID_MICROSOFT is not set -# CONFIG_HID_MONTEREY is not set -# CONFIG_HID_MULTITOUCH is not set -# CONFIG_HID_NINTENDO is not set -# CONFIG_HID_NTI is not set -# CONFIG_HID_NTRIG is not set -# CONFIG_HID_ORTEK is not set -# CONFIG_HID_PANTHERLORD is not set -# CONFIG_HID_PENMOUNT is not set -# CONFIG_HID_PETALYNX is not set -# CONFIG_HID_PICOLCD is not set -# CONFIG_HID_PLANTRONICS is not set -# CONFIG_HID_PXRC is not set -# CONFIG_HID_RAZER is not set -# CONFIG_HID_PRIMAX is not set -# CONFIG_HID_RETRODE is not set -# CONFIG_HID_ROCCAT is not set -# CONFIG_HID_SAITEK is not set -# CONFIG_HID_SAMSUNG is not set -# CONFIG_HID_SEMITEK is not set -# CONFIG_HID_SIGMAMICRO is not set -# CONFIG_HID_SONY is not set -# CONFIG_HID_SPEEDLINK is not set -# CONFIG_HID_STEAM is not set -# CONFIG_HID_STEELSERIES is not set -# CONFIG_HID_SUNPLUS is not set -# CONFIG_HID_RMI is not set -# CONFIG_HID_GREENASIA is not set -# CONFIG_HID_SMARTJOYPLUS is not set -# CONFIG_HID_TIVO is not set -# CONFIG_HID_TOPSEED is not set -# CONFIG_HID_TOPRE is not set -# CONFIG_HID_THINGM is not set -# CONFIG_HID_THRUSTMASTER is not set -# CONFIG_HID_UDRAW_PS3 is not set -# CONFIG_HID_U2FZERO is not set -# CONFIG_HID_WACOM is not set -# CONFIG_HID_WIIMOTE is not set -# CONFIG_HID_XINMO is not set -# CONFIG_HID_ZEROPLUS is not set -# CONFIG_HID_ZYDACRON is not set -# CONFIG_HID_SENSOR_HUB is not set -# CONFIG_HID_ALPS is not set -# CONFIG_HID_MCP2221 is not set -# end of Special HID drivers - -# -# HID-BPF support -# -# end of HID-BPF support - -# -# USB HID support -# -CONFIG_USB_HID=y -# CONFIG_HID_PID is not set -CONFIG_USB_HIDDEV=y -# end of USB HID support - -# CONFIG_I2C_HID is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -CONFIG_USB_SUPPORT=y -CONFIG_USB_COMMON=y -# CONFIG_USB_LED_TRIG is not set -# CONFIG_USB_ULPI_BUS is not set -# CONFIG_USB_CONN_GPIO is not set -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB=y -CONFIG_USB_PCI=y -# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEFAULT_PERSIST=y -# CONFIG_USB_FEW_INIT_RETRIES is not set -# CONFIG_USB_DYNAMIC_MINORS is not set -# CONFIG_USB_OTG is not set -# CONFIG_USB_OTG_PRODUCTLIST is not set -# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set -# CONFIG_USB_LEDS_TRIGGER_USBPORT is not set -CONFIG_USB_AUTOSUSPEND_DELAY=2 -# CONFIG_USB_MON is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_C67X00_HCD is not set -CONFIG_USB_XHCI_HCD=y -# CONFIG_USB_XHCI_DBGCAP is not set -CONFIG_USB_XHCI_PCI=y -CONFIG_USB_XHCI_PCI_RENESAS=y -CONFIG_USB_XHCI_PLATFORM=y -CONFIG_USB_XHCI_RCAR=y -CONFIG_USB_EHCI_HCD=y -CONFIG_USB_EHCI_ROOT_HUB_TT=y -CONFIG_USB_EHCI_TT_NEWSCHED=y -CONFIG_USB_EHCI_PCI=y -# CONFIG_USB_EHCI_FSL is not set -CONFIG_USB_EHCI_HCD_PLATFORM=y -# CONFIG_USB_OXU210HP_HCD is not set -# CONFIG_USB_ISP116X_HCD is not set -# CONFIG_USB_MAX3421_HCD is not set -CONFIG_USB_OHCI_HCD=y -CONFIG_USB_OHCI_HCD_PCI=y -CONFIG_USB_OHCI_HCD_PLATFORM=y -# CONFIG_USB_UHCI_HCD is not set -# CONFIG_USB_SL811_HCD is not set -# CONFIG_USB_R8A66597_HCD is not set -# CONFIG_USB_HCD_TEST_MODE is not set -# CONFIG_USB_RENESAS_USBHS is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set -# CONFIG_USB_WDM is not set -# CONFIG_USB_TMC is not set - -# -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may -# - -# -# also be needed; see USB_STORAGE Help for more info -# -CONFIG_USB_STORAGE=y -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_REALTEK is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_USBAT is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_STORAGE_SDDR55 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_STORAGE_ALAUDA is not set -# CONFIG_USB_STORAGE_ONETOUCH is not set -# CONFIG_USB_STORAGE_KARMA is not set -# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set -# CONFIG_USB_STORAGE_ENE_UB6250 is not set -CONFIG_USB_UAS=y - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USBIP_CORE is not set - -# -# USB dual-mode controller drivers -# -CONFIG_USB_CDNS_SUPPORT=y -CONFIG_USB_CDNS3=y -# CONFIG_USB_CDNS3_GADGET is not set -# CONFIG_USB_CDNS3_HOST is not set -CONFIG_USB_CDNS3_STARFIVE=y -# CONFIG_USB_MUSB_HDRC is not set -# CONFIG_USB_DWC3 is not set -# CONFIG_USB_DWC2 is not set -# CONFIG_USB_CHIPIDEA is not set -# CONFIG_USB_ISP1760 is not set - -# -# USB port drivers -# -# CONFIG_USB_SERIAL is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -# CONFIG_USB_ADUTUX is not set -# CONFIG_USB_SEVSEG is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -# CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_APPLE_MFI_FASTCHARGE is not set -# CONFIG_USB_SISUSBVGA is not set -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_IOWARRIOR is not set -# CONFIG_USB_TEST is not set -# CONFIG_USB_EHSET_TEST_FIXTURE is not set -# CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_YUREX is not set -# CONFIG_USB_EZUSB_FX2 is not set -# CONFIG_USB_HUB_USB251XB is not set -# CONFIG_USB_HSIC_USB3503 is not set -# CONFIG_USB_HSIC_USB4604 is not set -# CONFIG_USB_LINK_LAYER_TEST is not set -# CONFIG_USB_CHAOSKEY is not set -# CONFIG_USB_ONBOARD_HUB is not set - -# -# USB Physical Layer drivers -# -# CONFIG_NOP_USB_XCEIV is not set -# CONFIG_USB_GPIO_VBUS is not set -# CONFIG_USB_ISP1301 is not set -# end of USB Physical Layer drivers - -CONFIG_USB_GADGET=y -# CONFIG_USB_GADGET_DEBUG is not set -# CONFIG_USB_GADGET_DEBUG_FILES is not set -# CONFIG_USB_GADGET_DEBUG_FS is not set -CONFIG_USB_GADGET_VBUS_DRAW=2 -CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 - -# -# USB Peripheral Controller -# -# CONFIG_USB_GR_UDC is not set -# CONFIG_USB_R8A66597 is not set -# CONFIG_USB_RENESAS_USB3 is not set -# CONFIG_USB_RENESAS_USBF is not set -# CONFIG_USB_PXA27X is not set -# CONFIG_USB_MV_UDC is not set -# CONFIG_USB_MV_U3D is not set -# CONFIG_USB_SNP_UDC_PLAT is not set -# CONFIG_USB_M66592 is not set -# CONFIG_USB_BDC_UDC is not set -# CONFIG_USB_AMD5536UDC is not set -# CONFIG_USB_NET2272 is not set -# CONFIG_USB_NET2280 is not set -# CONFIG_USB_GOKU is not set -# CONFIG_USB_EG20T is not set -# CONFIG_USB_GADGET_XILINX is not set -# CONFIG_USB_MAX3420_UDC is not set -# CONFIG_USB_DUMMY_HCD is not set -# end of USB Peripheral Controller - -# CONFIG_USB_CONFIGFS is not set - -# -# USB Gadget precomposed configurations -# -# CONFIG_USB_ZERO is not set -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_ETH is not set -# CONFIG_USB_G_NCM is not set -# CONFIG_USB_GADGETFS is not set -# CONFIG_USB_FUNCTIONFS is not set -# CONFIG_USB_MASS_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set -# CONFIG_USB_MIDI_GADGET is not set -# CONFIG_USB_G_PRINTER is not set -# CONFIG_USB_CDC_COMPOSITE is not set -# CONFIG_USB_G_ACM_MS is not set -# CONFIG_USB_G_MULTI is not set -# CONFIG_USB_G_HID is not set -# CONFIG_USB_G_DBGP is not set -# CONFIG_USB_G_WEBCAM is not set -# CONFIG_USB_RAW_GADGET is not set -# end of USB Gadget precomposed configurations - -# CONFIG_TYPEC is not set -CONFIG_USB_ROLE_SWITCH=y -CONFIG_MMC=y -CONFIG_PWRSEQ_EMMC=y -CONFIG_PWRSEQ_SIMPLE=y -CONFIG_MMC_BLOCK=y -CONFIG_MMC_BLOCK_MINORS=32 -# CONFIG_SDIO_UART is not set -# CONFIG_MMC_TEST is not set - -# -# MMC/SD/SDIO Host Controller Drivers -# -# CONFIG_MMC_DEBUG is not set -# CONFIG_MMC_ARMMMCI is not set -CONFIG_MMC_SDHCI=y -CONFIG_MMC_SDHCI_IO_ACCESSORS=y -# CONFIG_MMC_SDHCI_PCI is not set -CONFIG_MMC_SDHCI_PLTFM=y -# CONFIG_MMC_SDHCI_OF_ARASAN is not set -# CONFIG_MMC_SDHCI_OF_AT91 is not set -# CONFIG_MMC_SDHCI_OF_DWCMSHC is not set -CONFIG_MMC_SDHCI_CADENCE=y -# CONFIG_MMC_SDHCI_F_SDH30 is not set -# CONFIG_MMC_SDHCI_MILBEAUT is not set -# CONFIG_MMC_TIFM_SD is not set -CONFIG_MMC_SPI=y -# CONFIG_MMC_SDHI is not set -# CONFIG_MMC_CB710 is not set -# CONFIG_MMC_VIA_SDMMC is not set -CONFIG_MMC_DW=y -CONFIG_MMC_DW_PLTFM=y -# CONFIG_MMC_DW_BLUEFIELD is not set -# CONFIG_MMC_DW_EXYNOS is not set -# CONFIG_MMC_DW_HI3798CV200 is not set -# CONFIG_MMC_DW_K3 is not set -# CONFIG_MMC_DW_PCI is not set -CONFIG_MMC_DW_STARFIVE=y -# CONFIG_MMC_SH_MMCIF is not set -# CONFIG_MMC_VUB300 is not set -# CONFIG_MMC_USHC is not set -# CONFIG_MMC_USDHI6ROL0 is not set -CONFIG_MMC_SUNXI=y -# CONFIG_MMC_CQHCI is not set -# CONFIG_MMC_HSQ is not set -# CONFIG_MMC_TOSHIBA_PCI is not set -# CONFIG_MMC_MTK is not set -# CONFIG_MMC_SDHCI_XENON is not set -# CONFIG_MMC_SDHCI_OMAP is not set -# CONFIG_MMC_SDHCI_AM654 is not set -# CONFIG_SCSI_UFSHCD is not set -# CONFIG_MEMSTICK is not set -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y -# CONFIG_LEDS_CLASS_FLASH is not set -# CONFIG_LEDS_CLASS_MULTICOLOR is not set -# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set - -# -# LED drivers -# -# CONFIG_LEDS_AN30259A is not set -# CONFIG_LEDS_AW2013 is not set -# CONFIG_LEDS_BCM6328 is not set -# CONFIG_LEDS_BCM6358 is not set -# CONFIG_LEDS_CR0014114 is not set -# CONFIG_LEDS_EL15203000 is not set -# CONFIG_LEDS_LM3530 is not set -# CONFIG_LEDS_LM3532 is not set -# CONFIG_LEDS_LM3642 is not set -# CONFIG_LEDS_LM3692X is not set -# CONFIG_LEDS_PCA9532 is not set -# CONFIG_LEDS_GPIO is not set -# CONFIG_LEDS_LP3944 is not set -# CONFIG_LEDS_LP3952 is not set -# CONFIG_LEDS_LP50XX is not set -# CONFIG_LEDS_LP55XX_COMMON is not set -# CONFIG_LEDS_LP8860 is not set -# CONFIG_LEDS_PCA955X is not set -# CONFIG_LEDS_PCA963X is not set -# CONFIG_LEDS_DAC124S085 is not set -# CONFIG_LEDS_PWM is not set -# CONFIG_LEDS_REGULATOR is not set -# CONFIG_LEDS_BD2606MVV is not set -# CONFIG_LEDS_BD2802 is not set -# CONFIG_LEDS_LT3593 is not set -# CONFIG_LEDS_TCA6507 is not set -# CONFIG_LEDS_TLC591XX is not set -# CONFIG_LEDS_LM355x is not set -# CONFIG_LEDS_IS31FL319X is not set -# CONFIG_LEDS_IS31FL32XX is not set - -# -# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) -# -# CONFIG_LEDS_BLINKM is not set -# CONFIG_LEDS_SYSCON is not set -# CONFIG_LEDS_MLXREG is not set -# CONFIG_LEDS_USER is not set -# CONFIG_LEDS_SPI_BYTE is not set -# CONFIG_LEDS_TI_LMU_COMMON is not set - -# -# Flash and Torch LED drivers -# - -# -# RGB LED drivers -# - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -# CONFIG_LEDS_TRIGGER_TIMER is not set -# CONFIG_LEDS_TRIGGER_ONESHOT is not set -# CONFIG_LEDS_TRIGGER_DISK is not set -# CONFIG_LEDS_TRIGGER_MTD is not set -# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set -# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set -# CONFIG_LEDS_TRIGGER_CPU is not set -# CONFIG_LEDS_TRIGGER_ACTIVITY is not set -# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set - -# -# iptables trigger is under Netfilter config (LED target) -# -# CONFIG_LEDS_TRIGGER_TRANSIENT is not set -# CONFIG_LEDS_TRIGGER_CAMERA is not set -# CONFIG_LEDS_TRIGGER_PANIC is not set -# CONFIG_LEDS_TRIGGER_NETDEV is not set -# CONFIG_LEDS_TRIGGER_PATTERN is not set -# CONFIG_LEDS_TRIGGER_AUDIO is not set -# CONFIG_LEDS_TRIGGER_TTY is not set - -# -# Simple LED drivers -# -CONFIG_ACCESSIBILITY=y -# CONFIG_A11Y_BRAILLE_CONSOLE is not set - -# -# Speakup console speech -# -# CONFIG_SPEAKUP is not set -# end of Speakup console speech - -CONFIG_INFINIBAND=y -# CONFIG_INFINIBAND_USER_MAD is not set -# CONFIG_INFINIBAND_USER_ACCESS is not set -CONFIG_INFINIBAND_ADDR_TRANS=y -CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y -CONFIG_INFINIBAND_VIRT_DMA=y -# CONFIG_INFINIBAND_CXGB4 is not set -# CONFIG_MLX4_INFINIBAND is not set -# CONFIG_INFINIBAND_MTHCA is not set -# CONFIG_INFINIBAND_OCRDMA is not set -# CONFIG_RDMA_RXE is not set -# CONFIG_RDMA_SIW is not set -# CONFIG_INFINIBAND_IPOIB is not set -# CONFIG_INFINIBAND_SRP is not set -CONFIG_INFINIBAND_ISER=y -# CONFIG_INFINIBAND_RTRS_CLIENT is not set -# CONFIG_INFINIBAND_RTRS_SERVER is not set -CONFIG_EDAC_SUPPORT=y -# CONFIG_EDAC is not set -CONFIG_RTC_LIB=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_HCTOSYS=y -CONFIG_RTC_HCTOSYS_DEVICE="rtc0" -CONFIG_RTC_SYSTOHC=y -CONFIG_RTC_SYSTOHC_DEVICE="rtc0" -# CONFIG_RTC_DEBUG is not set -CONFIG_RTC_NVMEM=y - -# -# RTC interfaces -# -CONFIG_RTC_INTF_SYSFS=y -CONFIG_RTC_INTF_PROC=y -CONFIG_RTC_INTF_DEV=y -# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set -# CONFIG_RTC_DRV_TEST is not set - -# -# I2C RTC drivers -# -# CONFIG_RTC_DRV_ABB5ZES3 is not set -# CONFIG_RTC_DRV_ABEOZ9 is not set -# CONFIG_RTC_DRV_ABX80X is not set -# CONFIG_RTC_DRV_DS1307 is not set -# CONFIG_RTC_DRV_DS1374 is not set -# CONFIG_RTC_DRV_DS1672 is not set -# CONFIG_RTC_DRV_HYM8563 is not set -# CONFIG_RTC_DRV_MAX6900 is not set -# CONFIG_RTC_DRV_NCT3018Y is not set -# CONFIG_RTC_DRV_RS5C372 is not set -# CONFIG_RTC_DRV_ISL1208 is not set -# CONFIG_RTC_DRV_ISL12022 is not set -# CONFIG_RTC_DRV_ISL12026 is not set -# CONFIG_RTC_DRV_X1205 is not set -# CONFIG_RTC_DRV_PCF8523 is not set -# CONFIG_RTC_DRV_PCF85063 is not set -# CONFIG_RTC_DRV_PCF85363 is not set -# CONFIG_RTC_DRV_PCF8563 is not set -# CONFIG_RTC_DRV_PCF8583 is not set -# CONFIG_RTC_DRV_M41T80 is not set -# CONFIG_RTC_DRV_BQ32K is not set -# CONFIG_RTC_DRV_S35390A is not set -# CONFIG_RTC_DRV_FM3130 is not set -# CONFIG_RTC_DRV_RX8010 is not set -# CONFIG_RTC_DRV_RX8581 is not set -# CONFIG_RTC_DRV_RX8025 is not set -# CONFIG_RTC_DRV_EM3027 is not set -# CONFIG_RTC_DRV_RV3028 is not set -# CONFIG_RTC_DRV_RV3032 is not set -# CONFIG_RTC_DRV_RV8803 is not set -# CONFIG_RTC_DRV_SD3078 is not set - -# -# SPI RTC drivers -# -# CONFIG_RTC_DRV_M41T93 is not set -# CONFIG_RTC_DRV_M41T94 is not set -# CONFIG_RTC_DRV_DS1302 is not set -# CONFIG_RTC_DRV_DS1305 is not set -# CONFIG_RTC_DRV_DS1343 is not set -# CONFIG_RTC_DRV_DS1347 is not set -# CONFIG_RTC_DRV_DS1390 is not set -# CONFIG_RTC_DRV_MAX6916 is not set -# CONFIG_RTC_DRV_R9701 is not set -# CONFIG_RTC_DRV_RX4581 is not set -# CONFIG_RTC_DRV_RS5C348 is not set -# CONFIG_RTC_DRV_MAX6902 is not set -# CONFIG_RTC_DRV_PCF2123 is not set -# CONFIG_RTC_DRV_MCP795 is not set -CONFIG_RTC_I2C_AND_SPI=y - -# -# SPI and I2C RTC drivers -# -# CONFIG_RTC_DRV_DS3232 is not set -# CONFIG_RTC_DRV_PCF2127 is not set -# CONFIG_RTC_DRV_RV3029C2 is not set -# CONFIG_RTC_DRV_RX6110 is not set - -# -# Platform RTC drivers -# -# CONFIG_RTC_DRV_DS1286 is not set -# CONFIG_RTC_DRV_DS1511 is not set -# CONFIG_RTC_DRV_DS1553 is not set -# CONFIG_RTC_DRV_DS1685_FAMILY is not set -# CONFIG_RTC_DRV_DS1742 is not set -# CONFIG_RTC_DRV_DS2404 is not set -# CONFIG_RTC_DRV_EFI is not set -# CONFIG_RTC_DRV_STK17TA8 is not set -# CONFIG_RTC_DRV_M48T86 is not set -# CONFIG_RTC_DRV_M48T35 is not set -# CONFIG_RTC_DRV_M48T59 is not set -# CONFIG_RTC_DRV_MSM6242 is not set -# CONFIG_RTC_DRV_BQ4802 is not set -# CONFIG_RTC_DRV_RP5C01 is not set -# CONFIG_RTC_DRV_ZYNQMP is not set - -# -# on-CPU RTC drivers -# -# CONFIG_RTC_DRV_SH is not set -# CONFIG_RTC_DRV_PL030 is not set -# CONFIG_RTC_DRV_PL031 is not set -CONFIG_RTC_DRV_SUN6I=y -# CONFIG_RTC_DRV_CADENCE is not set -# CONFIG_RTC_DRV_FTRTC010 is not set -# CONFIG_RTC_DRV_R7301 is not set - -# -# HID Sensor RTC drivers -# -CONFIG_RTC_DRV_GOLDFISH=y -# CONFIG_RTC_DRV_POLARFIRE_SOC is not set -CONFIG_DMADEVICES=y -# CONFIG_DMADEVICES_DEBUG is not set - -# -# DMA Devices -# -CONFIG_DMA_ENGINE=y -CONFIG_DMA_VIRTUAL_CHANNELS=y -CONFIG_DMA_OF=y -# CONFIG_ALTERA_MSGDMA is not set -CONFIG_AMBA_PL08X=y -# CONFIG_DMA_SUN6I is not set -CONFIG_DW_AXI_DMAC=y -# CONFIG_FSL_EDMA is not set -# CONFIG_INTEL_IDMA64 is not set -# CONFIG_PL330_DMA is not set -# CONFIG_PLX_DMA is not set -# CONFIG_XILINX_XDMA is not set -# CONFIG_XILINX_ZYNQMP_DPDMA is not set -# CONFIG_QCOM_HIDMA_MGMT is not set -# CONFIG_QCOM_HIDMA is not set -# CONFIG_DW_DMAC is not set -# CONFIG_DW_DMAC_PCI is not set -# CONFIG_DW_EDMA is not set -# CONFIG_SF_PDMA is not set -# CONFIG_RCAR_DMAC is not set -# CONFIG_RENESAS_USB_DMAC is not set -# CONFIG_RZ_DMAC is not set - -# -# DMA Clients -# -# CONFIG_ASYNC_TX_DMA is not set -# CONFIG_DMATEST is not set - -# -# DMABUF options -# -CONFIG_SYNC_FILE=y -# CONFIG_SW_SYNC is not set -# CONFIG_UDMABUF is not set -# CONFIG_DMABUF_MOVE_NOTIFY is not set -# CONFIG_DMABUF_DEBUG is not set -# CONFIG_DMABUF_SELFTESTS is not set -# CONFIG_DMABUF_HEAPS is not set -# CONFIG_DMABUF_SYSFS_STATS is not set -# end of DMABUF options - -CONFIG_AUXDISPLAY=y -# CONFIG_HD44780 is not set -# CONFIG_IMG_ASCII_LCD is not set -# CONFIG_HT16K33 is not set -# CONFIG_LCD2S is not set -# CONFIG_CHARLCD_BL_OFF is not set -# CONFIG_CHARLCD_BL_ON is not set -CONFIG_CHARLCD_BL_FLASH=y -CONFIG_UIO=y -# CONFIG_UIO_CIF is not set -CONFIG_UIO_PDRV_GENIRQ=y -# CONFIG_UIO_DMEM_GENIRQ is not set -# CONFIG_UIO_AEC is not set -# CONFIG_UIO_SERCOS3 is not set -# CONFIG_UIO_PCI_GENERIC is not set -# CONFIG_UIO_NETX is not set -# CONFIG_UIO_PRUSS is not set -# CONFIG_UIO_MF624 is not set -# CONFIG_VFIO is not set -CONFIG_VIRT_DRIVERS=y -CONFIG_VIRTIO_ANCHOR=y -CONFIG_VIRTIO=y -CONFIG_VIRTIO_PCI_LIB=y -CONFIG_VIRTIO_PCI_LIB_LEGACY=y -CONFIG_VIRTIO_MENU=y -CONFIG_VIRTIO_PCI=y -CONFIG_VIRTIO_PCI_LEGACY=y -# CONFIG_VIRTIO_PMEM is not set -CONFIG_VIRTIO_BALLOON=y -CONFIG_VIRTIO_INPUT=y -CONFIG_VIRTIO_MMIO=y -CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y -# CONFIG_VDPA is not set -CONFIG_VHOST_MENU=y -# CONFIG_VHOST_NET is not set -# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set - -# -# Microsoft Hyper-V guest support -# -# end of Microsoft Hyper-V guest support - -# CONFIG_GREYBUS is not set -# CONFIG_COMEDI is not set -CONFIG_STAGING=y -# CONFIG_PRISM2_USB is not set -# CONFIG_RTL8192U is not set -# CONFIG_RTLLIB is not set -# CONFIG_RTL8723BS is not set -# CONFIG_R8712U is not set -# CONFIG_RTS5208 is not set -# CONFIG_FB_SM750 is not set -# CONFIG_USB_EMXX is not set -# CONFIG_STAGING_MEDIA is not set -# CONFIG_STAGING_BOARD is not set -# CONFIG_LTE_GDM724X is not set -# CONFIG_FB_TFT is not set -# CONFIG_KS7010 is not set -# CONFIG_PI433 is not set -# CONFIG_XIL_AXIS_FIFO is not set -# CONFIG_FIELDBUS_DEV is not set -# CONFIG_QLGE is not set -# CONFIG_VME_BUS is not set -CONFIG_GOLDFISH=y -# CONFIG_GOLDFISH_PIPE is not set -CONFIG_HAVE_CLK=y -CONFIG_HAVE_CLK_PREPARE=y -CONFIG_COMMON_CLK=y -# CONFIG_LMK04832 is not set -# CONFIG_COMMON_CLK_MAX9485 is not set -# CONFIG_COMMON_CLK_SI5341 is not set -# CONFIG_COMMON_CLK_SI5351 is not set -# CONFIG_COMMON_CLK_SI514 is not set -# CONFIG_COMMON_CLK_SI544 is not set -# CONFIG_COMMON_CLK_SI570 is not set -# CONFIG_COMMON_CLK_CDCE706 is not set -# CONFIG_COMMON_CLK_CDCE925 is not set -# CONFIG_COMMON_CLK_CS2000_CP is not set -# CONFIG_COMMON_CLK_AXI_CLKGEN is not set -# CONFIG_COMMON_CLK_PWM is not set -# CONFIG_COMMON_CLK_RS9_PCIE is not set -# CONFIG_COMMON_CLK_SI521XX is not set -# CONFIG_COMMON_CLK_VC5 is not set -# CONFIG_COMMON_CLK_VC7 is not set -# CONFIG_COMMON_CLK_FIXED_MMIO is not set -CONFIG_CLK_ANALOGBITS_WRPLL_CLN28HPC=y -CONFIG_MCHP_CLK_MPFS=y -CONFIG_CLK_RENESAS=y -CONFIG_CLK_R9A07G043=y -# CONFIG_CLK_RCAR_USB2_CLOCK_SEL is not set -CONFIG_CLK_RZG2L=y -CONFIG_CLK_SIFIVE=y -CONFIG_CLK_SIFIVE_PRCI=y -CONFIG_CLK_STARFIVE_JH71X0=y -CONFIG_CLK_STARFIVE_JH7100=y -# CONFIG_CLK_STARFIVE_JH7100_AUDIO is not set -CONFIG_CLK_STARFIVE_JH7110_PLL=y -CONFIG_CLK_STARFIVE_JH7110_SYS=y -CONFIG_CLK_STARFIVE_JH7110_AON=y -CONFIG_CLK_STARFIVE_JH7110_STG=y -CONFIG_CLK_STARFIVE_JH7110_ISP=y -# CONFIG_CLK_STARFIVE_JH7110_VOUT is not set -CONFIG_SUNXI_CCU=y -CONFIG_SUN20I_D1_CCU=y -CONFIG_SUN20I_D1_R_CCU=y -CONFIG_SUN6I_RTC_CCU=y -# CONFIG_SUN8I_DE2_CCU is not set -# CONFIG_XILINX_VCU is not set -# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set -# CONFIG_HWSPINLOCK is not set - -# -# Clock Source drivers -# -CONFIG_TIMER_OF=y -CONFIG_TIMER_PROBE=y -CONFIG_CLKSRC_MMIO=y -CONFIG_SUN4I_TIMER=y -# CONFIG_RENESAS_OSTM is not set -CONFIG_RISCV_TIMER=y -CONFIG_STARFIVE_JH7110_TIMER=y -# end of Clock Source drivers - -# CONFIG_MAILBOX is not set -CONFIG_IOMMU_API=y -CONFIG_IOMMU_SUPPORT=y - -# -# Generic IOMMU Pagetable Support -# -# end of Generic IOMMU Pagetable Support - -# CONFIG_IOMMU_DEBUGFS is not set -CONFIG_IOMMU_DEFAULT_DMA_STRICT=y -# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set -# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set -CONFIG_OF_IOMMU=y -# CONFIG_IOMMUFD is not set -CONFIG_SUN50I_IOMMU=y - -# -# Remoteproc drivers -# -# CONFIG_REMOTEPROC is not set -# end of Remoteproc drivers - -# -# Rpmsg drivers -# -CONFIG_RPMSG=y -CONFIG_RPMSG_CHAR=y -CONFIG_RPMSG_CTRL=y -CONFIG_RPMSG_NS=y -CONFIG_RPMSG_VIRTIO=y -# end of Rpmsg drivers - -# CONFIG_SOUNDWIRE is not set - -# -# SOC (System On Chip) specific Drivers -# - -# -# Amlogic SoC drivers -# -# end of Amlogic SoC drivers - -# -# Broadcom SoC drivers -# -# end of Broadcom SoC drivers - -# -# NXP/Freescale QorIQ SoC drivers -# -# end of NXP/Freescale QorIQ SoC drivers - -# -# fujitsu SoC drivers -# -# end of fujitsu SoC drivers - -# -# i.MX SoC drivers -# -# end of i.MX SoC drivers - -# -# Enable LiteX SoC Builder specific drivers -# -# CONFIG_LITEX_SOC_CONTROLLER is not set -# end of Enable LiteX SoC Builder specific drivers - -# CONFIG_WPCM450_SOC is not set - -# -# Qualcomm SoC drivers -# -# end of Qualcomm SoC drivers - -CONFIG_SOC_RENESAS=y -CONFIG_ARCH_RZG2L=y -CONFIG_ARCH_R9A07G043=y -CONFIG_SIFIVE_CCACHE=y -CONFIG_JH71XX_PMU=y -CONFIG_SUNXI_SRAM=y -# CONFIG_SUN20I_PPU is not set -# CONFIG_SOC_TI is not set - -# -# Xilinx SoC drivers -# -# end of Xilinx SoC drivers -# end of SOC (System On Chip) specific Drivers - -CONFIG_PM_DEVFREQ=y - -# -# DEVFREQ Governors -# -# CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND is not set -# CONFIG_DEVFREQ_GOV_PERFORMANCE is not set -# CONFIG_DEVFREQ_GOV_POWERSAVE is not set -# CONFIG_DEVFREQ_GOV_USERSPACE is not set -# CONFIG_DEVFREQ_GOV_PASSIVE is not set - -# -# DEVFREQ Drivers -# -# CONFIG_ARM_SUN8I_A33_MBUS_DEVFREQ is not set -# CONFIG_PM_DEVFREQ_EVENT is not set -CONFIG_EXTCON=y - -# -# Extcon Device Drivers -# -# CONFIG_EXTCON_FSA9480 is not set -# CONFIG_EXTCON_GPIO is not set -# CONFIG_EXTCON_MAX3355 is not set -# CONFIG_EXTCON_PTN5150 is not set -# CONFIG_EXTCON_RT8973A is not set -# CONFIG_EXTCON_SM5502 is not set -# CONFIG_EXTCON_USB_GPIO is not set -# CONFIG_MEMORY is not set -# CONFIG_IIO is not set -# CONFIG_NTB is not set -CONFIG_PWM=y -CONFIG_PWM_SYSFS=y -# CONFIG_PWM_DEBUG is not set -# CONFIG_PWM_ATMEL_TCB is not set -# CONFIG_PWM_CLK is not set -# CONFIG_PWM_DWC is not set -# CONFIG_PWM_FSL_FTM is not set -# CONFIG_PWM_PCA9685 is not set -# CONFIG_PWM_RCAR is not set -# CONFIG_PWM_RENESAS_TPU is not set -# CONFIG_PWM_SIFIVE is not set -CONFIG_PWM_STARFIVE_PTC=y -# CONFIG_PWM_SUN4I is not set -# CONFIG_PWM_XILINX is not set - -# -# IRQ chip support -# -CONFIG_IRQCHIP=y -# CONFIG_AL_FIC is not set -CONFIG_RENESAS_RZG2L_IRQC=y -# CONFIG_XILINX_INTC is not set -CONFIG_RISCV_INTC=y -CONFIG_SIFIVE_PLIC=y -# end of IRQ chip support - -# CONFIG_IPACK_BUS is not set -CONFIG_RESET_CONTROLLER=y -CONFIG_RESET_POLARFIRE_SOC=y -# CONFIG_RESET_RZG2L_USBPHY_CTRL is not set -CONFIG_RESET_SIMPLE=y -CONFIG_RESET_SUNXI=y -# CONFIG_RESET_TI_SYSCON is not set -# CONFIG_RESET_TI_TPS380X is not set -CONFIG_RESET_STARFIVE_JH71X0=y -CONFIG_RESET_STARFIVE_JH7100=y -CONFIG_RESET_STARFIVE_JH7110=y - -# -# PHY Subsystem -# -CONFIG_GENERIC_PHY=y -CONFIG_GENERIC_PHY_MIPI_DPHY=y -# CONFIG_PHY_CAN_TRANSCEIVER is not set -# CONFIG_PHY_SUN4I_USB is not set -# CONFIG_PHY_SUN6I_MIPI_DPHY is not set -# CONFIG_PHY_SUN9I_USB is not set -# CONFIG_PHY_SUN50I_USB3 is not set - -# -# PHY drivers for Broadcom platforms -# -# CONFIG_BCM_KONA_USB2_PHY is not set -# end of PHY drivers for Broadcom platforms - -# CONFIG_PHY_CADENCE_TORRENT is not set -# CONFIG_PHY_CADENCE_DPHY is not set -# CONFIG_PHY_CADENCE_DPHY_RX is not set -# CONFIG_PHY_CADENCE_SIERRA is not set -# CONFIG_PHY_CADENCE_SALVO is not set -# CONFIG_PHY_PXA_28NM_HSIC is not set -# CONFIG_PHY_PXA_28NM_USB2 is not set -# CONFIG_PHY_LAN966X_SERDES is not set -# CONFIG_PHY_MAPPHONE_MDM6600 is not set -# CONFIG_PHY_OCELOT_SERDES is not set -# CONFIG_PHY_R8A779F0_ETHERNET_SERDES is not set -# CONFIG_PHY_RCAR_GEN2 is not set -# CONFIG_PHY_RCAR_GEN3_PCIE is not set -# CONFIG_PHY_RCAR_GEN3_USB2 is not set -# CONFIG_PHY_RCAR_GEN3_USB3 is not set -CONFIG_PHY_STARFIVE_DPHY_RX=y -CONFIG_PHY_STARFIVE_JH7110_PCIE=y -CONFIG_PHY_STARFIVE_JH7110_USB=y -# end of PHY Subsystem - -CONFIG_POWERCAP=y -# CONFIG_IDLE_INJECT is not set -# CONFIG_DTPM is not set -# CONFIG_MCB is not set - -# -# Performance monitor support -# -CONFIG_RISCV_PMU=y -CONFIG_RISCV_PMU_LEGACY=y -CONFIG_RISCV_PMU_SBI=y -# end of Performance monitor support - -CONFIG_RAS=y -# CONFIG_USB4 is not set - -# -# Android -# -CONFIG_ANDROID_BINDER_IPC=y -CONFIG_ANDROID_BINDERFS=y -CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder" -# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set -# end of Android - -CONFIG_LIBNVDIMM=y -CONFIG_BLK_DEV_PMEM=y -CONFIG_ND_CLAIM=y -CONFIG_ND_BTT=y -CONFIG_BTT=y -CONFIG_OF_PMEM=y -CONFIG_DAX=y -# CONFIG_DEV_DAX is not set -CONFIG_NVMEM=y -CONFIG_NVMEM_SYSFS=y - -# -# Layout Types -# -# CONFIG_NVMEM_LAYOUT_SL28_VPD is not set -# CONFIG_NVMEM_LAYOUT_ONIE_TLV is not set -# end of Layout Types - -# CONFIG_NVMEM_RMEM is not set -CONFIG_NVMEM_SUNXI_SID=y -# CONFIG_NVMEM_U_BOOT_ENV is not set - -# -# HW tracing support -# -# CONFIG_STM is not set -# CONFIG_INTEL_TH is not set -# end of HW tracing support - -# CONFIG_FPGA is not set -# CONFIG_FSI is not set -CONFIG_PM_OPP=y -# CONFIG_SIOX is not set -# CONFIG_SLIMBUS is not set -# CONFIG_INTERCONNECT is not set -# CONFIG_COUNTER is not set -# CONFIG_MOST is not set -# CONFIG_PECI is not set -# CONFIG_HTE is not set -# end of Device Drivers - -# -# File systems -# -# CONFIG_VALIDATE_FS_PARSER is not set -CONFIG_FS_IOMAP=y -CONFIG_LEGACY_DIRECT_IO=y -# CONFIG_EXT2_FS is not set -# CONFIG_EXT3_FS is not set -CONFIG_EXT4_FS=y -CONFIG_EXT4_USE_FOR_EXT2=y -CONFIG_EXT4_FS_POSIX_ACL=y -CONFIG_EXT4_FS_SECURITY=y -# CONFIG_EXT4_DEBUG is not set -CONFIG_JBD2=y -# CONFIG_JBD2_DEBUG is not set -CONFIG_FS_MBCACHE=y -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -# CONFIG_XFS_FS is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_BTRFS_FS is not set -# CONFIG_NILFS2_FS is not set -# CONFIG_F2FS_FS is not set -CONFIG_FS_POSIX_ACL=y -CONFIG_EXPORTFS=y -# CONFIG_EXPORTFS_BLOCK_OPS is not set -CONFIG_FILE_LOCKING=y -CONFIG_FS_ENCRYPTION=y -CONFIG_FS_ENCRYPTION_ALGS=y -# CONFIG_FS_VERITY is not set -CONFIG_FSNOTIFY=y -CONFIG_DNOTIFY=y -CONFIG_INOTIFY_USER=y -CONFIG_FANOTIFY=y -CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y -CONFIG_QUOTA=y -# CONFIG_QUOTA_NETLINK_INTERFACE is not set -# CONFIG_QUOTA_DEBUG is not set -# CONFIG_QFMT_V1 is not set -# CONFIG_QFMT_V2 is not set -CONFIG_QUOTACTL=y -CONFIG_AUTOFS4_FS=y -CONFIG_AUTOFS_FS=y -CONFIG_FUSE_FS=y -# CONFIG_CUSE is not set -# CONFIG_VIRTIO_FS is not set -# CONFIG_OVERLAY_FS is not set - -# -# Caches -# -CONFIG_NETFS_SUPPORT=y -# CONFIG_NETFS_STATS is not set -# CONFIG_FSCACHE is not set -# end of Caches - -# -# CD-ROM/DVD Filesystems -# -# CONFIG_ISO9660_FS is not set -# CONFIG_UDF_FS is not set -# end of CD-ROM/DVD Filesystems - -# -# DOS/FAT/EXFAT/NT Filesystems -# -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y -CONFIG_VFAT_FS=y -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -# CONFIG_FAT_DEFAULT_UTF8 is not set -# CONFIG_EXFAT_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS3_FS is not set -# end of DOS/FAT/EXFAT/NT Filesystems - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_KCORE=y -CONFIG_PROC_SYSCTL=y -CONFIG_PROC_PAGE_MONITOR=y -CONFIG_PROC_CHILDREN=y -CONFIG_KERNFS=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -CONFIG_TMPFS_POSIX_ACL=y -CONFIG_TMPFS_XATTR=y -# CONFIG_TMPFS_INODE64 is not set -CONFIG_ARCH_SUPPORTS_HUGETLBFS=y -CONFIG_HUGETLBFS=y -CONFIG_HUGETLB_PAGE=y -CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP=y -# CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON is not set -CONFIG_MEMFD_CREATE=y -CONFIG_ARCH_HAS_GIGANTIC_PAGE=y -CONFIG_CONFIGFS_FS=y -CONFIG_EFIVAR_FS=y -# end of Pseudo filesystems - -CONFIG_MISC_FILESYSTEMS=y -# CONFIG_ORANGEFS_FS is not set -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_ECRYPT_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS2_FS is not set -# CONFIG_CRAMFS is not set -# CONFIG_SQUASHFS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_OMFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_QNX6FS_FS is not set -# CONFIG_ROMFS_FS is not set -CONFIG_PSTORE=y -CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240 -# CONFIG_PSTORE_DEFLATE_COMPRESS is not set -# CONFIG_PSTORE_LZO_COMPRESS is not set -# CONFIG_PSTORE_LZ4_COMPRESS is not set -# CONFIG_PSTORE_LZ4HC_COMPRESS is not set -# CONFIG_PSTORE_842_COMPRESS is not set -# CONFIG_PSTORE_ZSTD_COMPRESS is not set -# CONFIG_PSTORE_CONSOLE is not set -# CONFIG_PSTORE_PMSG is not set -# CONFIG_PSTORE_FTRACE is not set -# CONFIG_PSTORE_RAM is not set -# CONFIG_PSTORE_BLK is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set -# CONFIG_EROFS_FS is not set -CONFIG_NETWORK_FILESYSTEMS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V2=y -CONFIG_NFS_V3=y -CONFIG_NFS_V3_ACL=y -CONFIG_NFS_V4=y -CONFIG_NFS_SWAP=y -CONFIG_NFS_V4_1=y -CONFIG_NFS_V4_2=y -CONFIG_PNFS_FILE_LAYOUT=y -CONFIG_PNFS_BLOCK=y -CONFIG_PNFS_FLEXFILE_LAYOUT=y -CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" -# CONFIG_NFS_V4_1_MIGRATION is not set -CONFIG_NFS_V4_SECURITY_LABEL=y -# CONFIG_NFS_USE_LEGACY_DNS is not set -CONFIG_NFS_USE_KERNEL_DNS=y -CONFIG_NFS_DEBUG=y -CONFIG_NFS_DISABLE_UDP_SUPPORT=y -# CONFIG_NFS_V4_2_READ_PLUS is not set -# CONFIG_NFSD is not set -CONFIG_GRACE_PERIOD=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -CONFIG_NFS_ACL_SUPPORT=y -CONFIG_NFS_COMMON=y -CONFIG_NFS_V4_2_SSC_HELPER=y -CONFIG_SUNRPC=y -CONFIG_SUNRPC_GSS=y -CONFIG_SUNRPC_BACKCHANNEL=y -CONFIG_SUNRPC_SWAP=y -CONFIG_RPCSEC_GSS_KRB5=y -CONFIG_SUNRPC_DEBUG=y -# CONFIG_SUNRPC_XPRT_RDMA is not set -# CONFIG_CEPH_FS is not set -# CONFIG_CIFS is not set -# CONFIG_SMB_SERVER is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set -CONFIG_9P_FS=y -CONFIG_9P_FS_POSIX_ACL=y -# CONFIG_9P_FS_SECURITY is not set -CONFIG_NLS=y -CONFIG_NLS_DEFAULT="utf8" -CONFIG_NLS_CODEPAGE_437=y -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ASCII is not set -CONFIG_NLS_ISO8859_1=y -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_MAC_ROMAN is not set -# CONFIG_NLS_MAC_CELTIC is not set -# CONFIG_NLS_MAC_CENTEURO is not set -# CONFIG_NLS_MAC_CROATIAN is not set -# CONFIG_NLS_MAC_CYRILLIC is not set -# CONFIG_NLS_MAC_GAELIC is not set -# CONFIG_NLS_MAC_GREEK is not set -# CONFIG_NLS_MAC_ICELAND is not set -# CONFIG_NLS_MAC_INUIT is not set -# CONFIG_NLS_MAC_ROMANIAN is not set -# CONFIG_NLS_MAC_TURKISH is not set -# CONFIG_NLS_UTF8 is not set -# CONFIG_DLM is not set -CONFIG_UNICODE=y -# CONFIG_UNICODE_NORMALIZATION_SELFTEST is not set -CONFIG_IO_WQ=y -# end of File systems - -# -# Security options -# -CONFIG_KEYS=y -CONFIG_KEYS_REQUEST_CACHE=y -CONFIG_PERSISTENT_KEYRINGS=y -# CONFIG_BIG_KEYS is not set -# CONFIG_TRUSTED_KEYS is not set -# CONFIG_ENCRYPTED_KEYS is not set -CONFIG_KEY_DH_OPERATIONS=y -# CONFIG_SECURITY_DMESG_RESTRICT is not set -CONFIG_SECURITY=y -CONFIG_SECURITYFS=y -CONFIG_SECURITY_NETWORK=y -# CONFIG_SECURITY_INFINIBAND is not set -CONFIG_SECURITY_PATH=y -CONFIG_LSM_MMAP_MIN_ADDR=65536 -CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y -CONFIG_HARDENED_USERCOPY=y -CONFIG_FORTIFY_SOURCE=y -# CONFIG_STATIC_USERMODEHELPER is not set -CONFIG_SECURITY_SELINUX=y -# CONFIG_SECURITY_SELINUX_BOOTPARAM is not set -CONFIG_SECURITY_SELINUX_DEVELOP=y -CONFIG_SECURITY_SELINUX_AVC_STATS=y -CONFIG_SECURITY_SELINUX_SIDTAB_HASH_BITS=9 -CONFIG_SECURITY_SELINUX_SID2STR_CACHE_SIZE=256 -# CONFIG_SECURITY_SMACK is not set -# CONFIG_SECURITY_TOMOYO is not set -CONFIG_SECURITY_APPARMOR=y -# CONFIG_SECURITY_APPARMOR_DEBUG is not set -CONFIG_SECURITY_APPARMOR_INTROSPECT_POLICY=y -CONFIG_SECURITY_APPARMOR_HASH=y -CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y -CONFIG_SECURITY_APPARMOR_EXPORT_BINARY=y -CONFIG_SECURITY_APPARMOR_PARANOID_LOAD=y -# CONFIG_SECURITY_LOADPIN is not set -CONFIG_SECURITY_YAMA=y -# CONFIG_SECURITY_SAFESETID is not set -# CONFIG_SECURITY_LOCKDOWN_LSM is not set -CONFIG_SECURITY_LANDLOCK=y -CONFIG_INTEGRITY=y -# CONFIG_INTEGRITY_SIGNATURE is not set -CONFIG_INTEGRITY_AUDIT=y -# CONFIG_IMA is not set -# CONFIG_EVM is not set -# CONFIG_DEFAULT_SECURITY_SELINUX is not set -CONFIG_DEFAULT_SECURITY_APPARMOR=y -# CONFIG_DEFAULT_SECURITY_DAC is not set -CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,bpf" - -# -# Kernel hardening options -# - -# -# Memory initialization -# -CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y -CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y -CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y -# CONFIG_INIT_STACK_NONE is not set -# CONFIG_INIT_STACK_ALL_PATTERN is not set -CONFIG_INIT_STACK_ALL_ZERO=y -# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set -# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set -CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y -# CONFIG_ZERO_CALL_USED_REGS is not set -# end of Memory initialization - -CONFIG_RANDSTRUCT_NONE=y -# CONFIG_RANDSTRUCT_FULL is not set -# CONFIG_RANDSTRUCT_PERFORMANCE is not set -# end of Kernel hardening options -# end of Security options - -CONFIG_CRYPTO=y - -# -# Crypto core or helper -# -CONFIG_CRYPTO_ALGAPI=y -CONFIG_CRYPTO_ALGAPI2=y -CONFIG_CRYPTO_AEAD=y -CONFIG_CRYPTO_AEAD2=y -CONFIG_CRYPTO_SKCIPHER=y -CONFIG_CRYPTO_SKCIPHER2=y -CONFIG_CRYPTO_HASH=y -CONFIG_CRYPTO_HASH2=y -CONFIG_CRYPTO_RNG2=y -CONFIG_CRYPTO_AKCIPHER2=y -CONFIG_CRYPTO_AKCIPHER=y -CONFIG_CRYPTO_KPP2=y -CONFIG_CRYPTO_KPP=y -CONFIG_CRYPTO_ACOMP2=y -CONFIG_CRYPTO_MANAGER=y -CONFIG_CRYPTO_MANAGER2=y -# CONFIG_CRYPTO_USER is not set -CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y -CONFIG_CRYPTO_NULL=y -CONFIG_CRYPTO_NULL2=y -# CONFIG_CRYPTO_PCRYPT is not set -# CONFIG_CRYPTO_CRYPTD is not set -# CONFIG_CRYPTO_AUTHENC is not set -# CONFIG_CRYPTO_TEST is not set -CONFIG_CRYPTO_ENGINE=y -# end of Crypto core or helper - -# -# Public-key cryptography -# -CONFIG_CRYPTO_RSA=y -CONFIG_CRYPTO_DH=y -# CONFIG_CRYPTO_DH_RFC7919_GROUPS is not set -# CONFIG_CRYPTO_ECDH is not set -# CONFIG_CRYPTO_ECDSA is not set -# CONFIG_CRYPTO_ECRDSA is not set -# CONFIG_CRYPTO_SM2 is not set -CONFIG_CRYPTO_CURVE25519=y -# end of Public-key cryptography - -# -# Block ciphers -# -CONFIG_CRYPTO_AES=y -# CONFIG_CRYPTO_AES_TI is not set -# CONFIG_CRYPTO_ANUBIS is not set -# CONFIG_CRYPTO_ARIA is not set -# CONFIG_CRYPTO_BLOWFISH is not set -# CONFIG_CRYPTO_CAMELLIA is not set -# CONFIG_CRYPTO_CAST5 is not set -# CONFIG_CRYPTO_CAST6 is not set -# CONFIG_CRYPTO_DES is not set -# CONFIG_CRYPTO_FCRYPT is not set -# CONFIG_CRYPTO_KHAZAD is not set -# CONFIG_CRYPTO_SEED is not set -# CONFIG_CRYPTO_SERPENT is not set -# CONFIG_CRYPTO_SM4_GENERIC is not set -# CONFIG_CRYPTO_TEA is not set -# CONFIG_CRYPTO_TWOFISH is not set -# end of Block ciphers - -# -# Length-preserving ciphers and modes -# -CONFIG_CRYPTO_ADIANTUM=y -# CONFIG_CRYPTO_ARC4 is not set -CONFIG_CRYPTO_CHACHA20=y -# CONFIG_CRYPTO_CBC is not set -# CONFIG_CRYPTO_CFB is not set -CONFIG_CRYPTO_CTR=y -# CONFIG_CRYPTO_CTS is not set -# CONFIG_CRYPTO_ECB is not set -# CONFIG_CRYPTO_HCTR2 is not set -# CONFIG_CRYPTO_KEYWRAP is not set -# CONFIG_CRYPTO_LRW is not set -# CONFIG_CRYPTO_OFB is not set -# CONFIG_CRYPTO_PCBC is not set -# CONFIG_CRYPTO_XTS is not set -CONFIG_CRYPTO_NHPOLY1305=y -# end of Length-preserving ciphers and modes - -# -# AEAD (authenticated encryption with associated data) ciphers -# -# CONFIG_CRYPTO_AEGIS128 is not set -# CONFIG_CRYPTO_CHACHA20POLY1305 is not set -# CONFIG_CRYPTO_CCM is not set -CONFIG_CRYPTO_GCM=y -# CONFIG_CRYPTO_SEQIV is not set -# CONFIG_CRYPTO_ECHAINIV is not set -# CONFIG_CRYPTO_ESSIV is not set -# end of AEAD (authenticated encryption with associated data) ciphers - -# -# Hashes, digests, and MACs -# -# CONFIG_CRYPTO_BLAKE2B is not set -# CONFIG_CRYPTO_CMAC is not set -CONFIG_CRYPTO_GHASH=y -CONFIG_CRYPTO_HMAC=y -# CONFIG_CRYPTO_MD4 is not set -CONFIG_CRYPTO_MD5=y -# CONFIG_CRYPTO_MICHAEL_MIC is not set -# CONFIG_CRYPTO_POLY1305 is not set -# CONFIG_CRYPTO_RMD160 is not set -CONFIG_CRYPTO_SHA1=y -CONFIG_CRYPTO_SHA256=y -# CONFIG_CRYPTO_SHA512 is not set -# CONFIG_CRYPTO_SHA3 is not set -# CONFIG_CRYPTO_SM3_GENERIC is not set -# CONFIG_CRYPTO_STREEBOG is not set -# CONFIG_CRYPTO_VMAC is not set -# CONFIG_CRYPTO_WP512 is not set -# CONFIG_CRYPTO_XCBC is not set -# CONFIG_CRYPTO_XXHASH is not set -# end of Hashes, digests, and MACs - -# -# CRCs (cyclic redundancy checks) -# -CONFIG_CRYPTO_CRC32C=y -# CONFIG_CRYPTO_CRC32 is not set -CONFIG_CRYPTO_CRCT10DIF=y -CONFIG_CRYPTO_CRC64_ROCKSOFT=y -# end of CRCs (cyclic redundancy checks) - -# -# Compression -# -# CONFIG_CRYPTO_DEFLATE is not set -CONFIG_CRYPTO_LZO=y -CONFIG_CRYPTO_842=y -CONFIG_CRYPTO_LZ4=y -CONFIG_CRYPTO_LZ4HC=y -CONFIG_CRYPTO_ZSTD=y -# end of Compression - -# -# Random number generation -# -# CONFIG_CRYPTO_ANSI_CPRNG is not set -# CONFIG_CRYPTO_DRBG_MENU is not set -# CONFIG_CRYPTO_JITTERENTROPY is not set -CONFIG_CRYPTO_KDF800108_CTR=y -# end of Random number generation - -# -# Userspace interface -# -CONFIG_CRYPTO_USER_API=y -CONFIG_CRYPTO_USER_API_HASH=y -# CONFIG_CRYPTO_USER_API_SKCIPHER is not set -# CONFIG_CRYPTO_USER_API_RNG is not set -# CONFIG_CRYPTO_USER_API_AEAD is not set -CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y -# end of Userspace interface - -CONFIG_CRYPTO_HASH_INFO=y -CONFIG_CRYPTO_HW=y -CONFIG_CRYPTO_DEV_ALLWINNER=y -# CONFIG_CRYPTO_DEV_SUN4I_SS is not set -# CONFIG_CRYPTO_DEV_SUN8I_CE is not set -# CONFIG_CRYPTO_DEV_SUN8I_SS is not set -# CONFIG_CRYPTO_DEV_ATMEL_ECC is not set -# CONFIG_CRYPTO_DEV_ATMEL_SHA204A is not set -# CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set -# CONFIG_CRYPTO_DEV_QAT_DH895xCC is not set -# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set -# CONFIG_CRYPTO_DEV_QAT_C62X is not set -# CONFIG_CRYPTO_DEV_QAT_4XXX is not set -# CONFIG_CRYPTO_DEV_QAT_DH895xCCVF is not set -# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set -# CONFIG_CRYPTO_DEV_QAT_C62XVF is not set -# CONFIG_CRYPTO_DEV_CHELSIO is not set -CONFIG_CRYPTO_DEV_VIRTIO=y -# CONFIG_CRYPTO_DEV_SAFEXCEL is not set -# CONFIG_CRYPTO_DEV_CCREE is not set -# CONFIG_CRYPTO_DEV_AMLOGIC_GXL is not set -# CONFIG_CRYPTO_DEV_JH7110 is not set -CONFIG_ASYMMETRIC_KEY_TYPE=y -CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y -CONFIG_X509_CERTIFICATE_PARSER=y -# CONFIG_PKCS8_PRIVATE_KEY_PARSER is not set -CONFIG_PKCS7_MESSAGE_PARSER=y -# CONFIG_PKCS7_TEST_KEY is not set -# CONFIG_SIGNED_PE_FILE_VERIFICATION is not set -# CONFIG_FIPS_SIGNATURE_SELFTEST is not set - -# -# Certificates for signature checking -# -CONFIG_SYSTEM_TRUSTED_KEYRING=y -CONFIG_SYSTEM_TRUSTED_KEYS="" -# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set -# CONFIG_SECONDARY_TRUSTED_KEYRING is not set -# CONFIG_SYSTEM_BLACKLIST_KEYRING is not set -# end of Certificates for signature checking - -CONFIG_BINARY_PRINTF=y - -# -# Library routines -# -CONFIG_LINEAR_RANGES=y -CONFIG_PACKING=y -CONFIG_BITREVERSE=y -CONFIG_GENERIC_STRNCPY_FROM_USER=y -CONFIG_GENERIC_STRNLEN_USER=y -CONFIG_GENERIC_NET_UTILS=y -# CONFIG_CORDIC is not set -# CONFIG_PRIME_NUMBERS is not set -CONFIG_RATIONAL=y -CONFIG_GENERIC_PCI_IOMAP=y - -# -# Crypto library routines -# -CONFIG_CRYPTO_LIB_UTILS=y -CONFIG_CRYPTO_LIB_AES=y -CONFIG_CRYPTO_LIB_GF128MUL=y -CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y -CONFIG_CRYPTO_LIB_CHACHA_GENERIC=y -CONFIG_CRYPTO_LIB_CHACHA=y -CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=y -CONFIG_CRYPTO_LIB_CURVE25519=y -CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1 -CONFIG_CRYPTO_LIB_POLY1305_GENERIC=y -CONFIG_CRYPTO_LIB_POLY1305=y -CONFIG_CRYPTO_LIB_CHACHA20POLY1305=y -CONFIG_CRYPTO_LIB_SHA1=y -CONFIG_CRYPTO_LIB_SHA256=y -# end of Crypto library routines - -# CONFIG_CRC_CCITT is not set -CONFIG_CRC16=y -CONFIG_CRC_T10DIF=y -CONFIG_CRC64_ROCKSOFT=y -CONFIG_CRC_ITU_T=y -CONFIG_CRC32=y -# CONFIG_CRC32_SELFTEST is not set -CONFIG_CRC32_SLICEBY8=y -# CONFIG_CRC32_SLICEBY4 is not set -# CONFIG_CRC32_SARWATE is not set -# CONFIG_CRC32_BIT is not set -CONFIG_CRC64=y -# CONFIG_CRC4 is not set -CONFIG_CRC7=y -CONFIG_LIBCRC32C=y -CONFIG_CRC8=y -CONFIG_XXHASH=y -CONFIG_AUDIT_GENERIC=y -# CONFIG_RANDOM32_SELFTEST is not set -CONFIG_842_COMPRESS=y -CONFIG_842_DECOMPRESS=y -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y -CONFIG_LZO_COMPRESS=y -CONFIG_LZO_DECOMPRESS=y -CONFIG_LZ4_COMPRESS=y -CONFIG_LZ4HC_COMPRESS=y -CONFIG_LZ4_DECOMPRESS=y -CONFIG_ZSTD_COMMON=y -CONFIG_ZSTD_COMPRESS=y -CONFIG_ZSTD_DECOMPRESS=y -CONFIG_XZ_DEC=y -CONFIG_XZ_DEC_X86=y -CONFIG_XZ_DEC_POWERPC=y -CONFIG_XZ_DEC_IA64=y -CONFIG_XZ_DEC_ARM=y -CONFIG_XZ_DEC_ARMTHUMB=y -CONFIG_XZ_DEC_SPARC=y -# CONFIG_XZ_DEC_MICROLZMA is not set -CONFIG_XZ_DEC_BCJ=y -# CONFIG_XZ_DEC_TEST is not set -CONFIG_DECOMPRESS_GZIP=y -CONFIG_DECOMPRESS_BZIP2=y -CONFIG_DECOMPRESS_LZMA=y -CONFIG_DECOMPRESS_XZ=y -CONFIG_DECOMPRESS_LZO=y -CONFIG_DECOMPRESS_LZ4=y -CONFIG_DECOMPRESS_ZSTD=y -CONFIG_GENERIC_ALLOCATOR=y -CONFIG_XARRAY_MULTI=y -CONFIG_ASSOCIATIVE_ARRAY=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAS_IOPORT_MAP=y -CONFIG_HAS_DMA=y -CONFIG_NEED_DMA_MAP_STATE=y -CONFIG_ARCH_DMA_ADDR_T_64BIT=y -CONFIG_DMA_DECLARE_COHERENT=y -CONFIG_ARCH_HAS_SETUP_DMA_OPS=y -CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y -CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU=y -CONFIG_ARCH_HAS_DMA_PREP_COHERENT=y -CONFIG_ARCH_DMA_DEFAULT_COHERENT=y -CONFIG_SWIOTLB=y -# CONFIG_DMA_RESTRICTED_POOL is not set -CONFIG_DMA_NONCOHERENT_MMAP=y -CONFIG_DMA_COHERENT_POOL=y -CONFIG_DMA_DIRECT_REMAP=y -CONFIG_DMA_CMA=y -# CONFIG_DMA_PERNUMA_CMA is not set - -# -# Default contiguous memory area size: -# -CONFIG_CMA_SIZE_MBYTES=16 -CONFIG_CMA_SIZE_SEL_MBYTES=y -# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set -# CONFIG_CMA_SIZE_SEL_MIN is not set -# CONFIG_CMA_SIZE_SEL_MAX is not set -CONFIG_CMA_ALIGNMENT=8 -# CONFIG_DMA_API_DEBUG is not set -# CONFIG_DMA_MAP_BENCHMARK is not set -CONFIG_SGL_ALLOC=y -# CONFIG_CPUMASK_OFFSTACK is not set -# CONFIG_FORCE_NR_CPUS is not set -CONFIG_CPU_RMAP=y -CONFIG_DQL=y -CONFIG_GLOB=y -# CONFIG_GLOB_SELFTEST is not set -CONFIG_NLATTR=y -CONFIG_CLZ_TAB=y -CONFIG_IRQ_POLL=y -CONFIG_MPILIB=y -CONFIG_DIMLIB=y -CONFIG_LIBFDT=y -CONFIG_OID_REGISTRY=y -CONFIG_UCS2_STRING=y -CONFIG_HAVE_GENERIC_VDSO=y -CONFIG_GENERIC_GETTIMEOFDAY=y -CONFIG_GENERIC_VDSO_TIME_NS=y -CONFIG_FONT_SUPPORT=y -CONFIG_FONTS=y -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y -# CONFIG_FONT_6x11 is not set -# CONFIG_FONT_7x14 is not set -# CONFIG_FONT_PEARL_8x8 is not set -# CONFIG_FONT_ACORN_8x8 is not set -# CONFIG_FONT_MINI_4x6 is not set -# CONFIG_FONT_6x10 is not set -# CONFIG_FONT_10x18 is not set -# CONFIG_FONT_SUN8x16 is not set -# CONFIG_FONT_SUN12x22 is not set -CONFIG_FONT_TER16x32=y -# CONFIG_FONT_6x8 is not set -CONFIG_SG_POOL=y -CONFIG_ARCH_HAS_PMEM_API=y -CONFIG_MEMREGION=y -CONFIG_ARCH_STACKWALK=y -CONFIG_STACKDEPOT=y -CONFIG_SBITMAP=y -# end of Library routines - -CONFIG_GENERIC_IOREMAP=y -CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y - -# -# Kernel hacking -# - -# -# printk and dmesg options -# -CONFIG_PRINTK_TIME=y -# CONFIG_PRINTK_CALLER is not set -# CONFIG_STACKTRACE_BUILD_ID is not set -CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 -CONFIG_CONSOLE_LOGLEVEL_QUIET=4 -CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 -# CONFIG_BOOT_PRINTK_DELAY is not set -CONFIG_DYNAMIC_DEBUG=y -CONFIG_DYNAMIC_DEBUG_CORE=y -CONFIG_SYMBOLIC_ERRNAME=y -CONFIG_DEBUG_BUGVERBOSE=y -# end of printk and dmesg options - -CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_MISC=y - -# -# Compile-time checks and compiler options -# -CONFIG_DEBUG_INFO=y -# CONFIG_DEBUG_INFO_NONE is not set -CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y -# CONFIG_DEBUG_INFO_DWARF4 is not set -# CONFIG_DEBUG_INFO_DWARF5 is not set -# CONFIG_DEBUG_INFO_REDUCED is not set -CONFIG_DEBUG_INFO_COMPRESSED_NONE=y -# CONFIG_DEBUG_INFO_COMPRESSED_ZLIB is not set -CONFIG_DEBUG_INFO_BTF=y -CONFIG_GDB_SCRIPTS=y -CONFIG_FRAME_WARN=2048 -# CONFIG_STRIP_ASM_SYMS is not set -# CONFIG_READABLE_ASM is not set -# CONFIG_HEADERS_INSTALL is not set -# CONFIG_DEBUG_SECTION_MISMATCH is not set -CONFIG_SECTION_MISMATCH_WARN_ONLY=y -CONFIG_ARCH_WANT_FRAME_POINTERS=y -CONFIG_FRAME_POINTER=y -# CONFIG_VMLINUX_MAP is not set -# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set -# end of Compile-time checks and compiler options - -# -# Generic Kernel Debugging Instruments -# -# CONFIG_MAGIC_SYSRQ is not set -CONFIG_DEBUG_FS=y -CONFIG_DEBUG_FS_ALLOW_ALL=y -# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set -# CONFIG_DEBUG_FS_ALLOW_NONE is not set -CONFIG_HAVE_ARCH_KGDB=y -CONFIG_HAVE_ARCH_KGDB_QXFER_PKT=y -# CONFIG_KGDB is not set -CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y -# CONFIG_UBSAN is not set -CONFIG_HAVE_KCSAN_COMPILER=y -# end of Generic Kernel Debugging Instruments - -# -# Networking Debugging -# -# CONFIG_NET_DEV_REFCNT_TRACKER is not set -# CONFIG_NET_NS_REFCNT_TRACKER is not set -# CONFIG_DEBUG_NET is not set -# end of Networking Debugging - -# -# Memory Debugging -# -# CONFIG_PAGE_EXTENSION is not set -CONFIG_DEBUG_PAGEALLOC=y -# CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT is not set -CONFIG_SLUB_DEBUG=y -# CONFIG_SLUB_DEBUG_ON is not set -# CONFIG_PAGE_OWNER is not set -# CONFIG_PAGE_TABLE_CHECK is not set -# CONFIG_PAGE_POISONING is not set -# CONFIG_DEBUG_PAGE_REF is not set -# CONFIG_DEBUG_RODATA_TEST is not set -CONFIG_ARCH_HAS_DEBUG_WX=y -# CONFIG_DEBUG_WX is not set -CONFIG_GENERIC_PTDUMP=y -# CONFIG_PTDUMP_DEBUGFS is not set -CONFIG_HAVE_DEBUG_KMEMLEAK=y -# CONFIG_DEBUG_KMEMLEAK is not set -# CONFIG_DEBUG_OBJECTS is not set -# CONFIG_SHRINKER_DEBUG is not set -# CONFIG_DEBUG_STACK_USAGE is not set -CONFIG_SCHED_STACK_END_CHECK=y -CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y -CONFIG_DEBUG_VM_IRQSOFF=y -CONFIG_DEBUG_VM=y -# CONFIG_DEBUG_VM_MAPLE_TREE is not set -# CONFIG_DEBUG_VM_RB is not set -CONFIG_DEBUG_VM_PGFLAGS=y -CONFIG_DEBUG_VM_PGTABLE=y -CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y -# CONFIG_DEBUG_VIRTUAL is not set -CONFIG_DEBUG_MEMORY_INIT=y -CONFIG_DEBUG_PER_CPU_MAPS=y -CONFIG_HAVE_ARCH_KASAN=y -CONFIG_HAVE_ARCH_KASAN_VMALLOC=y -CONFIG_CC_HAS_KASAN_GENERIC=y -CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y -# CONFIG_KASAN is not set -CONFIG_HAVE_ARCH_KFENCE=y -# CONFIG_KFENCE is not set -# end of Memory Debugging - -# CONFIG_DEBUG_SHIRQ is not set - -# -# Debug Oops, Lockups and Hangs -# -# CONFIG_PANIC_ON_OOPS is not set -CONFIG_PANIC_ON_OOPS_VALUE=0 -CONFIG_PANIC_TIMEOUT=0 -CONFIG_LOCKUP_DETECTOR=y -CONFIG_SOFTLOCKUP_DETECTOR=y -# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set -CONFIG_DETECT_HUNG_TASK=y -CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 -# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set -CONFIG_WQ_WATCHDOG=y -# CONFIG_TEST_LOCKUP is not set -# end of Debug Oops, Lockups and Hangs - -# -# Scheduler Debugging -# -CONFIG_SCHED_DEBUG=y -CONFIG_SCHED_INFO=y -# CONFIG_SCHEDSTATS is not set -# end of Scheduler Debugging - -CONFIG_DEBUG_TIMEKEEPING=y - -# -# Lock Debugging (spinlocks, mutexes, etc...) -# -CONFIG_LOCK_DEBUGGING_SUPPORT=y -# CONFIG_PROVE_LOCKING is not set -# CONFIG_LOCK_STAT is not set -CONFIG_DEBUG_RT_MUTEXES=y -CONFIG_DEBUG_SPINLOCK=y -CONFIG_DEBUG_MUTEXES=y -# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set -CONFIG_DEBUG_RWSEMS=y -# CONFIG_DEBUG_LOCK_ALLOC is not set -CONFIG_DEBUG_ATOMIC_SLEEP=y -# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -# CONFIG_LOCK_TORTURE_TEST is not set -# CONFIG_WW_MUTEX_SELFTEST is not set -# CONFIG_SCF_TORTURE_TEST is not set -# CONFIG_CSD_LOCK_WAIT_DEBUG is not set -# end of Lock Debugging (spinlocks, mutexes, etc...) - -# CONFIG_DEBUG_IRQFLAGS is not set -CONFIG_STACKTRACE=y -# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set -# CONFIG_DEBUG_KOBJECT is not set - -# -# Debug kernel data structures -# -CONFIG_DEBUG_LIST=y -CONFIG_DEBUG_PLIST=y -CONFIG_DEBUG_SG=y -# CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BUG_ON_DATA_CORRUPTION is not set -# CONFIG_DEBUG_MAPLE_TREE is not set -# end of Debug kernel data structures - -# CONFIG_DEBUG_CREDENTIALS is not set - -# -# RCU Debugging -# -# CONFIG_RCU_SCALE_TEST is not set -# CONFIG_RCU_TORTURE_TEST is not set -# CONFIG_RCU_REF_SCALE_TEST is not set -CONFIG_RCU_CPU_STALL_TIMEOUT=21 -CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0 -# CONFIG_RCU_CPU_STALL_CPUTIME is not set -# CONFIG_RCU_TRACE is not set -CONFIG_RCU_EQS_DEBUG=y -# end of RCU Debugging - -# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set -# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set -# CONFIG_LATENCYTOP is not set -# CONFIG_DEBUG_CGROUP_REF is not set -CONFIG_NOP_TRACER=y -CONFIG_HAVE_RETHOOK=y -CONFIG_RETHOOK=y -CONFIG_HAVE_FUNCTION_TRACER=y -CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y -CONFIG_HAVE_DYNAMIC_FTRACE=y -CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y -CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y -CONFIG_HAVE_SYSCALL_TRACEPOINTS=y -CONFIG_TRACER_MAX_TRACE=y -CONFIG_TRACE_CLOCK=y -CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y -CONFIG_TRACING=y -CONFIG_GENERIC_TRACER=y -CONFIG_TRACING_SUPPORT=y -CONFIG_FTRACE=y -# CONFIG_BOOTTIME_TRACING is not set -CONFIG_FUNCTION_TRACER=y -CONFIG_FUNCTION_GRAPH_TRACER=y -CONFIG_DYNAMIC_FTRACE=y -CONFIG_DYNAMIC_FTRACE_WITH_REGS=y -# CONFIG_FPROBE is not set -CONFIG_FUNCTION_PROFILER=y -CONFIG_STACK_TRACER=y -# CONFIG_IRQSOFF_TRACER is not set -CONFIG_SCHED_TRACER=y -# CONFIG_HWLAT_TRACER is not set -# CONFIG_OSNOISE_TRACER is not set -# CONFIG_TIMERLAT_TRACER is not set -CONFIG_FTRACE_SYSCALLS=y -CONFIG_TRACER_SNAPSHOT=y -# CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP is not set -CONFIG_BRANCH_PROFILE_NONE=y -# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -CONFIG_KPROBE_EVENTS=y -# CONFIG_KPROBE_EVENTS_ON_NOTRACE is not set -CONFIG_UPROBE_EVENTS=y -CONFIG_BPF_EVENTS=y -CONFIG_DYNAMIC_EVENTS=y -CONFIG_PROBE_EVENTS=y -CONFIG_FTRACE_MCOUNT_RECORD=y -CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT=y -# CONFIG_SYNTH_EVENTS is not set -# CONFIG_USER_EVENTS is not set -# CONFIG_TRACE_EVENT_INJECT is not set -# CONFIG_TRACEPOINT_BENCHMARK is not set -# CONFIG_RING_BUFFER_BENCHMARK is not set -# CONFIG_TRACE_EVAL_MAP_FILE is not set -# CONFIG_FTRACE_RECORD_RECURSION is not set -# CONFIG_FTRACE_STARTUP_TEST is not set -# CONFIG_RING_BUFFER_STARTUP_TEST is not set -# CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS is not set -# CONFIG_PREEMPTIRQ_DELAY_TEST is not set -# CONFIG_KPROBE_EVENT_GEN_TEST is not set -# CONFIG_RV is not set -# CONFIG_SAMPLES is not set -CONFIG_STRICT_DEVMEM=y -CONFIG_IO_STRICT_DEVMEM=y - -# -# riscv Debugging -# -# end of riscv Debugging - -# -# Kernel Testing and Coverage -# -# CONFIG_KUNIT is not set -# CONFIG_NOTIFIER_ERROR_INJECTION is not set -# CONFIG_FUNCTION_ERROR_INJECTION is not set -# CONFIG_FAULT_INJECTION is not set -CONFIG_ARCH_HAS_KCOV=y -CONFIG_CC_HAS_SANCOV_TRACE_PC=y -# CONFIG_KCOV is not set -# CONFIG_RUNTIME_TESTING_MENU is not set -CONFIG_ARCH_USE_MEMTEST=y -CONFIG_MEMTEST=y -# end of Kernel Testing and Coverage - -# -# Rust hacking -# -# end of Rust hacking -# end of Kernel hacking diff --git a/packages/matrix/matrix-media-repo/0001-Make-using-MD5-hashing-a-config-option-on-the-datast.patch b/packages/matrix/matrix-media-repo/0001-Make-using-MD5-hashing-a-config-option-on-the-datast.patch deleted file mode 100644 index e4f1cc52..00000000 --- a/packages/matrix/matrix-media-repo/0001-Make-using-MD5-hashing-a-config-option-on-the-datast.patch +++ /dev/null @@ -1,86 +0,0 @@ -From b740c2f77c7e3b10ff77ebade90afa58f79f6267 Mon Sep 17 00:00:00 2001 -From: Travis Ralston -Date: Sat, 10 Jun 2023 15:04:48 -0600 -Subject: [PATCH] Make using MD5 hashing a config option on the datastore - ---- - config.sample.yaml | 4 ++++ - datastores/s3.go | 8 ++++++++ - datastores/upload.go | 6 +++++- - 3 files changed, 17 insertions(+), 1 deletion(-) - -diff --git a/config.sample.yaml b/config.sample.yaml -index d0d9543..24774b7 100644 ---- a/config.sample.yaml -+++ b/config.sample.yaml -@@ -191,6 +191,10 @@ datastores: - # An optional storage class for tuning how the media is stored at s3. - # See https://aws.amazon.com/s3/storage-classes/ for details; uncomment to use. - #storageClass: STANDARD -+ # If you're seeing errors relating to 'z-amz-checksum-algorithm CRC32C not implemented', -+ # set this to `true`. This will reduce performance, but will allow uploads to be possible. -+ # It is common that you need to enable this with Backblaze B2 and CloudFlare R2. -+ useMD5: false - - # Options for controlling archives. Archives are exports of a particular user's content for - # the purpose of GDPR or moving media to a different server. -diff --git a/datastores/s3.go b/datastores/s3.go -index 0517188..828f6e5 100644 ---- a/datastores/s3.go -+++ b/datastores/s3.go -@@ -19,6 +19,7 @@ type s3 struct { - client *minio.Client - storageClass string - bucket string -+ putWithMd5 bool - } - - func ResetS3Clients() { -@@ -37,6 +38,7 @@ func getS3(ds config.DatastoreConfig) (*s3, error) { - region := ds.Options["region"] - storageClass, hasStorageClass := ds.Options["storageClass"] - useSslStr, hasSsl := ds.Options["ssl"] -+ useMd5Str, hasMd5 := ds.Options["useMD5"] - - if !hasStorageClass { - storageClass = "STANDARD" -@@ -47,6 +49,11 @@ func getS3(ds config.DatastoreConfig) (*s3, error) { - useSsl, _ = strconv.ParseBool(useSslStr) - } - -+ useMd5 := false -+ if hasMd5 && useMd5Str != "" { -+ useMd5, _ = strconv.ParseBool(useMd5Str) -+ } -+ - var err error - var client *minio.Client - client, err = minio.New(endpoint, &minio.Options{ -@@ -62,6 +69,7 @@ func getS3(ds config.DatastoreConfig) (*s3, error) { - client: client, - storageClass: storageClass, - bucket: bucket, -+ putWithMd5: useMd5, - } - s3clients.Store(ds.Id, s3c) - return s3c, nil -diff --git a/datastores/upload.go b/datastores/upload.go -index a06bc0e..f011752 100644 ---- a/datastores/upload.go -+++ b/datastores/upload.go -@@ -40,7 +40,11 @@ func Upload(ctx rcontext.RequestContext, ds config.DatastoreConfig, data io.Read - - metrics.S3Operations.With(prometheus.Labels{"operation": "PutObject"}).Inc() - var info minio.UploadInfo -- info, err = s3c.client.PutObject(ctx.Context, s3c.bucket, objectName, tee, size, minio.PutObjectOptions{StorageClass: s3c.storageClass, ContentType: contentType}) -+ info, err = s3c.client.PutObject(ctx.Context, s3c.bucket, objectName, tee, size, minio.PutObjectOptions{ -+ StorageClass: s3c.storageClass, -+ ContentType: contentType, -+ SendContentMd5: s3c.putWithMd5, -+ }) - uploadedBytes = info.Size - } else if ds.Type == "file" { - basePath := ds.Options["path"] --- -2.41.0 - diff --git a/packages/matrix/matrix-media-repo/default.nix b/packages/matrix/matrix-media-repo/default.nix deleted file mode 100644 index 0423d12c..00000000 --- a/packages/matrix/matrix-media-repo/default.nix +++ /dev/null @@ -1,68 +0,0 @@ -{ - buildGoApplication, - git, - fetchFromGitHub, - lib, - writeScript, - libde265, - libheif, - pkg-config, - cmake, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); - libheif' = libheif.overrideAttrs (super: rec { - version = "1.17.1"; - src = fetchFromGitHub { - owner = "strukturag"; - repo = "libheif"; - rev = "v${version}"; - sha256 = "sha256-PI55VdNsJUpomdFlVOzD9ha1b+0MoxOPnM0KASRH2rI="; - }; - nativeBuildInputs = [cmake pkg-config]; - }); -in - buildGoApplication rec { - pname = "matrix-media-repo"; - version = source.date; - src = fetchFromGitHub { - owner = "turt2live"; - repo = "matrix-media-repo"; - inherit (source) rev sha256; - }; - modules = ./gomod2nix.toml; - nativeBuildInputs = [ - git - pkg-config - ]; - buildInputs = [ - libde265 - libheif' - ]; - CGO_ENABLED = "1"; - buildPhase = '' - GOBIN=$PWD/bin go install -v ./cmd/utilities/compile_assets - $PWD/bin/compile_assets - GOBIN=$PWD/bin go install -ldflags "-X github.com/turt2live/matrix-media-repo/common/version.GitCommit=$(git rev-list -1 HEAD) -X github.com/turt2live/matrix-media-repo/common/version.Version=${version}" -v ./cmd/... - ''; - installPhase = '' - mkdir $out - cp -rv bin $out - ''; - meta = { - description = "Matrix media repository with multi-domain in mind."; - license = lib.licenses.mit; - }; - postConfigure = '' - chmod -R +w vendor/ - for f in vendor/golang.org/x/net/publicsuffix/data/* vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb; do - cp -v --remove-destination -f `readlink $f` $f - done - ''; - passthru.updateScript = writeScript "update-matrix-media-repo" '' - ${../../scripts/update-git.sh} "https://github.com/turt2live/matrix-media-repo" matrix/matrix-media-repo/source.json - if [ "$(git diff -- matrix/matrix-media-repo/source.json)" ]; then - SRC_PATH=$(nix-build -E '(import ../.).packages.x86_64-linux.${pname}.src') - ${../../scripts/update-go.sh} $SRC_PATH matrix/matrix-media-repo/ - fi - ''; - } diff --git a/packages/matrix/matrix-media-repo/gomod2nix.toml b/packages/matrix/matrix-media-repo/gomod2nix.toml deleted file mode 100644 index 4e7c3b82..00000000 --- a/packages/matrix/matrix-media-repo/gomod2nix.toml +++ /dev/null @@ -1,468 +0,0 @@ -schema = 3 - -[mod] - [mod."dario.cat/mergo"] - version = "v1.0.0" - hash = "sha256-jlpc8dDj+DmiOU4gEawBu8poJJj9My0s9Mvuk9oS8ww=" - [mod."github.com/Azure/go-ansiterm"] - version = "v0.0.0-20230124172434-306776ec8161" - hash = "sha256-17hCoOE3HBv6cjpcukfBS6/ULgTuoUZ7RNbi5korH2M=" - [mod."github.com/DavidHuie/gomigrate"] - version = "v0.0.0-20190826182718-4adc4b3de142" - hash = "sha256-TprT0kezFl+AbDaMvZOeQMNvCyG+5RtRnMGUk4ZUdtk=" - [mod."github.com/Jeffail/gabs"] - version = "v1.4.0" - hash = "sha256-Za8Lg0vfQPmuwzu1pUWFwqIoKuHM6TDt1Pe37i4ZOZU=" - [mod."github.com/Microsoft/go-winio"] - version = "v0.6.1" - hash = "sha256-BL0BVaHtmPKQts/711W59AbHXjGKqFS4ZTal0RYnR9I=" - [mod."github.com/Microsoft/hcsshim"] - version = "v0.12.0" - hash = "sha256-8pFJqSs8QS7XQHBJCSZz2/vBPD6EHhiejU6GT4h9jiU=" - [mod."github.com/PuerkitoBio/goquery"] - version = "v1.9.1" - hash = "sha256-HlO8KL0FWs7qZk56wcVAn/y080PfK910HyIVo9y9lvM=" - [mod."github.com/ajstarks/svgo"] - version = "v0.0.0-20211024235047-1546f124cd8b" - hash = "sha256-sPwt5sImKFk949TzUeYEF2UiJDqHxXFJKRL2Y7JWJ6Y=" - [mod."github.com/alioygur/is"] - version = "v1.0.3" - hash = "sha256-PDROYkpqujdG0e3yz1xhuSnjP8+U9K46xzBrm41wG6o=" - [mod."github.com/andybalholm/cascadia"] - version = "v1.3.2" - hash = "sha256-Nc9SkqJO/ecincVcUBFITy24TMmMGj5o0Q8EgdNhrEk=" - [mod."github.com/beorn7/perks"] - version = "v1.0.1" - hash = "sha256-h75GUqfwJKngCJQVE5Ao5wnO3cfKD9lSIteoLp/3xJ4=" - [mod."github.com/bep/debounce"] - version = "v1.2.1" - hash = "sha256-7qHOp4vB0ifEseXXBuSH6W5YNImVcb8PTWSJJAMaGcU=" - [mod."github.com/bwmarrin/snowflake"] - version = "v0.3.0" - hash = "sha256-mOU/CgyC9W8XwuinYTPOH69wJY/f+nFVZjZ8lAr9fGM=" - [mod."github.com/cenk/backoff"] - version = "v2.2.1+incompatible" - hash = "sha256-aMpsIH8tC5An/Ldb4yTweEbi/4e5gi7InGitPKimxNU=" - [mod."github.com/cenkalti/backoff/v4"] - version = "v4.2.1" - hash = "sha256-CKogmPe0pCcAdpztzPwr24rLTJZfq8QVZ9AUduwAcoA=" - [mod."github.com/cespare/xxhash/v2"] - version = "v2.2.0" - hash = "sha256-nPufwYQfTkyrEkbBrpqM3C2vnMxfIz6tAaBmiUP7vd4=" - [mod."github.com/containerd/containerd"] - version = "v1.7.14" - hash = "sha256-yRWQbpmz5RSNwGvjRhHCKwIHRDlp8QoPvPafogJAz1U=" - [mod."github.com/containerd/log"] - version = "v0.1.0" - hash = "sha256-vuE6Mie2gSxiN3jTKTZovjcbdBd1YEExb7IBe3GM+9s=" - [mod."github.com/cpuguy83/dockercfg"] - version = "v0.3.1" - hash = "sha256-ILY8MBdfgIZtuSIGEeXFRiVSDAOLAhdGqr9uq0KSiVk=" - [mod."github.com/cupcake/sigil"] - version = "v0.0.0-20131127230922-6bf9722f2ae8" - hash = "sha256-zj78W+DugvlxoiIcjLIbKTb10ZhNz3HjBVLlqsVVWLk=" - [mod."github.com/davecgh/go-spew"] - version = "v1.1.1" - hash = "sha256-nhzSUrE1fCkN0+RL04N4h8jWmRFPPPWbCuDc7Ss0akI=" - [mod."github.com/dgryski/go-rendezvous"] - version = "v0.0.0-20200823014737-9f7001d12a5f" - hash = "sha256-n/7xo5CQqo4yLaWMSzSN1Muk/oqK6O5dgDOFWapeDUI=" - [mod."github.com/dhowden/tag"] - version = "v0.0.0-20240122214204-713ab0e94639" - hash = "sha256-cQNx4FRvrZTJ1mq3OJtN00Fdlv2hiroSuPHLLEu3rUQ=" - [mod."github.com/didip/tollbooth/v7"] - version = "v7.0.1" - hash = "sha256-VGKzBq96q7Qpmy4jDR8oGhuwMuCK5Zgf3JuLyyRJfwg=" - [mod."github.com/disintegration/imaging"] - version = "v1.6.2" - hash = "sha256-pSeMTPvSkxlthh65LjNYYhPLvCZDkBgVgAGYWW0Aguo=" - [mod."github.com/distribution/reference"] - version = "v0.5.0" - hash = "sha256-nTlqurp/J/xOZeR0JcJMmE4GUHMMd5I+EOR7huzYuok=" - [mod."github.com/docker/docker"] - version = "v25.0.5+incompatible" - hash = "sha256-siBpZk4x5OATrxxp1cFeFX52EDqg+eiJYy1dzd4L2Sw=" - [mod."github.com/docker/go-connections"] - version = "v0.5.0" - hash = "sha256-aGbMRrguh98DupIHgcpLkVUZpwycx1noQXbtTl5Sbms=" - [mod."github.com/docker/go-units"] - version = "v0.5.0" - hash = "sha256-iK/V/jJc+borzqMeqLY+38Qcts2KhywpsTk95++hImE=" - [mod."github.com/dsoprea/go-exif/v3"] - version = "v3.0.1" - hash = "sha256-Gt1LFNs82CNulAZm5vJB2Evp6cBctPfL4eb1UaboR38=" - [mod."github.com/dsoprea/go-logging"] - version = "v0.0.0-20200710184922-b02d349568dd" - hash = "sha256-qc4Nzj7uHl5VRc5Q+iXVCjOmfDQl5wIoiuJKque5jCY=" - [mod."github.com/dsoprea/go-utility/v2"] - version = "v2.0.0-20221003172846-a3e1774ef349" - hash = "sha256-s40UVM7/Y7zosud6xvWDRyBEqj1F4fJzSyABdTzK1iE=" - [mod."github.com/dustin/go-humanize"] - version = "v1.0.1" - hash = "sha256-yuvxYYngpfVkUg9yAmG99IUVmADTQA0tMbBXe0Fq0Mc=" - [mod."github.com/dyatlov/go-oembed"] - version = "v0.0.0-20191103150536-a57c85b3b37c" - hash = "sha256-QX3b7h0mkslDh5QtUU1ZS6f1YH9lGEjz5xdxdmUb7l8=" - [mod."github.com/dyatlov/go-opengraph/opengraph"] - version = "v0.0.0-20220524092352-606d7b1e5f8a" - hash = "sha256-Cxi9BjtsbWDh5WIRZ3zdqIJrpmDHydnYRRJOYYPjIGI=" - [mod."github.com/facebookgo/clock"] - version = "v0.0.0-20150410010913-600d898af40a" - hash = "sha256-Qh3po2B69wTmUwMS8QcJ3Lz3GpGlN5YPjcVQijXvcvw=" - [mod."github.com/faiface/beep"] - version = "v1.1.0" - hash = "sha256-66qAbnJjUjhXofxlGCa6G1+vjQcSTyN/POCZvYzHaQo=" - [mod."github.com/fastly/go-utils"] - version = "v0.0.0-20180712184237-d95a45783239" - hash = "sha256-qB9zUQgDG7W2kvbsUSZ+Qb1Lwgd4vBSeIp0+p1JK8Yc=" - [mod."github.com/fatih/color"] - version = "v1.16.0" - hash = "sha256-Aq/SM28aPJVzvapllQ64R/DM4aZ5CHPewcm/AUJPyJQ=" - [mod."github.com/felixge/httpsnoop"] - version = "v1.0.4" - hash = "sha256-c1JKoRSndwwOyOxq9ddCe+8qn7mG9uRq2o/822x5O/c=" - [mod."github.com/fogleman/gg"] - version = "v1.3.0" - hash = "sha256-Fs2JI0FmF4N5EzXJzGAPZMxZxo6wKyebkN/iBZ9sdNo=" - [mod."github.com/fsnotify/fsnotify"] - version = "v1.7.0" - hash = "sha256-MdT2rQyQHspPJcx6n9ozkLbsktIOJutOqDuKpNAtoZY=" - [mod."github.com/gabriel-vasile/mimetype"] - version = "v1.4.3" - hash = "sha256-EDmlRi3av27dq/ISVTglv08z4yZzMQ/SxL1c46EJro0=" - [mod."github.com/getsentry/sentry-go"] - version = "v0.27.0" - hash = "sha256-PTkTzVNogqFA/5rc6INLY6RxK5uR1AoJFOO+pOPdE7Q=" - [mod."github.com/go-errors/errors"] - version = "v1.5.1" - hash = "sha256-K/IEfka2mbBk6b0AbiMaxpvkY1pZgzhtT6knqoDovPk=" - [mod."github.com/go-logr/logr"] - version = "v1.4.1" - hash = "sha256-WM4badoqxXlBmqCRrnmtNce63dLlr/FJav3BJSYHvaY=" - [mod."github.com/go-logr/stdr"] - version = "v1.2.2" - hash = "sha256-rRweAP7XIb4egtT1f2gkz4sYOu7LDHmcJ5iNsJUd0sE=" - [mod."github.com/go-ole/go-ole"] - version = "v1.3.0" - hash = "sha256-tF8t3VcV71jQ4jbPL91BwR59AKDpUAFV1waIKzkXJu8=" - [mod."github.com/go-pkgz/expirable-cache"] - version = "v1.0.0" - hash = "sha256-e1PBkaXXJywYtj3lYSAU6oiYe85OT8c1P4eST8koehg=" - [mod."github.com/go-redsync/redsync/v4"] - version = "v4.12.1" - hash = "sha256-gDOECeFYQdXGc4bNcloBTi1Chsz4uwxbAqUZhXUjoJk=" - [mod."github.com/go-sql-driver/mysql"] - version = "v1.5.0" - hash = "sha256-DDpwoQ/rAo3Eml3IZYZBu/2ohtGsAPBnxQsuZiKV4BU=" - [mod."github.com/gogo/protobuf"] - version = "v1.3.2" - hash = "sha256-pogILFrrk+cAtb0ulqn9+gRZJ7sGnnLLdtqITvxvG6c=" - [mod."github.com/golang/freetype"] - version = "v0.0.0-20170609003504-e2365dfdc4a0" - hash = "sha256-AHAFBd20/tqxohkWyQkui2bUef9i1HWYgk9LOIFErvA=" - [mod."github.com/golang/geo"] - version = "v0.0.0-20230421003525-6adc56603217" - hash = "sha256-j4EFdpNjnCIRM9fFx4zUUipzSdvdAHnC/wmevliJirU=" - [mod."github.com/golang/protobuf"] - version = "v1.5.4" - hash = "sha256-N3+Lv9lEZjrdOWdQhFj6Y3Iap4rVLEQeI8/eFFyAMZ0=" - [mod."github.com/google/uuid"] - version = "v1.6.0" - hash = "sha256-VWl9sqUzdOuhW0KzQlv0gwwUQClYkmZwSydHG2sALYw=" - [mod."github.com/gopherjs/gopherjs"] - version = "v0.0.0-20190430165422-3e4dfb77656c" - hash = "sha256-kbuMirhXODg0AZZWX4Nlp4VNnD5nNAHa0cX5XNpMbq8=" - [mod."github.com/hajimehoshi/go-mp3"] - version = "v0.3.4" - hash = "sha256-h6l0PuIS0h1zdB8MEqHTTgg8dE6nL6PSOt583ymaPnA=" - [mod."github.com/hashicorp/errwrap"] - version = "v1.1.0" - hash = "sha256-6lwuMQOfBq+McrViN3maJTIeh4f8jbEqvLy2c9FvvFw=" - [mod."github.com/hashicorp/go-hclog"] - version = "v1.6.2" - hash = "sha256-cGlKyuctpU6Jd+L1ybCoJrBwnBlHXks4CQYkTQMCxDU=" - [mod."github.com/hashicorp/go-multierror"] - version = "v1.1.1" - hash = "sha256-ANzPEUJIZIlToxR89Mn7Db73d9LGI51ssy7eNnUgmlA=" - [mod."github.com/hashicorp/go-plugin"] - version = "v1.6.0" - hash = "sha256-NeY86Z+qJwt0NPV4cNmWDiTryDPSiyKMkS1ivRX9ThE=" - [mod."github.com/hashicorp/yamux"] - version = "v0.1.1" - hash = "sha256-jr4ZFM3XHSwGoZcRcmmdGTq4IqxBTnimojIPDgK0USU=" - [mod."github.com/icza/bitio"] - version = "v1.1.0" - hash = "sha256-CtV/dr1L46cZ65EnK9DrBduZCaMnTGf4N2MnElCymtM=" - [mod."github.com/jehiah/go-strftime"] - version = "v0.0.0-20171201141054-1d33003b3869" - hash = "sha256-+4WOjV+F2BXgKmdfYvuSkfQAKOZlFo8eZrnCT+xT3xQ=" - [mod."github.com/jfreymuth/oggvorbis"] - version = "v1.0.5" - hash = "sha256-jphTCaPr34ZT9Id4ZZ6zU9Vnxzy6cTjCwjpQ819eGV0=" - [mod."github.com/jfreymuth/vorbis"] - version = "v1.0.2" - hash = "sha256-gVS+/PZ5pDnswpTQNZILcrx5ZNq9ShXd6vXn7Jabes4=" - [mod."github.com/jonboulle/clockwork"] - version = "v0.1.0" - hash = "sha256-dEV9aGzJRIrYfPpuJux3guJNvZGi+5dfseGurZqGHd8=" - [mod."github.com/json-iterator/go"] - version = "v1.1.12" - hash = "sha256-To8A0h+lbfZ/6zM+2PpRpY3+L6725OPC66lffq6fUoM=" - [mod."github.com/julienschmidt/httprouter"] - version = "v1.3.0" - hash = "sha256-YVbnyFLVZX1mtqcwM1SStQdhcQsPHyi1ltpOrD3w2qg=" - [mod."github.com/k3a/html2text"] - version = "v1.2.1" - hash = "sha256-6raeYlNE68D/vEX7m6wurFrTIRPaj+SOoqo57NOQLl0=" - [mod."github.com/kettek/apng"] - version = "v0.0.0-20220823221153-ff692776a607" - hash = "sha256-VuxcQDPJsmSpueFu9ECqG/EIr29eDALA1iRpl2pquzI=" - [mod."github.com/klauspost/compress"] - version = "v1.17.7" - hash = "sha256-UkW+tAFEZYj067z9gXDQjQx0dCF8noCn5OSw/APh4oo=" - [mod."github.com/klauspost/cpuid/v2"] - version = "v2.2.7" - hash = "sha256-bjinp7b7qWk+DcZDDv1EedJxZqGxp2NWY+NYKBfE5xU=" - [mod."github.com/lestrrat/go-envload"] - version = "v0.0.0-20180220120943-6ed08b54a570" - hash = "sha256-O+xFK7J0d+cgv9N4pI/Nunk89FVQ3Zmywn1QfBc8pH4=" - [mod."github.com/lestrrat/go-file-rotatelogs"] - version = "v0.0.0-20180223000712-d3151e2a480f" - hash = "sha256-A89P/ThMyvrYoj7Yhq/3PG8MM7KDQE+pWf4F3WHjuoo=" - [mod."github.com/lestrrat/go-strftime"] - version = "v0.0.0-20180220042222-ba3bf9c1d042" - hash = "sha256-Wd3GYo14taUxeZbqogdt6y8aPikCTyghK20WPamH5JU=" - [mod."github.com/lib/pq"] - version = "v1.10.9" - hash = "sha256-Gl6dLtL+yk6UrTTWfas43aM4lP/pNa2l7+ITXnjQyKs=" - [mod."github.com/lufia/plan9stats"] - version = "v0.0.0-20240226150601-1dcf7310316a" - hash = "sha256-s1wt9idQj//Fo0mfoRwbD7tAhCPPmrJbO8Vexp9MhW4=" - [mod."github.com/magiconair/properties"] - version = "v1.8.7" - hash = "sha256-XQ2bnc2s7/IH3WxEO4GishZurMyKwEclZy1DXg+2xXc=" - [mod."github.com/mattn/go-colorable"] - version = "v0.1.13" - hash = "sha256-qb3Qbo0CELGRIzvw7NVM1g/aayaz4Tguppk9MD2/OI8=" - [mod."github.com/mattn/go-isatty"] - version = "v0.0.20" - hash = "sha256-qhw9hWtU5wnyFyuMbKx+7RB8ckQaFQ8D+8GKPkN3HHQ=" - [mod."github.com/mattn/go-sqlite3"] - version = "v2.0.3+incompatible" - hash = "sha256-+zdGqThUb7if9JAiO+6s6KXBeuT322JhfcityvdrxD4=" - [mod."github.com/mewkiz/flac"] - version = "v1.0.10" - hash = "sha256-u5cLPfMt32PsLATD8kCAkuKw4BRr9BjSiTj1cnnUFAI=" - [mod."github.com/mewkiz/pkg"] - version = "v0.0.0-20231012081350-95d6616c5403" - hash = "sha256-Olgc7Lx7pLw3KWfUmauDGMg2DQLaktvItInFtiP4Kak=" - [mod."github.com/minio/md5-simd"] - version = "v1.1.2" - hash = "sha256-vykcXvy2VBBAXnJott/XsGTT0gk2UL36JzZKfJ1KAUY=" - [mod."github.com/minio/minio-go/v7"] - version = "v7.0.69" - hash = "sha256-3PuCEErktMMwGHP6A6x9Ue7Z699XdK9VWG0jL90t5GM=" - [mod."github.com/minio/sha256-simd"] - version = "v1.0.1" - hash = "sha256-4hfGDIQaWq8fvtGzHDhoK9v2IocXnJY7OAL6saMJbmA=" - [mod."github.com/mitchellh/go-testing-interface"] - version = "v1.14.1" - hash = "sha256-TMGi38D13BEVN5cpeKDzKRIgLclm4ErOG+JEyqJrN/c=" - [mod."github.com/moby/patternmatcher"] - version = "v0.6.0" - hash = "sha256-ny3L8ktj8cyN41CEJhaRT74Vi8HpXXsbTvlrw/Tl5+g=" - [mod."github.com/moby/sys/sequential"] - version = "v0.5.0" - hash = "sha256-A29wOMXw/O8L5Kmu3UNb9s9go2Vya8qFEYtsYrg3Rzo=" - [mod."github.com/moby/sys/user"] - version = "v0.1.0" - hash = "sha256-ygCkKd2zLnPBrQxcq7nn1vsPx4fsWHiBauhwxK5fpc8=" - [mod."github.com/moby/term"] - version = "v0.5.0" - hash = "sha256-jy0kbkeUsr0KoiE33WLxNAgYXZIERKR2O5+saXBwdD8=" - [mod."github.com/modern-go/concurrent"] - version = "v0.0.0-20180306012644-bacd9c7ef1dd" - hash = "sha256-OTySieAgPWR4oJnlohaFTeK1tRaVp/b0d1rYY8xKMzo=" - [mod."github.com/modern-go/reflect2"] - version = "v1.0.2" - hash = "sha256-+W9EIW7okXIXjWEgOaMh58eLvBZ7OshW2EhaIpNLSBU=" - [mod."github.com/morikuni/aec"] - version = "v1.0.0" - hash = "sha256-5zYgLeGr3K+uhGKlN3xv0PO67V+2Zw+cezjzNCmAWOE=" - [mod."github.com/oklog/run"] - version = "v1.1.0" - hash = "sha256-U4IS0keJa4BSBSeEBqtIV1Zg6N4b0zFiKfzN9ua4pWQ=" - [mod."github.com/opencontainers/go-digest"] - version = "v1.0.0" - hash = "sha256-cfVDjHyWItmUGZ2dzQhCHgmOmou8v7N+itDkLZVkqkQ=" - [mod."github.com/opencontainers/image-spec"] - version = "v1.1.0" - hash = "sha256-5OxW1ShHypLpzVu+BJivNlFX2JFPh9WKfJcMIgPZf4U=" - [mod."github.com/panjf2000/ants/v2"] - version = "v2.9.0" - hash = "sha256-4jKM8nHNVMGkdcntpAFSyAeuwu4QFl+/7Sw7C6uzhj8=" - [mod."github.com/patrickmn/go-cache"] - version = "v2.1.0+incompatible" - hash = "sha256-+i3/Cd9byb1q926jszLjadiUMUeux0VyGKnmP20EAoA=" - [mod."github.com/peterbourgon/g2s"] - version = "v0.0.0-20170223122336-d4e7ad98afea" - hash = "sha256-NIVsrq1z2UEvuVTHVIptWDn0MYx4jMyk707K7QNLiq8=" - [mod."github.com/pkg/errors"] - version = "v0.9.1" - hash = "sha256-mNfQtcrQmu3sNg/7IwiieKWOgFQOVVe2yXgKBpe/wZw=" - [mod."github.com/pmezard/go-difflib"] - version = "v1.0.0" - hash = "sha256-/FtmHnaGjdvEIKAJtrUfEhV7EVo5A/eYrtdnUkuxLDA=" - [mod."github.com/power-devops/perfstat"] - version = "v0.0.0-20240221224432-82ca36839d55" - hash = "sha256-ujzuJ1ttQgjHQJEij4O/2+I8DZaUVZQCQgA4ysfqulI=" - [mod."github.com/prometheus/client_golang"] - version = "v1.19.0" - hash = "sha256-YV8sxMPR+xorTUCriTfcFsaV2b7PZfPJDQmOgUYOZJo=" - [mod."github.com/prometheus/client_model"] - version = "v0.6.0" - hash = "sha256-TAD0mm7msYHo99yoNijeYzlDD0i1Vg3uTetpkDUWQo8=" - [mod."github.com/prometheus/common"] - version = "v0.50.0" - hash = "sha256-zDhmdO4gGiyKyLuNrMnsoY3pkb9fGZIAHcjP8j26HQI=" - [mod."github.com/prometheus/procfs"] - version = "v0.13.0" - hash = "sha256-J31K36TkIiQU2EGOcmqDa+dkoKXiVuxafPVT4rKbEsg=" - [mod."github.com/redis/go-redis/v9"] - version = "v9.5.1" - hash = "sha256-X8WMgoPWQx7q+xIwlQKNueu0vHXuIj01Jv/0sHjWdZI=" - [mod."github.com/rifflock/lfshook"] - version = "v0.0.0-20180920164130-b9218ef580f5" - hash = "sha256-LHemSy/AaUcajEm9mdPjw6+nJht81dcqnYCh5ySTuHM=" - [mod."github.com/rs/xid"] - version = "v1.5.0" - hash = "sha256-u0QLm2YFMJqEjUhpWcLwfoS9lNHUxc2A79MObsqVbVU=" - [mod."github.com/rubyist/circuitbreaker"] - version = "v2.2.1+incompatible" - hash = "sha256-6qlPpfrp0grghKbwnRBh3azjyJSjS2e2FPhgz3Q76DU=" - [mod."github.com/ryanuber/go-glob"] - version = "v1.0.0" - hash = "sha256-YkMl1utwUhi3E0sHK23ISpAsPyj4+KeXyXKoFYGXGVY=" - [mod."github.com/sabhiram/go-gitignore"] - version = "v0.0.0-20210923224102-525f6e181f06" - hash = "sha256-A1aJFlcPRQvDqdJmEwpzhftR8C1Kzv1hXPszq8eO76Q=" - [mod."github.com/saintfish/chardet"] - version = "v0.0.0-20230101081208-5e3ef4b5456d" - hash = "sha256-JXlHMCbXB8iRQ9wQBGCeTjDSfgaBwUVOpvcjj0iVn5A=" - [mod."github.com/sebest/xff"] - version = "v0.0.0-20210106013422-671bd2870b3a" - hash = "sha256-t7Gdp7S71Koej5Njg3jOo5vwyj02tJCbJjrq/vZGOho=" - [mod."github.com/shirou/gopsutil/v3"] - version = "v3.24.2" - hash = "sha256-bUf1WicADBk65ijzUVJWn3LrURRYgCqgal3h+ExnjvY=" - [mod."github.com/shoenig/go-m1cpu"] - version = "v0.1.6" - hash = "sha256-hT+JP30BBllsXosK/lo89HV/uxxPLsUyO3dRaDiLnCg=" - [mod."github.com/sirupsen/logrus"] - version = "v1.9.3" - hash = "sha256-EnxsWdEUPYid+aZ9H4/iMTs1XMvCLbXZRDyvj89Ebms=" - [mod."github.com/smartystreets/assertions"] - version = "v1.0.0" - hash = "sha256-sI2UUdq1+H+rcLysKDXDeaXi1Pz+zq28d/o/mV0c2wE=" - [mod."github.com/stretchr/testify"] - version = "v1.9.0" - hash = "sha256-uUp/On+1nK+lARkTVtb5RxlW15zxtw2kaAFuIASA+J0=" - [mod."github.com/strukturag/libheif"] - version = "v1.17.6" - hash = "sha256-oNl+LgOyVpA1WxiUAE2TGQfgnHVJhbNXAIMZHjOXG3I=" - [mod."github.com/t2bot/go-leaky-bucket"] - version = "v1.0.0" - hash = "sha256-EoWDLvrjolaNtiNtloPrA2PnwKJIyS8ASe7ojuecST0=" - [mod."github.com/t2bot/go-singleflight-streams"] - version = "v1.0.0" - hash = "sha256-JJk0EpBHQZ8wYI66grgP745woDtoYwOBAqgV5WBmcgk=" - [mod."github.com/t2bot/go-typed-singleflight"] - version = "v0.0.3" - hash = "sha256-gDeRUn27fWmdPmBaVR8aly2rRmreVxmWeUM/P7N4PZI=" - [mod."github.com/t2bot/gotd-contrib"] - version = "v0.0.0-20230907202504-d21987ea2957" - hash = "sha256-UQB0iEYhOlTA0TvkZwKgYm0UKQYDqx5qlOzON4Q5tH0=" - [mod."github.com/t2bot/pgo-fleet/embedded"] - version = "v1.0.1" - hash = "sha256-UrNOX5SXttFPLdVVpzslPFBb4T+xDI359vxqsBS7TEY=" - [mod."github.com/tebeka/strftime"] - version = "v0.1.3" - hash = "sha256-ahLbzsDylxmyGMzcUGePJCCR/qjtNPDQ2R21C38ydi8=" - [mod."github.com/testcontainers/testcontainers-go"] - version = "v0.26.0" - hash = "sha256-VMCsykH8o+56NFvk8GeuS/WE+TpsK72Hpr2u6qFgHCM=" - [mod."github.com/testcontainers/testcontainers-go/modules/postgres"] - version = "v0.26.0" - hash = "sha256-K+dbXx/1ULRM4u8i8GA4RL/sDq12/wakscZLaJ87Nas=" - [mod."github.com/tklauser/go-sysconf"] - version = "v0.3.13" - hash = "sha256-qU5jDtQWJO4icuDs7KVR/CUuYEolEW3ASQhWy2yNcx8=" - [mod."github.com/tklauser/numcpus"] - version = "v0.7.0" - hash = "sha256-yLlJ1flprZ1FrsQEUXnNIeAN/bKpNTz3Fweb/AWZnPU=" - [mod."github.com/yusufpapurcu/wmi"] - version = "v1.2.4" - hash = "sha256-N+YDBjOW59YOsZ2lRBVtFsEEi48KhNQRb63/0ZSU3bA=" - [mod."go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"] - version = "v0.49.0" - hash = "sha256-1/7YxtXZM4i75rXXIO6UN4CTY93nE/v2k2htS0uUOVg=" - [mod."go.opentelemetry.io/otel"] - version = "v1.24.0" - hash = "sha256-VGyV7EqJX6mRY0Ecyg+g0IZy+dt1GES4r9txQcaTNUg=" - [mod."go.opentelemetry.io/otel/metric"] - version = "v1.24.0" - hash = "sha256-KB5UQiaVmbB2VZO3al4WHb5HY79ioWaAQjaGkUKLvP8=" - [mod."go.opentelemetry.io/otel/trace"] - version = "v1.24.0" - hash = "sha256-FHP0hg+i7+wxCsM0u/5hQcgvvr3D+lq8o/7E/HkaW4s=" - [mod."golang.org/x/crypto"] - version = "v0.23.0" - hash = "sha256-6hZjb/OazWFBef0C/aH63l49YQnzCh2vpIduzyfSSG8=" - [mod."golang.org/x/exp"] - version = "v0.0.0-20240314144324-c7f7c6466f7f" - hash = "sha256-RVQIpS6Plx4r82w39/Zn/j0vbSrqcZ3vjVzXMjh772A=" - [mod."golang.org/x/image"] - version = "v0.18.0" - hash = "sha256-g9N/y4asXG1lctPJ1KEf8XIjeJi/mQ43EXUa8HTj/zQ=" - [mod."golang.org/x/mod"] - version = "v0.17.0" - hash = "sha256-CLaPeF6uTFuRDv4oHwOQE6MCMvrzkUjWN3NuyywZjKU=" - [mod."golang.org/x/net"] - version = "v0.25.0" - hash = "sha256-IjFfXLYNj27WLF7vpkZ6mfFXBnp+7QER3OQ0RgjxN54=" - [mod."golang.org/x/sync"] - version = "v0.7.0" - hash = "sha256-2ETllEu2GDWoOd/yMkOkLC2hWBpKzbVZ8LhjLu0d2A8=" - [mod."golang.org/x/sys"] - version = "v0.20.0" - hash = "sha256-mowlaoG2k4n1c1rApWef5EMiXd3I77CsUi8jPh6pTYA=" - [mod."golang.org/x/term"] - version = "v0.20.0" - hash = "sha256-kU+OVJbYktTIn4ZTAdomsOjL069Vj45sdroEMRKaRDI=" - [mod."golang.org/x/text"] - version = "v0.16.0" - hash = "sha256-hMTO45upjEuA4sJzGplJT+La2n3oAfHccfYWZuHcH+8=" - [mod."golang.org/x/time"] - version = "v0.5.0" - hash = "sha256-W6RgwgdYTO3byIPOFxrP2IpAZdgaGowAaVfYby7AULU=" - [mod."golang.org/x/tools"] - version = "v0.21.1-0.20240508182429-e35e4ccd0d2d" - hash = "sha256-KfnS+3fREPAWQUBoUedPupQp9yLrugxMmmEoHvyzKNE=" - [mod."google.golang.org/genproto/googleapis/rpc"] - version = "v0.0.0-20240314234333-6e1732d8331c" - hash = "sha256-P5SBku16dYnK4koUQxTeGwPxAAWH8rxbDm2pOzFLo/Q=" - [mod."google.golang.org/grpc"] - version = "v1.62.1" - hash = "sha256-1su6X0YT7MUflrTJijbq1CiisADZHudEx5sJq01TEaE=" - [mod."google.golang.org/protobuf"] - version = "v1.33.0" - hash = "sha256-cWwQjtUwSIEkAlAadrlxK1PYZXTRrV4NKzt7xDpJgIU=" - [mod."gopkg.in/ini.v1"] - version = "v1.67.0" - hash = "sha256-V10ahGNGT+NLRdKUyRg1dos5RxLBXBk1xutcnquc/+4=" - [mod."gopkg.in/yaml.v2"] - version = "v2.4.0" - hash = "sha256-uVEGglIedjOIGZzHW4YwN1VoRSTK8o0eGZqzd+TNdd0=" - [mod."gopkg.in/yaml.v3"] - version = "v3.0.1" - hash = "sha256-FqL9TKYJ0XkNwJFnq9j0VvJ5ZUU1RvH/52h/f5bkYAU=" diff --git a/packages/matrix/matrix-media-repo/source.json b/packages/matrix/matrix-media-repo/source.json deleted file mode 100644 index 581d29bd..00000000 --- a/packages/matrix/matrix-media-repo/source.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/turt2live/matrix-media-repo", - "rev": "8a642d553496f87f2cb06822748c68f0c4d05619", - "date": "2024-09-04T23:28:42Z", - "path": "/nix/store/50vlm5v24k4vd53jg3sj6zs70qjni906-matrix-media-repo", - "sha256": "05krmfa2dfvx6mnd0cyxp9yhpf4182n4vfrg75fwmbqlxvjr0jz1", - "hash": "sha256-4UuQ5e4Ur8pdOS+7TaxAgbgLfbrdM9BsNX27JpSreRY=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/matrix/mautrix-discord/default.nix b/packages/matrix/mautrix-discord/default.nix deleted file mode 100644 index 730c5ac4..00000000 --- a/packages/matrix/mautrix-discord/default.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - buildGoApplication, - olm, - fetchFromGitHub, - lib, - writeScript, - go, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - buildGoApplication rec { - pname = "mautrix-discord"; - version = source.date; - src = fetchFromGitHub { - owner = "mautrix"; - repo = "discord"; - inherit (source) rev sha256; - }; - modules = ./gomod2nix.toml; - buildInputs = [ - olm - ]; - CGO_ENABLED = "1"; - meta = { - description = "Discord-Matrix double-puppeting bridge"; - broken = builtins.compareVersions go.version "1.18" < 0; - }; - postConfigure = '' - chmod -R +w vendor/ - for f in vendor/go.mau.fi/util/variationselector/*.json vendor/golang.org/x/net/publicsuffix/data/* vendor/maunium.net/go/mautrix/crypto/sql_store_upgrade/*.sql vendor/maunium.net/go/mautrix/sqlstatestore/*.sql; do - cp -v --remove-destination -f `readlink $f` $f - done - ''; - passthru.updateScript = writeScript "update-matrix-media-repo" '' - ${../../scripts/update-git.sh} "https://github.com/mautrix/discord" matrix/mautrix-discord/source.json - if [ "$(git diff -- matrix/mautrix-discord/source.json)" ]; then - SRC_PATH=$(nix-build -E '(import ../.).packages.x86_64-linux.${pname}.src') - ${../../scripts/update-go.sh} $SRC_PATH matrix/mautrix-discord/ - fi - ''; - } diff --git a/packages/matrix/mautrix-discord/gomod2nix.toml b/packages/matrix/mautrix-discord/gomod2nix.toml deleted file mode 100644 index acbac89e..00000000 --- a/packages/matrix/mautrix-discord/gomod2nix.toml +++ /dev/null @@ -1,100 +0,0 @@ -schema = 3 - -[mod] - [mod."github.com/bwmarrin/discordgo"] - version = "v0.0.0-20231013182643-f333f2578a3c" - hash = "sha256-5S/9DqVPRZSjaKkqjnr23vJHk1iMY0QepIbwFBWvAgw=" - replaced = "github.com/beeper/discordgo" - [mod."github.com/coreos/go-systemd/v22"] - version = "v22.5.0" - hash = "sha256-E2zXikbmIQImghstLUWuey1YgA0Folu3F+fi5k4hCxA=" - [mod."github.com/davecgh/go-spew"] - version = "v1.1.1" - hash = "sha256-nhzSUrE1fCkN0+RL04N4h8jWmRFPPPWbCuDc7Ss0akI=" - [mod."github.com/gabriel-vasile/mimetype"] - version = "v1.4.3" - hash = "sha256-EDmlRi3av27dq/ISVTglv08z4yZzMQ/SxL1c46EJro0=" - [mod."github.com/google/shlex"] - version = "v0.0.0-20191202100458-e7afc7fbc510" - hash = "sha256-1f392pCmS7AXVKXIC1SvKlYtK/rvW47F5CCkGT2G6JM=" - [mod."github.com/gorilla/mux"] - version = "v1.8.0" - hash = "sha256-s905hpzMH9bOLue09E2JmzPXfIS4HhAlgT7g13HCwKE=" - [mod."github.com/gorilla/websocket"] - version = "v1.5.0" - hash = "sha256-EYVgkSEMo4HaVrsWKqnsYRp8SSS8gNf7t+Elva02Ofc=" - [mod."github.com/lib/pq"] - version = "v1.10.9" - hash = "sha256-Gl6dLtL+yk6UrTTWfas43aM4lP/pNa2l7+ITXnjQyKs=" - [mod."github.com/mattn/go-colorable"] - version = "v0.1.13" - hash = "sha256-qb3Qbo0CELGRIzvw7NVM1g/aayaz4Tguppk9MD2/OI8=" - [mod."github.com/mattn/go-isatty"] - version = "v0.0.19" - hash = "sha256-wYQqGxeqV3Elkmn26Md8mKZ/viw598R4Ych3vtt72YE=" - [mod."github.com/mattn/go-sqlite3"] - version = "v1.14.22" - hash = "sha256-CWF2Hjg43658NhaePWbGzS19gHJXjuTroG5c0W3hgYQ=" - [mod."github.com/pmezard/go-difflib"] - version = "v1.0.0" - hash = "sha256-/FtmHnaGjdvEIKAJtrUfEhV7EVo5A/eYrtdnUkuxLDA=" - [mod."github.com/rs/zerolog"] - version = "v1.31.0" - hash = "sha256-OF4VM+Rv6M5EAaUVD2nOzcbZLQ4b7OAMteyyTqIoU0M=" - [mod."github.com/skip2/go-qrcode"] - version = "v0.0.0-20200617195104-da1b6568686e" - hash = "sha256-ST9t4/b7WFXUb8wra4ZYVDNZJGrEykw8dkWhLrxp8F0=" - [mod."github.com/stretchr/testify"] - version = "v1.8.4" - hash = "sha256-MoOmRzbz9QgiJ+OOBo5h5/LbilhJfRUryvzHJmXAWjo=" - [mod."github.com/tidwall/gjson"] - version = "v1.17.0" - hash = "sha256-eS+Ble3UZClAH/XpulH+MuxyZFsF7/yvWeBIn1D9ryk=" - [mod."github.com/tidwall/match"] - version = "v1.1.1" - hash = "sha256-M2klhPId3Q3T3VGkSbOkYl/2nLHnsG+yMbXkPkyrRdg=" - [mod."github.com/tidwall/pretty"] - version = "v1.2.0" - hash = "sha256-esRQGsn2Ee/CiySlwyuOICSLdqUkH4P7u8qXszos8Yc=" - [mod."github.com/tidwall/sjson"] - version = "v1.2.5" - hash = "sha256-OYGNolkmL7E1Qs2qrQ3IVpQp5gkcHNU/AB/z2O+Myps=" - [mod."github.com/yuin/goldmark"] - version = "v1.6.0" - hash = "sha256-0PeGjGxxM7lUSx2dn8yPUBpilPQzEN9nkgf3s+5zGTY=" - [mod."go.mau.fi/util"] - version = "v0.2.2-0.20231228160422-22fdd4bbddeb" - hash = "sha256-k1wrTDyJ9rCsLvQ+Pbg1BbOANRGzrQyRvIT++9BZ8PM=" - [mod."go.mau.fi/zeroconfig"] - version = "v0.1.2" - hash = "sha256-xf4p2Z5Pl9In3ne9BVmy7YvtooSRBzqxP4Pl2jdVN8w=" - [mod."golang.org/x/crypto"] - version = "v0.15.0" - hash = "sha256-ABytl19ORbe9xcY4Ao76AcAkqqPduUCd8OrD4Sl5jyU=" - [mod."golang.org/x/exp"] - version = "v0.0.0-20231219180239-dc181d75b848" - hash = "sha256-K35MT3O16IlvqhDZBVBF4lJZIM7T/15PxOmeyGYv01A=" - [mod."golang.org/x/net"] - version = "v0.18.0" - hash = "sha256-7c3GBByVmRjd7CXf4STGTAnnUWtHVH4S0HjSYUHCcCA=" - [mod."golang.org/x/sync"] - version = "v0.5.0" - hash = "sha256-EAKeODSsct5HhXPmpWJfulKSCkuUu6kkDttnjyZMNcI=" - [mod."golang.org/x/sys"] - version = "v0.14.0" - hash = "sha256-ReIRQmONicRW9idzGVPCBx5TTcKacmQTF1vPC3L4SxY=" - [mod."gopkg.in/natefinch/lumberjack.v2"] - version = "v2.2.1" - hash = "sha256-GaXWRDxhGy4Z4mgE+bJ8OE9SVvYUa9TnNiydnp2s1Ms=" - [mod."gopkg.in/yaml.v3"] - version = "v3.0.1" - hash = "sha256-FqL9TKYJ0XkNwJFnq9j0VvJ5ZUU1RvH/52h/f5bkYAU=" - [mod."maunium.net/go/mauflag"] - version = "v1.0.0" - hash = "sha256-fYc/WwqE0ev0dvnu5qGmHJsYiSTuWeOTiAVzmQIKWyY=" - [mod."maunium.net/go/maulogger/v2"] - version = "v2.4.1" - hash = "sha256-OstOCC7Bib6mbcUG2X3YafEBikFhPQ8lN6jPK5c/Ah8=" - [mod."maunium.net/go/mautrix"] - version = "v0.16.3-0.20240712164054-e6046fbf432c" - hash = "sha256-QeUoCxfJnHNNYXmL02/uEKWFT8A+nVLzA4NUkCcuV0c=" diff --git a/packages/matrix/mautrix-discord/source.json b/packages/matrix/mautrix-discord/source.json deleted file mode 100644 index e9d9bc8d..00000000 --- a/packages/matrix/mautrix-discord/source.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/mautrix/discord", - "rev": "ce1f401ddcf57305a9782702c72619c86eb3595d", - "date": "2024-07-16T11:28:58+03:00", - "path": "/nix/store/s1pdfswh85c82m8rqbmddnl9z0cbw94d-discord", - "sha256": "1ck61zs67dfg0jf51gv2bf27kr8jr411bfm853479swgzyj9x81p", - "hash": "sha256-N6CepP+P63TIKKi6FQLJEuV5hFtiv1CcBM+1Y/QPZrI=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/matrix/mautrix-slack/default.nix b/packages/matrix/mautrix-slack/default.nix deleted file mode 100644 index 6966701f..00000000 --- a/packages/matrix/mautrix-slack/default.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - buildGoApplication, - olm, - fetchFromGitHub, - lib, - writeScript, - go_1_23, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - buildGoApplication rec { - pname = "mautrix-slack"; - version = source.date; - src = fetchFromGitHub { - owner = "mautrix"; - repo = "slack"; - inherit (source) rev sha256; - }; - modules = ./gomod2nix.toml; - buildInputs = [ - olm - ]; - CGO_ENABLED = "1"; - go = go_1_23; - meta = { - description = "slack-Matrix double-puppeting bridge"; - broken = builtins.compareVersions go.version "1.18" < 0; - }; - postConfigure = '' - chmod -R +w vendor/ - for f in vendor/golang.org/x/net/publicsuffix/data/* $(find vendor -name '*.sql') vendor/maunium.net/go/mautrix/bridgev2/matrix/mxmain/example-config.yaml; do - cp -v --remove-destination -f `readlink $f` $f - done - ''; - passthru.updateScript = writeScript "update-matrix-media-repo" '' - ${../../scripts/update-git.sh} "https://github.com/mautrix/slack" matrix/mautrix-slack/source.json - if [ "$(git diff -- matrix/mautrix-slack/source.json)" ]; then - SRC_PATH=$(nix-build -E '(import ../.).packages.x86_64-linux.${pname}.src') - ${../../scripts/update-go.sh} $SRC_PATH matrix/mautrix-slack/ - fi - ''; - } diff --git a/packages/matrix/mautrix-slack/gomod2nix.toml b/packages/matrix/mautrix-slack/gomod2nix.toml deleted file mode 100644 index 8159d124..00000000 --- a/packages/matrix/mautrix-slack/gomod2nix.toml +++ /dev/null @@ -1,103 +0,0 @@ -schema = 3 - -[mod] - [mod."filippo.io/edwards25519"] - version = "v1.1.0" - hash = "sha256-9ACANrgWZSd5HYPfDZHY8DVbPSC9LOMgy8deq3rDOoc=" - [mod."github.com/coreos/go-systemd/v22"] - version = "v22.5.0" - hash = "sha256-E2zXikbmIQImghstLUWuey1YgA0Folu3F+fi5k4hCxA=" - [mod."github.com/davecgh/go-spew"] - version = "v1.1.1" - hash = "sha256-nhzSUrE1fCkN0+RL04N4h8jWmRFPPPWbCuDc7Ss0akI=" - [mod."github.com/gorilla/mux"] - version = "v1.8.0" - hash = "sha256-s905hpzMH9bOLue09E2JmzPXfIS4HhAlgT7g13HCwKE=" - [mod."github.com/gorilla/websocket"] - version = "v1.5.0" - hash = "sha256-EYVgkSEMo4HaVrsWKqnsYRp8SSS8gNf7t+Elva02Ofc=" - [mod."github.com/lib/pq"] - version = "v1.10.9" - hash = "sha256-Gl6dLtL+yk6UrTTWfas43aM4lP/pNa2l7+ITXnjQyKs=" - [mod."github.com/mattn/go-colorable"] - version = "v0.1.13" - hash = "sha256-qb3Qbo0CELGRIzvw7NVM1g/aayaz4Tguppk9MD2/OI8=" - [mod."github.com/mattn/go-isatty"] - version = "v0.0.19" - hash = "sha256-wYQqGxeqV3Elkmn26Md8mKZ/viw598R4Ych3vtt72YE=" - [mod."github.com/mattn/go-sqlite3"] - version = "v1.14.23" - hash = "sha256-taGKFZFQlR5++5b2oZ1dYS3RERKv6yh1gniNWhb4egg=" - [mod."github.com/petermattis/goid"] - version = "v0.0.0-20240813172612-4fcff4a6cae7" - hash = "sha256-tfb/0LbMHJQsmxwaj2RItXiYn2AVd05E92Z/vp+rJhs=" - [mod."github.com/pmezard/go-difflib"] - version = "v1.0.0" - hash = "sha256-/FtmHnaGjdvEIKAJtrUfEhV7EVo5A/eYrtdnUkuxLDA=" - [mod."github.com/rs/xid"] - version = "v1.6.0" - hash = "sha256-rJB7h3KuH1DPp5n4dY3MiGnV1Y96A10lf5OUl+MLkzU=" - [mod."github.com/rs/zerolog"] - version = "v1.33.0" - hash = "sha256-jT/Y/izhZiCdrDbC/ty83FGs8UQavTU+OW03O4vKFkY=" - [mod."github.com/skip2/go-qrcode"] - version = "v0.0.0-20200617195104-da1b6568686e" - hash = "sha256-ST9t4/b7WFXUb8wra4ZYVDNZJGrEykw8dkWhLrxp8F0=" - [mod."github.com/slack-go/slack"] - version = "v0.0.0-20240930085310-1180a3fa18e0" - hash = "sha256-jHMKfmi7GMLOIyj8OoiGpbVoafGbctgtqynZDahIypU=" - replaced = "github.com/beeper/slackgo" - [mod."github.com/stretchr/testify"] - version = "v1.9.0" - hash = "sha256-uUp/On+1nK+lARkTVtb5RxlW15zxtw2kaAFuIASA+J0=" - [mod."github.com/tidwall/gjson"] - version = "v1.17.3" - hash = "sha256-zui8S4qlfFXNLartKynJbYqeM/MW3f3eDbojIvh/KS8=" - [mod."github.com/tidwall/match"] - version = "v1.1.1" - hash = "sha256-M2klhPId3Q3T3VGkSbOkYl/2nLHnsG+yMbXkPkyrRdg=" - [mod."github.com/tidwall/pretty"] - version = "v1.2.0" - hash = "sha256-esRQGsn2Ee/CiySlwyuOICSLdqUkH4P7u8qXszos8Yc=" - [mod."github.com/tidwall/sjson"] - version = "v1.2.5" - hash = "sha256-OYGNolkmL7E1Qs2qrQ3IVpQp5gkcHNU/AB/z2O+Myps=" - [mod."github.com/yuin/goldmark"] - version = "v1.7.4" - hash = "sha256-1L0gZyD+AguN8GBy17rs54eFZv7LTU5dcttULEJRabI=" - [mod."go.mau.fi/util"] - version = "v0.8.0" - hash = "sha256-7o1p24OH9w0532nv2dC+jrwjWDX9eeuv0m6OFKcIBNc=" - [mod."go.mau.fi/zeroconfig"] - version = "v0.1.3" - hash = "sha256-TPwXOQql1MV8pXn6ZPxtkBUHzBCwIngNjrfqTfOSJX4=" - [mod."golang.org/x/crypto"] - version = "v0.27.0" - hash = "sha256-8HP4+gr4DbXI22GhdgZmCWr1ijtI9HNLsTcE0kltY9o=" - [mod."golang.org/x/exp"] - version = "v0.0.0-20240909161429-701f63a606c0" - hash = "sha256-nB3zQGSyCNU9Z6QP0iYYBpUeu7HKBBXS1z9ba4DxjMQ=" - [mod."golang.org/x/net"] - version = "v0.29.0" - hash = "sha256-dH9Rdf5T04KJ4B5WvIZh12ogMbADWiWgIt77nvPTk2k=" - [mod."golang.org/x/sync"] - version = "v0.8.0" - hash = "sha256-usvF0z7gq1vsX58p4orX+8WHlv52pdXgaueXlwj2Wss=" - [mod."golang.org/x/sys"] - version = "v0.25.0" - hash = "sha256-PXZ9EQZ7SFpcL7d3E1+KGTxziYlHEIZPfoXEbnaVD3I=" - [mod."golang.org/x/text"] - version = "v0.18.0" - hash = "sha256-aNvJW4gQs+MTfdz6DZqyyHQS2GJ9W8L8qKPVODPn4+k=" - [mod."gopkg.in/natefinch/lumberjack.v2"] - version = "v2.2.1" - hash = "sha256-GaXWRDxhGy4Z4mgE+bJ8OE9SVvYUa9TnNiydnp2s1Ms=" - [mod."gopkg.in/yaml.v3"] - version = "v3.0.1" - hash = "sha256-FqL9TKYJ0XkNwJFnq9j0VvJ5ZUU1RvH/52h/f5bkYAU=" - [mod."maunium.net/go/mauflag"] - version = "v1.0.0" - hash = "sha256-fYc/WwqE0ev0dvnu5qGmHJsYiSTuWeOTiAVzmQIKWyY=" - [mod."maunium.net/go/mautrix"] - version = "v0.21.0" - hash = "sha256-N/bOKAx/klp4LFP99P8jeNaNzgeqZalQgYiJIADJkwA=" diff --git a/packages/matrix/mautrix-slack/source.json b/packages/matrix/mautrix-slack/source.json deleted file mode 100644 index 52065ee5..00000000 --- a/packages/matrix/mautrix-slack/source.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/mautrix/slack", - "rev": "78e302ae3249ce5ec1a71d26d6350012294b04b1", - "date": "2024-10-23T12:14:22+03:00", - "path": "/nix/store/w3dr5cdfgjl392phiz4fvf3ahj8lsjlr-slack", - "sha256": "1ym6daxhy39p5jlqipi7a0xmxxmsw2z53pn4r66fglz136r3wx8i", - "hash": "sha256-EXU+shnh0+eMycTeUb7guvZeO1An3oipLDcND7tqpvo=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/matrix/mautrix-telegram/0001-Re-add-entrypoint.patch b/packages/matrix/mautrix-telegram/0001-Re-add-entrypoint.patch deleted file mode 100644 index a1a732bb..00000000 --- a/packages/matrix/mautrix-telegram/0001-Re-add-entrypoint.patch +++ /dev/null @@ -1,27 +0,0 @@ -From f4a612e1c8501d2a1683003bb121daa6d46155ca Mon Sep 17 00:00:00 2001 -From: Maximilian Bosch -Date: Sun, 29 Nov 2020 20:45:16 +0100 -Subject: [PATCH 1/2] Re-add entrypoint - ---- - setup.py | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/setup.py b/setup.py -index ea001e5..e1ca536 100644 ---- a/setup.py -+++ b/setup.py -@@ -54,6 +54,12 @@ setuptools.setup( - extras_require=extras_require, - python_requires="~=3.7", - -+ entry_points={ -+ 'console_scripts': [ -+ 'mautrix-telegram=mautrix_telegram.__main__:main' -+ ] -+ }, -+ - classifiers=[ - "Development Status :: 4 - Beta", - "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", - diff --git a/packages/matrix/mautrix-telegram/default.nix b/packages/matrix/mautrix-telegram/default.nix deleted file mode 100644 index c17c7d86..00000000 --- a/packages/matrix/mautrix-telegram/default.nix +++ /dev/null @@ -1,65 +0,0 @@ -{ - lib, - python3, - fetchFromGitHub, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - python3.pkgs.buildPythonPackage rec { - pname = "mautrix-telegram"; - version = source.date; - disabled = python3.pythonOlder "3.8"; - - src = fetchFromGitHub { - owner = "mautrix"; - repo = "telegram"; - inherit (source) rev sha256; - }; - - patches = [./0001-Re-add-entrypoint.patch ./mautrix-telegram-sticker.patch]; - - postPatch = '' - substituteInPlace requirements.txt \ - --replace "asyncpg>=0.20,<0.27" "asyncpg>=0.20" - ''; - - propagatedBuildInputs = with python3.pkgs; [ - ruamel-yaml - python-magic - CommonMark - aiohttp - yarl - (python3.pkgs.callPackage ../../python/mautrix.nix {}) - (python3.pkgs.callPackage ../../python/tulir-telethon.nix {}) - asyncpg - Mako - # optional - cryptg - aiodns - brotli - pillow - qrcode - phonenumbers - prometheus-client - aiosqlite - python-olm - pycryptodome - unpaddedbase64 - setuptools - ]; - - # has no tests - doCheck = false; - - meta = with lib; { - homepage = "https://github.com/mautrix/telegram"; - description = "A Matrix-Telegram hybrid puppeting/relaybot bridge"; - platforms = platforms.linux; - broken = !(python3.pkgs ? cryptg); - }; - passthru.updateScript = [ - ../../scripts/update-git.sh - "https://github.com/mautrix/telegram" - "matrix/mautrix-telegram/source.json" - ]; - } diff --git a/packages/matrix/mautrix-telegram/mautrix-telegram-sticker.patch b/packages/matrix/mautrix-telegram/mautrix-telegram-sticker.patch deleted file mode 100644 index dab2860d..00000000 --- a/packages/matrix/mautrix-telegram/mautrix-telegram-sticker.patch +++ /dev/null @@ -1,74 +0,0 @@ -diff --git a/mautrix_telegram/portal.py b/mautrix_telegram/portal.py -index 701b3eb..8a266bc 100644 ---- a/mautrix_telegram/portal.py -+++ b/mautrix_telegram/portal.py -@@ -1822,6 +1822,35 @@ class Portal(DBPortal, BasePortal): - msgtype=content.msgtype, - ) - -+ async def _find_telegram_sticker( -+ self, -+ client, -+ metadata -+ ): -+ sticker_set_id = int(metadata["pack"]["id"]) -+ from telethon.tl.functions.messages import GetAllStickersRequest -+ sticker_sets = await client(GetAllStickersRequest(0)) -+ from telethon.tl.functions.messages import GetStickerSetRequest -+ from telethon.tl.types import InputStickerSetID -+ found_sticker_set = None -+ for sticker_set in sticker_sets.sets: -+ if sticker_set.id == sticker_set_id: -+ found_sticker_set = sticker_set -+ break -+ if not found_sticker_set: -+ return None -+ -+ stickers = await client(GetStickerSetRequest( -+ hash = 0, -+ stickerset=InputStickerSetID( -+ id=found_sticker_set.id, access_hash=found_sticker_set.access_hash -+ ) -+ )) -+ -+ for sticker in stickers.documents: -+ if sticker.id == int(metadata["id"]): -+ return sticker -+ - async def _handle_matrix_file( - self, - sender: u.User, -@@ -1842,6 +1871,7 @@ class Portal(DBPortal, BasePortal): - w = h = None - max_image_size = self.config["bridge.image_as_file_size"] * 1000**2 - max_image_pixels = self.config["bridge.image_as_file_pixels"] -+ media = None - - attributes = [] - if self.config["bridge.parallel_file_transfer"] and content.url: -@@ -1863,7 +1893,13 @@ class Portal(DBPortal, BasePortal): - file = await self.main_intent.download_media(content.url) - - if content.msgtype == MessageType.STICKER: -- if mime == "image/gif": -+ tg_sticker = None -+ if "net.maunium.telegram.sticker" in content.info: -+ tg_sticker = await self._find_telegram_sticker(client, content.info["net.maunium.telegram.sticker"]) -+ -+ if tg_sticker is not None: -+ media = tg_sticker -+ elif mime == "image/gif": - # Remove sticker description - file_name = "sticker.gif" - else: -@@ -1911,7 +1947,9 @@ class Portal(DBPortal, BasePortal): - if "fi.mau.telegram.force_document" in content: - force_document = bool(content["fi.mau.telegram.force_document"]) - -- if (mime == "image/png" or mime == "image/jpeg") and not force_document: -+ if media is not None: -+ pass -+ elif (mime == "image/png" or mime == "image/jpeg") and not force_document: - media = InputMediaUploadedPhoto(file_handle) - else: - media = InputMediaUploadedDocument( diff --git a/packages/matrix/mautrix-telegram/source.json b/packages/matrix/mautrix-telegram/source.json deleted file mode 100644 index b6363a80..00000000 --- a/packages/matrix/mautrix-telegram/source.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/mautrix/telegram", - "rev": "0068341185423c11254a0f686fb65ee1e165d28a", - "date": "2024-07-16T11:53:19+03:00", - "path": "/nix/store/5qayria7qqx5jn54qrp148aab489z055-telegram", - "sha256": "0fwdgkzg88hfdx5k4hzj1jhm34bfirc37q5663q2hdyfks32y7dr", - "hash": "sha256-uR0vhp7ONyjwMKbgM1iObpFRoQzyQzJLbw4i9P58jTs=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/matrix/mautrix-whatsapp/default.nix b/packages/matrix/mautrix-whatsapp/default.nix deleted file mode 100644 index 8a60111f..00000000 --- a/packages/matrix/mautrix-whatsapp/default.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ - buildGoApplication, - olm, - fetchFromGitHub, - lib, - writeScript, - go_1_23, -}: let - source = builtins.fromJSON (builtins.readFile ./source.json); -in - buildGoApplication rec { - pname = "mautrix-whatsapp"; - version = source.date; - src = fetchFromGitHub { - owner = "mautrix"; - repo = "whatsapp"; - inherit (source) rev sha256; - }; - postPatch = '' - substituteInPlace go.mod --replace 'go1.23.2' 'go${go.version}' - ''; - go = go_1_23; - modules = ./gomod2nix.toml; - buildInputs = [ - olm - ]; - CGO_ENABLED = "1"; - meta = { - description = "Whatsapp-Matrix double-puppeting bridge"; - broken = builtins.compareVersions go.version "1.18" < 0; - }; - postConfigure = '' - chmod -R +w vendor/ - for f in $(find vendor/go.mau.fi/webp/internal/ vendor/go.mau.fi/whatsmeow/proto/ -type l) vendor/go.mau.fi/util/variationselector/*.json vendor/golang.org/x/net/publicsuffix/data/* vendor/maunium.net/go/mautrix/crypto/sql_store_upgrade/*.sql vendor/maunium.net/go/mautrix/sqlstatestore/*.sql $(find vendor/go.mau.fi/whatsmeow/binary/ -type l) vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb vendor/maunium.net/go/mautrix/bridgev2/database/upgrades/*.sql vendor/maunium.net/go/mautrix/bridgev2/matrix/mxmain/example-config.yaml; do - cp -v --remove-destination -f `readlink $f` $f - done - ''; - /* - passthru.updateScript = writeScript "update-mautrix-whatsapp" '' - ${../../scripts/update-git.sh} "https://github.com/mautrix/whatsapp" matrix/mautrix-whatsapp/source.json - if [ "$(git diff -- matrix/mautrix-whatsapp/source.json)" ]; then - SRC_PATH=$(nix-build -E '(import ../.).packages.x86_64-linux.${pname}.src') - ${../../scripts/update-go.sh} $SRC_PATH matrix/mautrix-whatsapp/ - fi - ''; - */ - } diff --git a/packages/matrix/mautrix-whatsapp/gomod2nix.toml b/packages/matrix/mautrix-whatsapp/gomod2nix.toml deleted file mode 100644 index 822c45b8..00000000 --- a/packages/matrix/mautrix-whatsapp/gomod2nix.toml +++ /dev/null @@ -1,117 +0,0 @@ -schema = 3 - -[mod] - [mod."filippo.io/edwards25519"] - version = "v1.1.0" - hash = "sha256-9ACANrgWZSd5HYPfDZHY8DVbPSC9LOMgy8deq3rDOoc=" - [mod."github.com/coreos/go-systemd/v22"] - version = "v22.5.0" - hash = "sha256-E2zXikbmIQImghstLUWuey1YgA0Folu3F+fi5k4hCxA=" - [mod."github.com/google/uuid"] - version = "v1.6.0" - hash = "sha256-VWl9sqUzdOuhW0KzQlv0gwwUQClYkmZwSydHG2sALYw=" - [mod."github.com/gorilla/mux"] - version = "v1.8.0" - hash = "sha256-s905hpzMH9bOLue09E2JmzPXfIS4HhAlgT7g13HCwKE=" - [mod."github.com/gorilla/websocket"] - version = "v1.5.0" - hash = "sha256-EYVgkSEMo4HaVrsWKqnsYRp8SSS8gNf7t+Elva02Ofc=" - [mod."github.com/kr/pretty"] - version = "v0.3.1" - hash = "sha256-DlER7XM+xiaLjvebcIPiB12oVNjyZHuJHoRGITzzpKU=" - [mod."github.com/lib/pq"] - version = "v1.10.9" - hash = "sha256-Gl6dLtL+yk6UrTTWfas43aM4lP/pNa2l7+ITXnjQyKs=" - [mod."github.com/mattn/go-colorable"] - version = "v0.1.13" - hash = "sha256-qb3Qbo0CELGRIzvw7NVM1g/aayaz4Tguppk9MD2/OI8=" - [mod."github.com/mattn/go-isatty"] - version = "v0.0.20" - hash = "sha256-qhw9hWtU5wnyFyuMbKx+7RB8ckQaFQ8D+8GKPkN3HHQ=" - [mod."github.com/mattn/go-sqlite3"] - version = "v1.14.23" - hash = "sha256-taGKFZFQlR5++5b2oZ1dYS3RERKv6yh1gniNWhb4egg=" - [mod."github.com/petermattis/goid"] - version = "v0.0.0-20240813172612-4fcff4a6cae7" - hash = "sha256-tfb/0LbMHJQsmxwaj2RItXiYn2AVd05E92Z/vp+rJhs=" - [mod."github.com/rogpeppe/go-internal"] - version = "v1.10.0" - hash = "sha256-vR7+d0aoKTuKeTYSgZxsGhH9e5Zvxix3Zrq9SPm5+NQ=" - [mod."github.com/rs/xid"] - version = "v1.6.0" - hash = "sha256-rJB7h3KuH1DPp5n4dY3MiGnV1Y96A10lf5OUl+MLkzU=" - [mod."github.com/rs/zerolog"] - version = "v1.33.0" - hash = "sha256-jT/Y/izhZiCdrDbC/ty83FGs8UQavTU+OW03O4vKFkY=" - [mod."github.com/skip2/go-qrcode"] - version = "v0.0.0-20200617195104-da1b6568686e" - hash = "sha256-ST9t4/b7WFXUb8wra4ZYVDNZJGrEykw8dkWhLrxp8F0=" - [mod."github.com/tidwall/gjson"] - version = "v1.18.0" - hash = "sha256-CO6hqDu8Y58Po6A01e5iTpwiUBQ5khUZsw7czaJHw0I=" - [mod."github.com/tidwall/match"] - version = "v1.1.1" - hash = "sha256-M2klhPId3Q3T3VGkSbOkYl/2nLHnsG+yMbXkPkyrRdg=" - [mod."github.com/tidwall/pretty"] - version = "v1.2.1" - hash = "sha256-S0uTDDGD8qr415Ut7QinyXljCp0TkL4zOIrlJ+9OMl8=" - [mod."github.com/tidwall/sjson"] - version = "v1.2.5" - hash = "sha256-OYGNolkmL7E1Qs2qrQ3IVpQp5gkcHNU/AB/z2O+Myps=" - [mod."github.com/yuin/goldmark"] - version = "v1.7.4" - hash = "sha256-1L0gZyD+AguN8GBy17rs54eFZv7LTU5dcttULEJRabI=" - [mod."go.mau.fi/libsignal"] - version = "v0.1.1" - hash = "sha256-KegSskYAq2MFiOvB28WG0j0VPzfbXqivapLHwsIEYNc=" - [mod."go.mau.fi/util"] - version = "v0.8.1-0.20241003092848-3b49d3e0b9ee" - hash = "sha256-in0tzCWILrs2lSdfJmXW9wQsFO/am0235+AgUtp9xcc=" - [mod."go.mau.fi/webp"] - version = "v0.1.0" - hash = "sha256-KIP/Onw0t/o10oBuvmRQDff7GF8G5lsMaDXpe0fjvNg=" - [mod."go.mau.fi/whatsmeow"] - version = "v0.0.0-20241011190419-de8326a9d38d" - hash = "sha256-5T3Kc09Nb/s9vQvL1kV3vL85T7FFTwGMdVlSt2aOt6Q=" - [mod."go.mau.fi/zeroconfig"] - version = "v0.1.3" - hash = "sha256-TPwXOQql1MV8pXn6ZPxtkBUHzBCwIngNjrfqTfOSJX4=" - [mod."golang.org/x/crypto"] - version = "v0.27.0" - hash = "sha256-8HP4+gr4DbXI22GhdgZmCWr1ijtI9HNLsTcE0kltY9o=" - [mod."golang.org/x/exp"] - version = "v0.0.0-20240909161429-701f63a606c0" - hash = "sha256-nB3zQGSyCNU9Z6QP0iYYBpUeu7HKBBXS1z9ba4DxjMQ=" - [mod."golang.org/x/image"] - version = "v0.20.0" - hash = "sha256-9MRLjgKJbN/N+PROgFc+IV2hC5iO2kyHt/ZPfvEqyC4=" - [mod."golang.org/x/net"] - version = "v0.29.0" - hash = "sha256-dH9Rdf5T04KJ4B5WvIZh12ogMbADWiWgIt77nvPTk2k=" - [mod."golang.org/x/sync"] - version = "v0.8.0" - hash = "sha256-usvF0z7gq1vsX58p4orX+8WHlv52pdXgaueXlwj2Wss=" - [mod."golang.org/x/sys"] - version = "v0.25.0" - hash = "sha256-PXZ9EQZ7SFpcL7d3E1+KGTxziYlHEIZPfoXEbnaVD3I=" - [mod."golang.org/x/text"] - version = "v0.18.0" - hash = "sha256-aNvJW4gQs+MTfdz6DZqyyHQS2GJ9W8L8qKPVODPn4+k=" - [mod."google.golang.org/protobuf"] - version = "v1.34.2" - hash = "sha256-nMTlrDEE2dbpWz50eQMPBQXCyQh4IdjrTIccaU0F3m0=" - [mod."gopkg.in/check.v1"] - version = "v1.0.0-20201130134442-10cb98267c6c" - hash = "sha256-VlIpM2r/OD+kkyItn6vW35dyc0rtkJufA93rjFyzncs=" - [mod."gopkg.in/natefinch/lumberjack.v2"] - version = "v2.2.1" - hash = "sha256-GaXWRDxhGy4Z4mgE+bJ8OE9SVvYUa9TnNiydnp2s1Ms=" - [mod."gopkg.in/yaml.v3"] - version = "v3.0.1" - hash = "sha256-FqL9TKYJ0XkNwJFnq9j0VvJ5ZUU1RvH/52h/f5bkYAU=" - [mod."maunium.net/go/mauflag"] - version = "v1.0.0" - hash = "sha256-fYc/WwqE0ev0dvnu5qGmHJsYiSTuWeOTiAVzmQIKWyY=" - [mod."maunium.net/go/mautrix"] - version = "v0.21.1-0.20241010140510-38610d681dcd" - hash = "sha256-qcSQFYiFo/uWfrcCBLGD1cKieokp5/BP6YBHVCgBorc=" diff --git a/packages/matrix/mautrix-whatsapp/source.json b/packages/matrix/mautrix-whatsapp/source.json deleted file mode 100644 index eac92728..00000000 --- a/packages/matrix/mautrix-whatsapp/source.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/mautrix/whatsapp", - "rev": "878c7b8718d32c7e5430e450b5f579598581b864", - "date": "2024-10-12T18:54:32+03:00", - "path": "/nix/store/m90cjnr6gfg8llakgpps10bz5q4fmmbh-whatsapp", - "sha256": "1zgyvv02dkr16mbgwbzkr1z1flx5l81m0pmcjij5wxqn7xpp6snm", - "hash": "sha256-1Wpzbz8Wd15klKxeUAOipVMXfsjzL/5WNSHPJsDe/v0=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/minecraft/dynmap.nix b/packages/minecraft/dynmap.nix deleted file mode 100644 index e5c0492e..00000000 --- a/packages/minecraft/dynmap.nix +++ /dev/null @@ -1,7 +0,0 @@ -{fetchurl}: { - core = fetchurl { - url = "https://dev.bukkit.org/projects/dynmap/files/4978992/download"; - sha256 = "475cd41caf659452cfcf7247285bac6b698adfc417dbf0b49b289fd1c7a02e9a"; - name = "Dynmap.jar"; - }; -} diff --git a/packages/minecraft/essentialsx.nix b/packages/minecraft/essentialsx.nix deleted file mode 100644 index 7f5be22c..00000000 --- a/packages/minecraft/essentialsx.nix +++ /dev/null @@ -1,104 +0,0 @@ -{ - coreutils, - fetchFromGitHub, - fetchurl, - findutils, - git, - gnused, - gradle, - openjdk17_headless, - perl, - stdenv, -}: let - pname = "EssentialsX"; - version = "2.19.2"; - - src = fetchFromGitHub { - owner = "EssentialsX"; - repo = "Essentials"; - rev = version; - sha256 = "00my0yg3i0kd4ysixhsxwm5y8377svkx9jbp2mlcf89hpbdqh50q"; - leaveDotGit = true; - }; - - addResolveStep = '' - cat >>build.gradle < - subProject.buildscript.configurations.each { configuration -> - resolveConfiguration(subProject, configuration, "buildscript config \''${configuration.name}") - } - subProject.configurations.each { configuration -> - resolveConfiguration(subProject, configuration, "config \''${configuration.name}") - } - } - } - } - void resolveConfiguration(subProject, configuration, name) { - if (configuration.canBeResolved) { - logger.info("Resolving project {} {}", subProject.name, name) - configuration.resolve() - } - } - HERE - ''; - - deps = stdenv.mkDerivation { - pname = "${pname}-deps"; - inherit version src; - nativeBuildInputs = [git]; - postPatch = addResolveStep; - buildPhase = '' - export GRADLE_USER_HOME=$(${coreutils}/bin/mktemp -d) - - # Fetch the maven dependencies. - ${gradle}/bin/gradle --no-daemon --info -Dorg.gradle.java.home=${openjdk17_headless} resolveDependencies - ''; - installPhase = '' - ${findutils}/bin/find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \ - | ${perl}/bin/perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "${coreutils}/bin/install -Dm444 $1 \$out/maven/$x/$3/$4/$5" #e' \ - | sh - - # this above script is broken, fix the result - mv $out/maven/org/gradle/kotlin/kotlin-dsl/org.gradle.kotlin.kotlin-dsl.gradle.plugin/2.1.7 $out/maven/org/gradle/kotlin/kotlin-dsl/ - ''; - outputHashAlgo = "sha256"; - outputHashMode = "recursive"; - outputHash = "sha256-lNtkOErTlzheYXXBXN3yMjnouq5QQOoN/rgqUdFgB9k="; - }; -in rec { - # TODO: current broken - essentialsx-full = stdenv.mkDerivation { - inherit pname version src; - - nativeBuildInputs = [git]; - - buildPhase = '' - ${gnused}/bin/sed -i 's#mavenCentral#maven { url = uri("${deps}/maven") }; mavenCentral#' settings.gradle.kts - ${gnused}/bin/sed -i '/repositoriesMode/d' settings.gradle.kts - ${gnused}/bin/sed -i 's#gradlePluginPortal#maven { url = uri("${deps}/maven") }; gradlePluginPortal#' build-logic/build.gradle.kts - cat settings.gradle.kts - export GRADLE_USER_HOME=$(${coreutils}/bin/mktemp -d) - ${gradle}/bin/gradle --offline --no-daemon --info -Dorg.gradle.java.home=${openjdk17_headless} build - ''; - - installPhase = '' - mkdir -p $out - find . -name '*.jar' - exit 1 - ''; - }; - essentialsx = fetchurl { - url = "https://github.com/EssentialsX/Essentials/releases/download/2.20.1/EssentialsX-2.20.1.jar"; - sha256 = "802ea30bda460ca4597e818925816933c123b08d8126a814fac28d03a61bf542"; - }; - essentialsx-chat = fetchurl { - url = "https://github.com/EssentialsX/Essentials/releases/download/2.20.1/EssentialsXChat-2.20.1.jar"; - sha256 = "40aa5c20241ceb3007ebcb5cfbf19bf2c467b0c090ae50e70653ee87ab775ca6"; - }; - essentialsx-spawn = fetchurl { - url = "https://github.com/EssentialsX/Essentials/releases/download/2.20.1/EssentialsXSpawn-2.20.1.jar"; - sha256 = "650d7c6a33865a02c5ffa4eb710def28e73d972c9aef85b2b1f4e71b9bd261a0"; - }; -} diff --git a/packages/minecraft/luckperms.nix b/packages/minecraft/luckperms.nix deleted file mode 100644 index 3884f2db..00000000 --- a/packages/minecraft/luckperms.nix +++ /dev/null @@ -1,115 +0,0 @@ -{ - coreutils, - fetchFromGitHub, - findutils, - git, - gnused, - gradle, - openjdk17_headless, - perl, - stdenv, - lib, - fetchurl, - ... -}: let - pname = "LuckPerms"; - version = "2022-04-08"; - - src = fetchFromGitHub { - owner = "LuckPerms"; - repo = "LuckPerms"; - rev = "207e4aa9f8c640ad3b17f844d79512f7b8fb2044"; - sha256 = "00xkhma322b19h93ccand8ldj2pn3jf43jcmpcpaakaaqrk2ph0x"; - leaveDotGit = true; - }; - - # Adds a gradle step that downloads all the dependencies to the gradle cache. - addResolveStep = '' - git tag v5.4 # thanks build script - ${gnused}/bin/sed -i "s#'fabric',##" settings.gradle - cat >>build.gradle < - subProject.buildscript.configurations.each { configuration -> - resolveConfiguration(subProject, configuration, "buildscript config \''${configuration.name}") - } - subProject.configurations.each { configuration -> - resolveConfiguration(subProject, configuration, "config \''${configuration.name}") - } - } - } - } - void resolveConfiguration(subProject, configuration, name) { - if (configuration.canBeResolved) { - logger.info("Resolving project {} {}", subProject.name, name) - configuration.resolve() - } - } - HERE - ''; - - deps = stdenv.mkDerivation { - pname = "${pname}-deps"; - inherit version src; - - nativeBuildInputs = [git]; - postPatch = addResolveStep; - buildPhase = '' - export GRADLE_USER_HOME=$(${coreutils}/bin/mktemp -d) - - # Fetch the maven dependencies. - ${gradle}/bin/gradle --no-daemon --info -Dorg.gradle.java.home=${openjdk17_headless} resolveDependencies - ''; - installPhase = '' - ${findutils}/bin/find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \ - | ${perl}/bin/perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "${coreutils}/bin/install -Dm444 $1 \$out/maven/$x/$3/$4/$5" #e' \ - | sh - ''; - outputHashAlgo = "sha256"; - outputHashMode = "recursive"; - outputHash = "sha256-V7FlGxa+Q3ljohPldxlhi2Ak93TiEUggwFELLaR787w="; - }; -in - /* - stdenv.mkDerivation { - inherit pname version src; - - name = "${pname}-${version}.jar"; - - nativeBuildInputs = [ git ]; - - postPatch = addResolveStep; - - buildPhase = '' - ${gnused}/bin/sed -i "s#'bukkit-legacy',##" settings.gradle - ${gnused}/bin/sed -i "s#'bukkit-legacy:loader',##" settings.gradle - ${gnused}/bin/sed -i "s#'bungee',##" settings.gradle - ${gnused}/bin/sed -i "s#'bungee:loader',##" settings.gradle - ${gnused}/bin/sed -i "s#'nukkit',##" settings.gradle - ${gnused}/bin/sed -i "s#'nukkit:loader',##" settings.gradle - ${gnused}/bin/sed -i "s#'sponge',##" settings.gradle - ${gnused}/bin/sed -i "s#'sponge:loader',##" settings.gradle - ${gnused}/bin/sed -i "s#'sponge:sponge-service',##" settings.gradle - ${gnused}/bin/sed -i "s#'sponge:sponge-service-api8',##" settings.gradle - ${gnused}/bin/sed -i "s#'velocity'##" settings.gradle - export GRADLE_USER_HOME=$(${coreutils}/bin/mktemp -d) - - # add local maven repo - ${gnused}/bin/sed -i "s#mavenCentral()#mavenCentral(); maven { url '${deps}/maven' }#" build.gradle - ${gnused}/bin/sed -i "s#jcenter()#jcenter(); maven { url '${deps}/maven' }#" settings.gradle - ${gnused}/bin/sed -i "s#'fabric',##" settings.gradle - - ${gradle}/bin/gradle --offline --no-daemon --info -Dorg.gradle.java.home=${openjdk17_headless} build - ''; - - installPhase = '' - cp bukkit/loader/build/libs/LuckPerms-Bukkit-5.4.0.jar $out - ''; - - } - */ - fetchurl { - url = "https://ci.lucko.me/job/LuckPerms/lastSuccessfulBuild/artifact/bukkit/loader/build/libs/LuckPerms-Bukkit-5.4.113.jar"; - sha256 = "60c6a6d3d96c4af2a4b6404def15c868652b2ed46bba8f4a31594fca73307c96"; - } diff --git a/packages/minecraft/multiverse.nix b/packages/minecraft/multiverse.nix deleted file mode 100644 index 6331ac0d..00000000 --- a/packages/minecraft/multiverse.nix +++ /dev/null @@ -1,22 +0,0 @@ -{fetchurl}: { - core = fetchurl { - url = "https://dev.bukkit.org/projects/multiverse-core/files/4744018/download"; - sha256 = "98237aaf35c6ee7bfd95fb7f399ef703b3e72bff8eab488a904aad9d4530cd10"; - name = "Multiverse-Core-4.3.12.jar"; - }; - nether-portals = fetchurl { - url = "https://dev.bukkit.org/projects/multiverse-netherportals/files/4721150/download"; - sha256 = "97283955a93ada82f5e7093880384823e224671978b8e6769e3c27ba15b1bac3"; - name = "Multiverse-NetherPortals-4.2.3.jar"; - }; - sign-portals = fetchurl { - url = "https://dev.bukkit.org/projects/multiverse-signportals/files/4721189/download"; - sha256 = "149912e64cc27c44fb78e6ea127556e4ae7388d9e9e41ddb6b13e34203112fab"; - name = "Multiverse-SignPortals-4.2.2.jar"; - }; - inventories = fetchurl { - url = "https://dev.bukkit.org/projects/multiverse-inventories/files/4721185/download"; - sha256 = "2e1ef793883d8911690ccb5f8b9389306f5b95ab915f067875ff33b7cec4a7e8"; - name = "Multiverse-Inventories-4.2.6.jar"; - }; -} diff --git a/packages/minecraft/papermc/default.nix b/packages/minecraft/papermc/default.nix deleted file mode 100644 index 25e90f74..00000000 --- a/packages/minecraft/papermc/default.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - stdenvNoCC, - openjdk_headless, - callPackage, - lib, - writeScript, -}: let - paperJar = callPackage ./jar.nix {}; - versionInfo = builtins.fromJSON (builtins.readFile ./paper.json); -in - stdenvNoCC.mkDerivation { - preferLocalBuild = true; - pname = "paper"; - version = "${versionInfo.version}.${toString versionInfo.build}"; - dontUnpack = true; - dontConfigure = true; - - buildPhase = '' - cat > minecraft-server << EOF - #!/bin/sh - exec ${openjdk_headless}/bin/java \$@ -jar $out/share/papermc/papermc.jar nogui - ''; - - installPhase = '' - mkdir -p $out/share/papermc - ln -s ${paperJar} $out/share/papermc/papermc.jar - install -Dm555 -t $out/bin minecraft-server - ''; - - meta = { - description = "High performance minecraft server"; - # This is a fun one because while papermc’s patches are released under the gpl, they apply patches to a proprietary binary which they then execute, so - license = lib.licenses.gpl3; - unfree = true; - }; - passthru.updateScript = writeScript "update-paper" '' #! /usr/bin/env nix-shell - #! nix-shell -i bash -p curl jq - - curl -L https://papermc.io/api/v2/projects/paper/versions/1.21.1/builds | jq '{"version":.version, "build":.builds[-1].build, "name":.builds[-1].downloads.application.name, "sha256":.builds[-1].downloads.application.sha256}' > minecraft/papermc/paper.json - ''; - } diff --git a/packages/minecraft/papermc/jar.nix b/packages/minecraft/papermc/jar.nix deleted file mode 100644 index baddb3de..00000000 --- a/packages/minecraft/papermc/jar.nix +++ /dev/null @@ -1,7 +0,0 @@ -{fetchurl}: let - versionInfo = builtins.fromJSON (builtins.readFile ./paper.json); -in - fetchurl { - url = "https://papermc.io/api/v2/projects/paper/versions/${versionInfo.version}/builds/${toString versionInfo.build}/downloads/${versionInfo.name}"; - inherit (versionInfo) sha256; - } diff --git a/packages/minecraft/papermc/paper.json b/packages/minecraft/papermc/paper.json deleted file mode 100644 index fb17621a..00000000 --- a/packages/minecraft/papermc/paper.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.21.1", - "build": 128, - "name": "paper-1.21.1-128.jar", - "sha256": "4dab63990686350dbf713f9044991f112cebadb64a44865cd79a5a750b820d91" -} diff --git a/packages/minecraft/vault.nix b/packages/minecraft/vault.nix deleted file mode 100644 index c8c3039f..00000000 --- a/packages/minecraft/vault.nix +++ /dev/null @@ -1,6 +0,0 @@ -{fetchurl}: -fetchurl { - url = "https://github.com/MilkBowl/Vault/releases/download/1.7.3/Vault.jar"; - sha256 = "a6b5ed97f43a5cf5bbaf00a7c8cd23c5afc9bd003f849875af8b36e6cf77d01d"; - name = "Vault.jar"; -} diff --git a/packages/plover/didoesdigital-dictionary.json b/packages/plover/didoesdigital-dictionary.json deleted file mode 100644 index bf42b7d1..00000000 --- a/packages/plover/didoesdigital-dictionary.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/didoesdigital/steno-dictionaries", - "rev": "e5667c8aee25ccdfebe21bc3196701fcba42338d", - "date": "2024-10-25T11:21:44+10:00", - "path": "/nix/store/95284l410ha96cwlp70pkjs785cply0h-steno-dictionaries", - "sha256": "0rr9z9fivrd7z9k82b4fmyan606wkz0nxgw5a4kq1fpiqj2fcnpc", - "hash": "sha256-7FrmhMTxuoAnUYW/bsGf3ABjla+OLIFm+qflHV36KWc=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/plover/didoesdigital-dictionary.nix b/packages/plover/didoesdigital-dictionary.nix deleted file mode 100644 index f69222d1..00000000 --- a/packages/plover/didoesdigital-dictionary.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - fetchFromGitHub, - lib, -}: let - source = builtins.fromJSON (builtins.readFile ./didoesdigital-dictionary.json); -in - (fetchFromGitHub { - owner = "didoesdigital"; - repo = "steno-dictionaries"; - inherit (source) rev sha256; - }) - .overrideAttrs (_: { - meta.license = lib.licenses.gpl2; - passthru.updateScript = [../scripts/update-git.sh "https://github.com/didoesdigital/steno-dictionaries" "plover/didoesdigital-dictionary.json"]; - }) diff --git a/packages/plover/plover-dict-commands.nix b/packages/plover/plover-dict-commands.nix deleted file mode 100644 index 36c0893f..00000000 --- a/packages/plover/plover-dict-commands.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchPypi, - lib, - pythonOlder, - setuptools, - setuptools-scm, -}: let - plover = callPackage ./plover {}; -in - buildPythonPackage rec { - pname = "plover_dict_commands"; - version = "0.2.5"; - src = fetchPypi { - inherit pname version; - sha256 = "sha256-ki/M5V106YbQMjZQmkTNyBzFboVYi/x0hkLAXqPyk8Q="; - }; - - doCheck = false; - - disabled = pythonOlder "3.6"; - propagatedBuildInputs = [plover setuptools setuptools-scm]; - - meta = with lib; { - description = "Dictionaries stack manipulation commands for Plover."; - }; - passthru.updateScript = [../scripts/update-python-libraries "plover/plover-dict-commands.nix"]; - } diff --git a/packages/plover/plover-dotool-output.json b/packages/plover/plover-dotool-output.json deleted file mode 100644 index a00dd74f..00000000 --- a/packages/plover/plover-dotool-output.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/darkkirb/plover-dotool-output", - "rev": "95a908208b542b99b96fb571eb4a93140e299027", - "date": "2024-01-28T16:43:06+01:00", - "path": "/nix/store/1k4ygkkmnh7yvjsm86p36s7mw9wygzck-plover-dotool-output", - "sha256": "09m81p9p4dy3ylc1mwa4wx1da9l5ipzqw2sihpm1sbdwxyhxrzjw", - "hash": "sha256-XP7coe+8LR3qhVELjv+NhSbVQudE8RoY9cM3ctMNqCY=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/plover/plover-dotool-output.nix b/packages/plover/plover-dotool-output.nix deleted file mode 100644 index 6426347b..00000000 --- a/packages/plover/plover-dotool-output.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchFromGitHub, - lib, - pythonOlder, -}: let - plover = callPackage ./plover {}; - source = builtins.fromJSON (builtins.readFile ./plover-dotool-output.json); -in - buildPythonPackage rec { - pname = "plover_dotool_output"; - version = source.date; - src = fetchFromGitHub { - owner = "darkkirb"; - repo = "plover-dotool-output"; - inherit (source) rev sha256; - }; - - doCheck = false; - - disabled = pythonOlder "3.6"; - propagatedBuildInputs = [plover]; - - meta = with lib; { - description = "Plover output plugin for dotool"; - license = licenses.mit; - }; - passthru.updateScript = [../scripts/update-git.sh "https://github.com/darkkirb/plover-dotool-output" "plover/plover-dotool-output.json"]; - } diff --git a/packages/plover/plover-emoji.nix b/packages/plover/plover-emoji.nix deleted file mode 100644 index 519b688d..00000000 --- a/packages/plover/plover-emoji.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchPypi, - lib, - pythonOlder, -}: let - plover = callPackage ./plover {}; - simplefuzzyset = callPackage ../python/simplefuzzyset.nix {}; -in - buildPythonPackage rec { - pname = "plover_emoji"; - version = "0.0.4"; - src = fetchPypi { - inherit pname version; - sha256 = "sha256-22YRzSoJSFmES2P2uiA333kpxHGUV1Vlhun2q08LV+o="; - }; - - doCheck = false; - - disabled = pythonOlder "3.6"; - propagatedBuildInputs = [plover simplefuzzyset]; - - meta = with lib; { - description = "Convert text to emoji with a stroke."; - license = licenses.gpl3; - }; - passthru.updateScript = [../scripts/update-python-libraries "plover/plover-emoji.nix"]; - } diff --git a/packages/plover/plover-lapwing-aio.nix b/packages/plover/plover-lapwing-aio.nix deleted file mode 100644 index ab2da080..00000000 --- a/packages/plover/plover-lapwing-aio.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchPypi, - lib, - pythonOlder, -}: let - plover = callPackage ./plover {}; - plover-dict-commands = callPackage ./plover-dict-commands.nix {}; - plover-last-translation = callPackage ./plover-last-translation.nix {}; - plover-modal-dictionary = callPackage ./plover-modal-dictionary.nix {}; - plover-python-dictonary = callPackage ./plover-python-dictionary.nix {}; - plover-stitching = callPackage ./plover-stitching.nix {}; -in - buildPythonPackage rec { - pname = "plover_lapwing_aio"; - version = "1.3.5"; - src = fetchPypi { - inherit pname version; - sha256 = "sha256-wE/enSIds7BJqwlHbye/u+PC4riuLkcH9QpeGemjEUM="; - }; - - postPatch = '' - substituteInPlace setup.cfg --replace dev11 dev10 - ''; - - doCheck = false; - - disabled = pythonOlder "3.6"; - propagatedBuildInputs = [ - plover - plover-dict-commands - plover-last-translation - plover-modal-dictionary - plover-python-dictonary - plover-stitching - ]; - - meta = with lib; { - description = "Plover plugin to install Lapwing dependencies and extras."; - }; - passthru.updateScript = [../scripts/update-python-libraries "plover/plover-lapwing-aio.nix"]; - } diff --git a/packages/plover/plover-last-translation.nix b/packages/plover/plover-last-translation.nix deleted file mode 100644 index 02bb8823..00000000 --- a/packages/plover/plover-last-translation.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchPypi, - lib, - pythonOlder, -}: let - plover = callPackage ./plover {}; -in - buildPythonPackage rec { - pname = "plover_last_translation"; - version = "0.0.2"; - src = fetchPypi { - inherit pname version; - sha256 = "sha256-lmgjbuwdqZ8eeU4m/d1akFwwj5CmliEaLmXEKAubjdk="; - }; - - doCheck = false; - - disabled = pythonOlder "3.6"; - propagatedBuildInputs = [plover]; - - meta = with lib; { - description = "Dictionaries stack manipulation commands for Plover."; - }; - passthru.updateScript = [../scripts/update-python-libraries "plover/plover-last-translation.nix"]; - } diff --git a/packages/plover/plover-machine-hid.json b/packages/plover/plover-machine-hid.json deleted file mode 100644 index d59f3407..00000000 --- a/packages/plover/plover-machine-hid.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/dnaq/plover-machine-hid", - "rev": "45e90785ac7afd1b8714a308599aa3b6b6db3677", - "date": "2024-02-12T22:09:59+01:00", - "path": "/nix/store/mgv8pnbaifq1g9545rpl4h6pinv0yd0h-plover-machine-hid", - "sha256": "1ry64jglcw1zwawh83wlbihgnbdm54g8dxmxa99jix2ppd1r9453", - "hash": "sha256-o5CUQ7tX9ChTUr32hh4ptS37YFyUDwS54j9wRp8kxuc=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/plover/plover-machine-hid.nix b/packages/plover/plover-machine-hid.nix deleted file mode 100644 index 550157a0..00000000 --- a/packages/plover/plover-machine-hid.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchFromGitHub, - lib, - pythonOlder, - hid, - bitstring, -}: let - plover = callPackage ./plover {}; - source = builtins.fromJSON (builtins.readFile ./plover-machine-hid.json); -in - buildPythonPackage rec { - pname = "plover_machine_hid"; - version = source.date; - src = fetchFromGitHub { - owner = "dnaq"; - repo = "plover-machine-hid"; - inherit (source) rev sha256; - }; - - doCheck = false; - - disabled = pythonOlder "3.6"; - propagatedBuildInputs = [plover hid bitstring]; - - meta = with lib; { - description = "POC Plover plugin and firmware for the Plover HID protocol"; - license = licenses.mit; - }; - passthru.updateScript = [../scripts/update-git.sh "https://github.com/dnaq/plover-machine-hid" "plover/plover-machine-hid.json"]; - } diff --git a/packages/plover/plover-modal-dictionary.nix b/packages/plover/plover-modal-dictionary.nix deleted file mode 100644 index f6ac9fdb..00000000 --- a/packages/plover/plover-modal-dictionary.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchPypi, - lib, - pythonOlder, -}: let - plover = callPackage ./plover {}; -in - buildPythonPackage rec { - pname = "plover-modal-dictionary"; - version = "0.0.3"; - src = fetchPypi { - inherit pname version; - sha256 = "sha256-qLr5H6ZvPhzG4Wa6dK45iReABO0EvA5+2afp2ctnc1A="; - }; - - doCheck = false; - - disabled = pythonOlder "3.6"; - propagatedBuildInputs = [plover]; - - meta = with lib; { - description = "Dictionaries stack manipulation commands for Plover."; - }; - passthru.updateScript = [../scripts/update-python-libraries "plover/plover-modal-dictionary"]; - } diff --git a/packages/plover/plover-plugins-manager.nix b/packages/plover/plover-plugins-manager.nix deleted file mode 100644 index 10887e42..00000000 --- a/packages/plover/plover-plugins-manager.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchPypi, - lib, - pip, - pkginfo, - pygments, - readme_renderer, - requests, - requests-cache, - requests-futures, - setuptools, - wheel, - pythonOlder, -}: let - plover = callPackage ./plover {}; -in - buildPythonPackage rec { - pname = "plover_plugins_manager"; - version = "0.7.1"; - src = fetchPypi { - inherit pname version; - sha256 = "sha256-/RiWbGxPtm+0mhDi0heEVb6iBKuyBm6IOq2yrj17n9s="; - }; - - doCheck = false; - - disabled = pythonOlder "3.6"; - propagatedBuildInputs = [pip pkginfo plover pygments readme_renderer requests requests-cache requests-futures setuptools wheel]; - - meta = with lib; { - description = "Plugins manager for plover"; - license = licenses.gpl2Plus; - }; - passthru.updateScript = [../scripts/update-python-libraries "plover/plover-plugins-manager.nix"]; - } diff --git a/packages/plover/plover-python-dictionary.nix b/packages/plover/plover-python-dictionary.nix deleted file mode 100644 index 3de312f1..00000000 --- a/packages/plover/plover-python-dictionary.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchPypi, - lib, - pythonOlder, -}: let - plover = callPackage ./plover {}; -in - buildPythonPackage rec { - pname = "plover_python_dictionary"; - version = "1.1.0"; - src = fetchPypi { - inherit pname version; - sha256 = "sha256-YlHTmMtKWUadObGbsrsF+PUspCB4Kr+amy57DQ4eCQs="; - }; - - doCheck = false; - - disabled = pythonOlder "3.6"; - propagatedBuildInputs = [plover]; - - meta = with lib; { - description = "Python dictionary support for Plover."; - license = licenses.gpl3Plus; - }; - passthru.updateScript = [../scripts/update-python-libraries "plover/plover-python-dictionary.nix"]; - } diff --git a/packages/plover/plover-rkb1-hid.json b/packages/plover/plover-rkb1-hid.json deleted file mode 100644 index 93719b6f..00000000 --- a/packages/plover/plover-rkb1-hid.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://git.chir.rs/darkkirb/plover-machine-hid", - "rev": "45d339b4c86068c8c88388886454ee39667d6134", - "date": "2023-01-04T12:02:31+01:00", - "path": "/nix/store/qykphr5ny4a34nakm1rif0hbqn0irni7-plover-machine-hid", - "sha256": "01m1i9wg8hbzxxcllqq5mr0nf7v0ks44v20glxnvnicqwcmsdd7m", - "hash": "sha256-9bSmK+OYRbttpw+ITYieYB9nQa4FY0pZ739B9HiKoQY=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/plover/plover-rkb1-hid.nix b/packages/plover/plover-rkb1-hid.nix deleted file mode 100644 index a0cd006a..00000000 --- a/packages/plover/plover-rkb1-hid.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchgit, - lib, - pythonOlder, - hid, - bitstring, -}: let - plover = callPackage ./plover {}; - source = builtins.fromJSON (builtins.readFile ./plover-rkb1-hid.json); -in - buildPythonPackage { - pname = "plover_machine_hid"; - version = source.date; - src = fetchgit { - inherit (source) rev sha256 url; - }; - - doCheck = false; - - disabled = pythonOlder "3.6"; - propagatedBuildInputs = [plover hid bitstring]; - - meta = with lib; { - description = "POC Plover plugin and firmware for the Plover HID protocol"; - license = licenses.mit; - }; - passthru.updateScript = [../scripts/update-git.sh "https://git.chir.rs/darkkirb/plover-machine-hid" "plover/plover-rkb1-hid.json"]; - } diff --git a/packages/plover/plover-stenotype-extended.nix b/packages/plover/plover-stenotype-extended.nix deleted file mode 100644 index 98b16ac9..00000000 --- a/packages/plover/plover-stenotype-extended.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchPypi, - lib, - pythonOlder, -}: let - plover = callPackage ./plover {}; -in - buildPythonPackage rec { - pname = "plover-stenotype-extended"; - version = "1.0.0"; - src = fetchPypi { - inherit pname version; - sha256 = "sha256-IC9eGs5tMvA13h9STQtp5kfSVvSe2lIWzbPZCqoBZbU="; - }; - - doCheck = false; - - disabled = pythonOlder "3.6"; - propagatedBuildInputs = [plover]; - - meta = with lib; { - description = "Plover plugin for an extended Stenotype layout."; - license = licenses.gpl3Plus; - }; - passthru.updateScript = [../scripts/update-python-libraries "plover/plover-stenotype-extended.nix"]; - } diff --git a/packages/plover/plover-stitching.nix b/packages/plover/plover-stitching.nix deleted file mode 100644 index f75d5dd8..00000000 --- a/packages/plover/plover-stitching.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchPypi, - lib, - pythonOlder, -}: let - plover = callPackage ./plover {}; -in - buildPythonPackage rec { - pname = "plover_stitching"; - version = "0.1.0"; - src = fetchPypi { - inherit pname version; - sha256 = "sha256-08wsVTf89kKattOM0Uj/R/heW9zSX7JQBcza8aJJwxc="; - }; - - doCheck = false; - - disabled = pythonOlder "3.6"; - propagatedBuildInputs = [plover]; - - meta = with lib; { - description = "Stitch words like T-H-I-S using Plover strokes"; - }; - passthru.updateScript = [../scripts/update-python-libraries "plover/plover-stitching.nix"]; - } diff --git a/packages/plover/plover-stroke.nix b/packages/plover/plover-stroke.nix deleted file mode 100644 index 8cc07223..00000000 --- a/packages/plover/plover-stroke.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - buildPythonPackage, - fetchPypi, - pythonOlder, -}: -buildPythonPackage rec { - pname = "plover_stroke"; - version = "1.1.0"; - - src = fetchPypi { - inherit pname version; - sha256 = "sha256-3gOyP0ruZrZfaffU7MQjNoG0NUFQLYa/FP3inqpy0VM="; - }; - - # No tests available - doCheck = false; - - disabled = pythonOlder "3.6"; - - meta = with lib; { - homepage = "https://github.com/benoit-pierre/plover_stroke"; - description = "Helper class for working with steno strokes"; - license = licenses.gpl2Plus; - }; - passthru.updateScript = [../scripts/update-python-libraries "plover/plover-stroke.nix"]; -} diff --git a/packages/plover/plover-tapey-tape.nix b/packages/plover/plover-tapey-tape.nix deleted file mode 100644 index 1958f7c7..00000000 --- a/packages/plover/plover-tapey-tape.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchPypi, - lib, - pythonOlder, -}: let - plover = callPackage ./plover {}; -in - buildPythonPackage rec { - pname = "plover_tapey_tape"; - version = "0.0.6"; - src = fetchPypi { - inherit pname version; - sha256 = "sha256-nlSQK7lT5b2l1njmD1YZhBl0QWl9TYPRGAl4q2v17fs="; - }; - - doCheck = false; - - disabled = pythonOlder "3.6"; - propagatedBuildInputs = [plover]; - - meta = with lib; { - description = "Paper tape with extra information"; - license = licenses.gpl3; - }; - passthru.updateScript = [../scripts/update-python-libraries "plover/plover-tapey-tape.nix"]; - } diff --git a/packages/plover/plover-yaml-dictionary.nix b/packages/plover/plover-yaml-dictionary.nix deleted file mode 100644 index 0b00579d..00000000 --- a/packages/plover/plover-yaml-dictionary.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchPypi, - lib, - pythonOlder, - ruamel-yaml, -}: let - plover = callPackage ./plover {}; -in - buildPythonPackage rec { - pname = "plover_yaml_dictionary"; - version = "0.0.1"; - src = fetchPypi { - inherit pname version; - sha256 = "sha256-Etmq1+9ek1Wa5bAjaoOwv7F2l6zXIveRz/WCBuMwI9Y="; - }; - - doCheck = false; - - disabled = pythonOlder "3.6"; - propagatedBuildInputs = [plover ruamel-yaml]; - - meta = with lib; { - description = "YAML dictionary support for Plover."; - license = licenses.gpl3Plus; - }; - passthru.updateScript = [../scripts/update-python-libraries "plover/plover-yaml-dictionary.nix"]; - } diff --git a/packages/plover/plover/default.nix b/packages/plover/plover/default.nix deleted file mode 100644 index e6a2a20e..00000000 --- a/packages/plover/plover/default.nix +++ /dev/null @@ -1,94 +0,0 @@ -{ - lib, - callPackage, - buildPythonPackage, - qt5, - pytest, - mock, - babel, - pyqt5, - xlib, - pyserial, - appdirs, - wcwidth, - setuptools, - xkbcommon, - pkg-config, - fetchFromGitHub, - cmarkgfm, - wayland-scanner, - pywayland, - fetchPypi, -}: let - plover-stroke = callPackage ../plover-stroke.nix {}; - rtf-tokenize = callPackage ../../python/rtf-tokenize.nix {}; - pywayland_0_4_7 = - pywayland.overridePythonAttrs - (oldAttrs: rec { - pname = "pywayland"; - version = "0.4.7"; - - src = fetchPypi { - inherit pname version; - sha256 = "0IMNOPTmY22JCHccIVuZxDhVr41cDcKNkx8bp+5h2CU="; - }; - - doCheck = false; - }); -in - qt5.mkDerivationWith buildPythonPackage rec { - pname = "plover"; - version = "fd5668a3ad9bd091289dd2e5e8e2c1dec063d51f"; - src = fetchFromGitHub { - owner = "openstenoproject"; - repo = "plover"; - rev = "fd5668a3ad9bd091289dd2e5e8e2c1dec063d51f"; - sha256 = "2xvcNcJ07q4BIloGHgmxivqGq1BuXwZY2XWPLbFrdXg="; - }; - - # I'm not sure why we don't find PyQt5 here but there's a similar - # sed on many of the platforms Plover builds for - postPatch = '' - sed -i /PyQt5/d setup.cfg - substituteInPlace plover_build_utils/setup.py \ - --replace "/usr/share/wayland/wayland.xml" "${wayland-scanner}/share/wayland/wayland.xml" - ''; - - checkInputs = [pytest mock]; - propagatedBuildInputs = [ - babel - pyqt5 - xlib - pyserial - appdirs - wcwidth - setuptools - plover-stroke - rtf-tokenize - xkbcommon - cmarkgfm - pywayland_0_4_7 - ]; - nativeBuildInputs = [ - pkg-config - ]; - - installCheckPhase = "true"; - - #dontWrapQtApps = true; - - preFixup = '' - makeWrapperArgs+=("''${qtWrapperArgs[@]}") - ''; - - meta = { - homepage = "http://www.openstenoproject.org/"; - description = "Open Source Stenography Software"; - license = lib.licenses.gpl2Plus; - }; - passthru.updateScript = [ - ../../scripts/update-git.sh - "https://github.com/openstenoproject/plover" - "plover/plover/source.json" - ]; - } diff --git a/packages/plover/plover/source.json b/packages/plover/plover/source.json deleted file mode 100644 index 970c67e6..00000000 --- a/packages/plover/plover/source.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://github.com/openstenoproject/plover", - "rev": "9b5a357f1fb57cb0a9a8596ae12cd1e84fcff6c4", - "date": "2024-03-28T12:36:57-04:00", - "path": "/nix/store/mp9z6y015378jhis06qz46vvwhlji4yx-plover", - "sha256": "0crws84n31fbbkpavqz66gy35x1bz23m2bi8f95762r0ny9jmmy8", - "hash": "sha256-yNcqk7cgC3NKciguUYf4K/Qy/DPm463uXMuFYQnSPDM=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/python/mautrix-1.19.nix b/packages/python/mautrix-1.19.nix deleted file mode 100644 index c3494e34..00000000 --- a/packages/python/mautrix-1.19.nix +++ /dev/null @@ -1,46 +0,0 @@ -{ - lib, - buildPythonPackage, - fetchPypi, - aiohttp, - pythonOlder, - sqlalchemy, - ruamel-yaml, - CommonMark, - lxml, - aiosqlite, -}: -buildPythonPackage rec { - pname = "mautrix"; - version = "0.19.16"; - - src = fetchPypi { - inherit pname version; - sha256 = "sha256-x6X2IH6sZewxFoszVe2WbcQ6MlIaatnm4V4ae9WhphM="; - }; - - propagatedBuildInputs = [ - aiohttp - - # defined in optional-requirements.txt - sqlalchemy - aiosqlite - ruamel-yaml - CommonMark - lxml - ]; - - disabled = pythonOlder "3.8"; - - # no tests available - doCheck = false; - - pythonImportsCheck = ["mautrix"]; - - meta = with lib; { - homepage = "https://github.com/tulir/mautrix-python"; - description = "A Python 3 asyncio Matrix framework."; - license = licenses.mpl20; - }; - passthru.updateScript = [../scripts/update-python-libraries "python/mautrix.nix"]; -} diff --git a/packages/python/mautrix.nix b/packages/python/mautrix.nix deleted file mode 100644 index bcfb7f0e..00000000 --- a/packages/python/mautrix.nix +++ /dev/null @@ -1,46 +0,0 @@ -{ - lib, - buildPythonPackage, - fetchPypi, - aiohttp, - pythonOlder, - sqlalchemy, - ruamel-yaml, - CommonMark, - lxml, - aiosqlite, -}: -buildPythonPackage rec { - pname = "mautrix"; - version = "0.20.6"; - - src = fetchPypi { - inherit pname version; - sha256 = "sha256-jjOISBrwOOs0El7m3v4Zxo1dHj95jYnd4b1cfzq0NyM="; - }; - - propagatedBuildInputs = [ - aiohttp - - # defined in optional-requirements.txt - sqlalchemy - aiosqlite - ruamel-yaml - CommonMark - lxml - ]; - - disabled = pythonOlder "3.8"; - - # no tests available - doCheck = false; - - pythonImportsCheck = ["mautrix"]; - - meta = with lib; { - homepage = "https://github.com/tulir/mautrix-python"; - description = "A Python 3 asyncio Matrix framework."; - license = licenses.mpl20; - }; - passthru.updateScript = [../scripts/update-python-libraries "python/mautrix.nix"]; -} diff --git a/packages/python/rtf-tokenize.nix b/packages/python/rtf-tokenize.nix deleted file mode 100644 index e2500d67..00000000 --- a/packages/python/rtf-tokenize.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - buildPythonPackage, - fetchPypi, - pythonOlder, -}: -buildPythonPackage rec { - pname = "rtf_tokenize"; - version = "1.0.0"; - - src = fetchPypi { - inherit pname version; - sha256 = "sha256-XD3zkNAEeb12N8gjv81v37Id3RuWroFUY95+HtOS1gg="; - }; - - # No tests available - doCheck = false; - - disabled = pythonOlder "3.6"; - - meta = with lib; { - homepage = "https://github.com/benoit-pierre/rtf_tokenize"; - description = "Simple RTF tokenizer"; - license = licenses.gpl2Plus; - }; - passthru.updateScript = [../scripts/update-python-libraries "python/rtf-tokenize.nix"]; -} diff --git a/packages/python/simplefuzzyset.nix b/packages/python/simplefuzzyset.nix deleted file mode 100644 index 9ba45022..00000000 --- a/packages/python/simplefuzzyset.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ - callPackage, - buildPythonPackage, - fetchPypi, - lib, - pythonOlder, -}: -buildPythonPackage rec { - pname = "simplefuzzyset"; - version = "0.0.12"; - src = fetchPypi { - inherit pname version; - sha256 = "sha256-mhsww4tq+3bGYAvdZsHB3D2FBbCC6ePUZvYPQOi34fI="; - }; - - doCheck = false; - - disabled = pythonOlder "3.6"; - - meta = with lib; { - description = "A simpler python fuzzyset implementation."; - license = licenses.bsd3; # Unclear, author specifies OSI approved bsd license but not which - }; - passthru.updateScript = [../scripts/update-python-libraries "python/simplefuzzyset.nix"]; -} diff --git a/packages/python/tulir-telethon.nix b/packages/python/tulir-telethon.nix deleted file mode 100644 index 2475f73b..00000000 --- a/packages/python/tulir-telethon.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ - lib, - buildPythonPackage, - fetchPypi, - openssl, - rsa, - pyaes, - pythonOlder, -}: -buildPythonPackage rec { - pname = "tulir-telethon"; - version = "1.37.0a1"; - - src = fetchPypi { - inherit pname version; - sha256 = "sha256-FckMHqGaBsqvFbrEnDWqJAQG8j/euY2NooesnxV6Kcc="; - }; - - patchPhase = '' - substituteInPlace telethon/crypto/libssl.py --replace \ - "ctypes.util.find_library('ssl')" "'${lib.getLib openssl}/lib/libssl.so'" - ''; - - propagatedBuildInputs = [ - rsa - pyaes - ]; - - # No tests available - doCheck = false; - - disabled = pythonOlder "3.5"; - - meta = with lib; { - homepage = "https://github.com/LonamiWebs/Telethon"; - description = "Full-featured Telegram client library for Python 3"; - license = licenses.mit; - }; - passthru.updateScript = [../scripts/update-python-libraries "python/tulir-telethon.nix"]; -} diff --git a/packages/python/update.sh b/packages/python/update.sh deleted file mode 100755 index be319201..00000000 --- a/packages/python/update.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env nix-shell -#! nix-shell -i bash -p curl jq -set -e -PACKAGES="plover-plugins-manager plover-stroke rtf-tokenize plover-emoji plover-tapey-tape plover-yaml-dictionary simplefuzzyset mautrix tulir-telethon" - -cat > tarballs.nix << EOF -{ fetchurl }: rec { -EOF - -for package in $PACKAGES; do - JSON=$(curl "https://pypi.org/pypi/$package/json") - FILE_INFO=$(echo -E "$JSON" | jq '.releases[.info.version][] | select (.packagetype == "sdist")') - VERSION=$(echo -E "$JSON" | jq -r '.info.version') - URL=$(echo "$FILE_INFO" | jq -r '.url') - SHA256=$(echo "$FILE_INFO" | jq -r '.digests.sha256') - sanitized_package=$(echo $package | sed 's/\./-/g') - cat >> tarballs.nix << EOF - $sanitized_package-src = fetchurl { - url = "$URL"; - sha256 = "$SHA256"; - passthru.pname = "$package"; - passthru.version = "$VERSION"; - }; -EOF -done - -cat >> tarballs.nix << EOF -} -EOF diff --git a/packages/python/yiffstash.json b/packages/python/yiffstash.json deleted file mode 100644 index e0c86f2a..00000000 --- a/packages/python/yiffstash.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://git.chir.rs/CarolineHusky/Caroline_Yiffstash_bot.git", - "rev": "d1553380be462502918eebbccdc86ee345d2cc6e", - "date": "2024-03-18T21:42:10+01:00", - "path": "/nix/store/9gmmvjqag8l2pkzkdk4rf0a78nml3cfm-Caroline_Yiffstash_bot", - "sha256": "0lzjm3cvr7fdw6prgrxvc1dvm9xhxx4nrzdsmp58xxi3cpwsmbpr", - "hash": "sha256-+a6q+WUj9o7Krbr9bEnvsKe6W2C755ev4c2dvNmo8lM=", - "fetchLFS": true, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/packages/python/yiffstash.nix b/packages/python/yiffstash.nix deleted file mode 100644 index 6fe63223..00000000 --- a/packages/python/yiffstash.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - fetchgit, - python3, - writeScript, - curl, - jq, -}: let - source = builtins.fromJSON (builtins.readFile ./yiffstash.json); - python = python3.withPackages (pkgs: with pkgs; [requests]); - src = fetchgit { - inherit (source) url rev sha256 fetchLFS; - }; -in - (writeScript "yiffstash" "cd ${src}; ${python}/bin/python ${src}/tumblrbot.py").overrideAttrs (super: { - passthru.updateScript = '' - CURRENT_COMMIT=$(${curl}/bin/curl https://git.chir.rs/api/v1/repos/CarolineHusky/Caroline_Yiffstash_bot/commits | ${jq}/bin/jq -r '.[0].sha') - KNOWN_COMMIT=${source.rev} - if [ "$CURRENT_COMMIT"!= "$KNOWN_COMMIT" ]; then - ${../scripts/update-git.sh} "https://git.chir.rs/CarolineHusky/Caroline_Yiffstash_bot.git" python/yiffstash.json --fetch-lfs - fi - ''; - }) diff --git a/packages/scripts/add-go-module.sh b/packages/scripts/add-go-module.sh deleted file mode 100755 index de03a341..00000000 --- a/packages/scripts/add-go-module.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p go gnumake - -set -x - -export GO111MODULE=on - -SOURCE=$1 -WRITE_PATH=$(realpath $2) -SOURCE_EXTRACTED=$(mktemp -du) - -cp -r $SOURCE $SOURCE_EXTRACTED -chmod -R +w $SOURCE_EXTRACTED - -cd $SOURCE_EXTRACTED - -for module in $3; do - go get $module -done - -echo -e "\nstorjds storj.io/ipfs-go-ds-storj/plugin 0" >> plugin/loader/preload_list - -go mod tidy - -make build - -for module in $3; do - go get $module -done - -make build - -cp go.mod go.sum $WRITE_PATH - -nix run github:nix-community/gomod2nix -- --dir $SOURCE_EXTRACTED --outdir $WRITE_PATH diff --git a/packages/scripts/post-build-hook b/packages/scripts/post-build-hook deleted file mode 100755 index 2e800dea..00000000 --- a/packages/scripts/post-build-hook +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -set -euf -export IFS=' ' -/nix/var/nix/profiles/default/bin/nix run 'github:DarkKirb/nix-packages#attic-client' -- push cache $OUT_PATHS diff --git a/packages/scripts/update-git.sh b/packages/scripts/update-git.sh deleted file mode 100755 index f9e0cc85..00000000 --- a/packages/scripts/update-git.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p nix-prefetch-git -URL=$1 -WRITE_PATH=$2 - -nix-prefetch-git $3 $URL | grep -v "Git " > $WRITE_PATH \ No newline at end of file diff --git a/packages/scripts/update-go.sh b/packages/scripts/update-go.sh deleted file mode 100755 index 84f61bc3..00000000 --- a/packages/scripts/update-go.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -SOURCE=$1 -WRITE_PATH=$(realpath $2) - -nix run github:darkkirb/gomod2nix -vL -- --dir $SOURCE --outdir $WRITE_PATH diff --git a/packages/scripts/update-gradle.sh b/packages/scripts/update-gradle.sh deleted file mode 100755 index 97703822..00000000 --- a/packages/scripts/update-gradle.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p nix-prefetch -PACKAGE_PATH=$1 -WRITE_PATH=$2 - -nix-prefetch "{ sha256 }: (callPackage (import $PACKAGE_PATH) { }).overrideAttrs (_: { outputHash = sha256; })" > $WRITE_PATH diff --git a/packages/scripts/update-json.sh b/packages/scripts/update-json.sh deleted file mode 100755 index fd1324fc..00000000 --- a/packages/scripts/update-json.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p curl -URL=$1 -WRITE_PATH=$2 - -curl -L $URL > $WRITE_PATH \ No newline at end of file diff --git a/packages/scripts/update-mix.sh b/packages/scripts/update-mix.sh deleted file mode 100755 index fe23e24c..00000000 --- a/packages/scripts/update-mix.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p mix2nix -SOURCE_DIR=$1 -MIX2NIX_OUT=$2 - -mix2nix $SOURCE_DIR/mix.lock > $MIX2NIX_OUT \ No newline at end of file diff --git a/packages/scripts/update-python-libraries b/packages/scripts/update-python-libraries deleted file mode 100755 index 3b1ca96d..00000000 --- a/packages/scripts/update-python-libraries +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -set -x -build=`nix-build -E "with import {}; python3.withPackages(ps: with ps; [ packaging requests toolz ])"` -python=${build}/bin/python -exec ${python} scripts/update-python-libraries.py $@ - diff --git a/packages/scripts/update-python-libraries.py b/packages/scripts/update-python-libraries.py deleted file mode 100755 index 4f90836b..00000000 --- a/packages/scripts/update-python-libraries.py +++ /dev/null @@ -1,474 +0,0 @@ -#!/usr/bin/env python3 - -""" -Update a Python package expression by passing in the `.nix` file, or the directory containing it. -You can pass in multiple files or paths. - -You'll likely want to use -`` - $ ./update-python-libraries ../../pkgs/development/python-modules/**/default.nix -`` -to update all non-pinned libraries in that folder. -""" - -import argparse -import os -import pathlib -import re -import requests -from concurrent.futures import ThreadPoolExecutor as Pool -from packaging.version import Version as _Version -from packaging.version import InvalidVersion -from packaging.specifiers import SpecifierSet -import collections -import subprocess - -INDEX = "https://pypi.io/pypi" -"""url of PyPI""" - -EXTENSIONS = ['tar.gz', 'tar.bz2', 'tar', 'zip', '.whl'] -"""Permitted file extensions. These are evaluated from left to right and the first occurance is returned.""" - -PRERELEASES = False - -GIT = "git" - -NIXPGKS_ROOT = subprocess.check_output(["git", "rev-parse", "--show-toplevel"]).decode('utf-8').strip() - -import logging -logging.basicConfig(level=logging.INFO) - - -class Version(_Version, collections.abc.Sequence): - - def __init__(self, version): - super().__init__(version) - # We cannot use `str(Version(0.04.21))` because that becomes `0.4.21` - # https://github.com/avian2/unidecode/issues/13#issuecomment-354538882 - self.raw_version = version - self.full_version = list(self._version.release) - if self._version.dev is not None: - self.full_version += list(self._version.dev) - - def __getitem__(self, i): - return self.full_version[i] - - def __len__(self): - return len(self.full_version) - - def __iter__(self): - yield from self.full_version - - -def _get_values(attribute, text): - """Match attribute in text and return all matches. - - :returns: List of matches. - """ - regex = '{}\s+=\s+"(.*)";'.format(attribute) - regex = re.compile(regex) - values = regex.findall(text) - return values - -def _get_unique_value(attribute, text): - """Match attribute in text and return unique match. - - :returns: Single match. - """ - values = _get_values(attribute, text) - n = len(values) - if n > 1: - raise ValueError("found too many values for {}".format(attribute)) - elif n == 1: - return values[0] - else: - raise ValueError("no value found for {}".format(attribute)) - -def _get_line_and_value(attribute, text): - """Match attribute in text. Return the line and the value of the attribute.""" - regex = '({}\s+=\s+"(.*)";)'.format(attribute) - regex = re.compile(regex) - value = regex.findall(text) - n = len(value) - if n > 1: - raise ValueError("found too many values for {}".format(attribute)) - elif n == 1: - return value[0] - else: - raise ValueError("no value found for {}".format(attribute)) - - -def _replace_value(attribute, value, text): - """Search and replace value of attribute in text.""" - old_line, old_value = _get_line_and_value(attribute, text) - new_line = old_line.replace(old_value, value) - new_text = text.replace(old_line, new_line) - return new_text - - -def _fetch_page(url): - r = requests.get(url) - if r.status_code == requests.codes.ok: - return r.json() - else: - raise ValueError("request for {} failed".format(url)) - - -def _fetch_github(url): - headers = {} - token = os.environ.get('GITHUB_API_TOKEN') - if token: - headers["Authorization"] = f"token {token}" - r = requests.get(url, headers=headers) - - if r.status_code == requests.codes.ok: - return r.json() - else: - raise ValueError("request for {} failed".format(url)) - - -SEMVER = { - 'major' : 0, - 'minor' : 1, - 'patch' : 2, -} - - -def _determine_latest_version(current_version, target, versions): - """Determine latest version, given `target`. - """ - current_version = Version(current_version) - - def _parse_versions(versions): - for v in versions: - try: - yield Version(v) - except InvalidVersion: - pass - - versions = _parse_versions(versions) - - index = SEMVER[target] - - ceiling = list(current_version[0:index]) - if len(ceiling) == 0: - ceiling = None - else: - ceiling[-1]+=1 - ceiling = Version(".".join(map(str, ceiling))) - - if ceiling is not None: - versions = SpecifierSet(f"<{ceiling}").filter(versions) - - return (max(sorted(versions))).raw_version - - -def _get_latest_version_pypi(package, extension, current_version, target): - """Get latest version and hash from PyPI.""" - url = "{}/{}/json".format(INDEX, package) - json = _fetch_page(url) - - versions = json['releases'].keys() - version = _determine_latest_version(current_version, target, versions) - - try: - releases = json['releases'][version] - except KeyError as e: - raise KeyError('Could not find version {} for {}'.format(version, package)) from e - for release in releases: - if release['filename'].endswith(extension): - # TODO: In case of wheel we need to do further checks! - sha256 = release['digests']['sha256'] - break - else: - sha256 = None - return version, sha256, None - - -def _get_latest_version_github(package, extension, current_version, target): - def strip_prefix(tag): - return re.sub("^[^0-9]*", "", tag) - - def get_prefix(string): - matches = re.findall(r"^([^0-9]*)", string) - return next(iter(matches), "") - - # when invoked as an updateScript, UPDATE_NIX_ATTR_PATH will be set - # this allows us to work with packages which live outside of python-modules - attr_path = os.environ.get("UPDATE_NIX_ATTR_PATH", f"python3Packages.{package}") - try: - homepage = subprocess.check_output( - ["nix", "eval", "-f", f"{NIXPGKS_ROOT}/default.nix", "--raw", f"{attr_path}.src.meta.homepage"])\ - .decode('utf-8') - except Exception as e: - raise ValueError(f"Unable to determine homepage: {e}") - owner_repo = homepage[len("https://github.com/"):] # remove prefix - owner, repo = owner_repo.split("/") - - url = f"https://api.github.com/repos/{owner}/{repo}/releases" - all_releases = _fetch_github(url) - releases = list(filter(lambda x: not x['prerelease'], all_releases)) - - if len(releases) == 0: - raise ValueError(f"{homepage} does not contain any stable releases") - - versions = map(lambda x: strip_prefix(x['tag_name']), releases) - version = _determine_latest_version(current_version, target, versions) - - release = next(filter(lambda x: strip_prefix(x['tag_name']) == version, releases)) - prefix = get_prefix(release['tag_name']) - try: - sha256 = subprocess.check_output(["nix-prefetch-url", "--type", "sha256", "--unpack", f"{release['tarball_url']}"], stderr=subprocess.DEVNULL)\ - .decode('utf-8').strip() - except: - # this may fail if they have both a branch and a tag of the same name, attempt tag name - tag_url = str(release['tarball_url']).replace("tarball","tarball/refs/tags") - sha256 = subprocess.check_output(["nix-prefetch-url", "--type", "sha256", "--unpack", tag_url], stderr=subprocess.DEVNULL)\ - .decode('utf-8').strip() - - - return version, sha256, prefix - - -FETCHERS = { - 'fetchFromGitHub' : _get_latest_version_github, - 'fetchPypi' : _get_latest_version_pypi, - 'fetchurl' : _get_latest_version_pypi, -} - - -DEFAULT_SETUPTOOLS_EXTENSION = 'tar.gz' - - -FORMATS = { - 'setuptools' : DEFAULT_SETUPTOOLS_EXTENSION, - 'wheel' : 'whl', - 'pyproject' : 'tar.gz', - 'flit' : 'tar.gz' -} - -def _determine_fetcher(text): - # Count occurences of fetchers. - nfetchers = sum(text.count('src = {}'.format(fetcher)) for fetcher in FETCHERS.keys()) - if nfetchers == 0: - raise ValueError("no fetcher.") - elif nfetchers > 1: - raise ValueError("multiple fetchers.") - else: - # Then we check which fetcher to use. - for fetcher in FETCHERS.keys(): - if 'src = {}'.format(fetcher) in text: - return fetcher - - -def _determine_extension(text, fetcher): - """Determine what extension is used in the expression. - - If we use: - - fetchPypi, we check if format is specified. - - fetchurl, we determine the extension from the url. - - fetchFromGitHub we simply use `.tar.gz`. - """ - if fetcher == 'fetchPypi': - try: - src_format = _get_unique_value('format', text) - except ValueError as e: - src_format = None # format was not given - - try: - extension = _get_unique_value('extension', text) - except ValueError as e: - extension = None # extension was not given - - if extension is None: - if src_format is None: - src_format = 'setuptools' - elif src_format == 'other': - raise ValueError("Don't know how to update a format='other' package.") - extension = FORMATS[src_format] - - elif fetcher == 'fetchurl': - url = _get_unique_value('url', text) - extension = os.path.splitext(url)[1] - if 'pypi' not in url: - raise ValueError('url does not point to PyPI.') - - elif fetcher == 'fetchFromGitHub': - if "fetchSubmodules" in text: - raise ValueError("fetchFromGitHub fetcher doesn't support submodules") - extension = "tar.gz" - - return extension - - -def _update_package(path, target): - - # Read the expression - with open(path, 'r') as f: - text = f.read() - - # Determine pname. Many files have more than one pname - pnames = _get_values('pname', text) - - # Determine version. - version = _get_unique_value('version', text) - - # First we check how many fetchers are mentioned. - fetcher = _determine_fetcher(text) - - extension = _determine_extension(text, fetcher) - - # Attempt a fetch using each pname, e.g. backports-zoneinfo vs backports.zoneinfo - successful_fetch = False - for pname in pnames: - try: - new_version, new_sha256, prefix = FETCHERS[fetcher](pname, extension, version, target) - successful_fetch = True - break - except ValueError: - continue - - if not successful_fetch: - raise ValueError(f"Unable to find correct package using these pnames: {pnames}") - - if new_version == version: - logging.info("Path {}: no update available for {}.".format(path, pname)) - return False - elif Version(new_version) <= Version(version): - raise ValueError("downgrade for {}.".format(pname)) - if not new_sha256: - raise ValueError("no file available for {}.".format(pname)) - - text = _replace_value('version', new_version, text) - # hashes from pypi are 16-bit encoded sha256's, normalize it to sri to avoid merge conflicts - # sri hashes have been the default format since nix 2.4+ - try: - sri_hash = subprocess.check_output(["nix", "hash", "to-sri", "--type", "sha256", new_sha256]).decode('utf-8').strip() - except subprocess.CalledProcessError: - # nix<2.4 compat - sri_hash = subprocess.check_output(["nix", "to-sri", "--type", "sha256", new_sha256]).decode('utf-8').strip() - - - # fetchers can specify a sha256, or a sri hash - try: - text = _replace_value('sha256', sri_hash, text) - except ValueError: - text = _replace_value('hash', sri_hash, text) - - if fetcher == 'fetchFromGitHub': - # in the case of fetchFromGitHub, it's common to see `rev = version;` or `rev = "v${version}";` - # in which no string value is meant to be substituted. However, we can just overwrite the previous value. - regex = '(rev\s+=\s+[^;]*;)' - regex = re.compile(regex) - matches = regex.findall(text) - n = len(matches) - - if n == 0: - raise ValueError("Unable to find rev value for {}.".format(pname)) - else: - # forcefully rewrite rev, incase tagging conventions changed for a release - match = matches[0] - text = text.replace(match, f'rev = "refs/tags/{prefix}${{version}}";') - # incase there's no prefix, just rewrite without interpolation - text = text.replace('"${version}";', 'version;') - - with open(path, 'w') as f: - f.write(text) - - logging.info("Path {}: updated {} from {} to {}".format(path, pname, version, new_version)) - - result = { - 'path' : path, - 'target': target, - 'pname': pname, - 'old_version' : version, - 'new_version' : new_version, - #'fetcher' : fetcher, - } - - return result - - -def _update(path, target): - - # We need to read and modify a Nix expression. - if os.path.isdir(path): - path = os.path.join(path, 'default.nix') - - # If a default.nix does not exist, we quit. - if not os.path.isfile(path): - logging.info("Path {}: does not exist.".format(path)) - return False - - # If file is not a Nix expression, we quit. - if not path.endswith(".nix"): - logging.info("Path {}: does not end with `.nix`.".format(path)) - return False - - try: - return _update_package(path, target) - except ValueError as e: - logging.warning("Path {}: {}".format(path, e)) - return False - - -def _commit(path, pname, old_version, new_version, pkgs_prefix="python: ", **kwargs): - """Commit result. - """ - - msg = f'{pkgs_prefix}{pname}: {old_version} -> {new_version}' - - try: - subprocess.check_call([GIT, 'add', path]) - subprocess.check_call([GIT, 'commit', '-m', msg]) - except subprocess.CalledProcessError as e: - subprocess.check_call([GIT, 'checkout', path]) - raise subprocess.CalledProcessError(f'Could not commit {path}') from e - - return True - - -def main(): - - epilog = """ -environment variables: - GITHUB_API_TOKEN\tGitHub API token used when updating github packages - """ - parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter, epilog=epilog) - parser.add_argument('package', type=str, nargs='+') - parser.add_argument('--target', type=str, choices=SEMVER.keys(), default='major') - parser.add_argument('--commit', action='store_true', help='Create a commit for each package update') - parser.add_argument('--use-pkgs-prefix', action='store_true', help='Use python3Packages.${pname}: instead of python: ${pname}: when making commits') - - args = parser.parse_args() - target = args.target - - packages = list(map(os.path.abspath, args.package)) - - logging.info("Updating packages...") - - # Use threads to update packages concurrently - with Pool() as p: - results = list(filter(bool, p.map(lambda pkg: _update(pkg, target), packages))) - - logging.info("Finished updating packages.") - - commit_options = {} - if args.use_pkgs_prefix: - logging.info("Using python3Packages. prefix for commits") - commit_options["pkgs_prefix"] = "python3Packages." - - # Commits are created sequentially. - if args.commit: - logging.info("Committing updates...") - # list forces evaluation - list(map(lambda x: _commit(**x, **commit_options), results)) - logging.info("Finished committing updates") - - count = len(results) - logging.info("{} package(s) updated".format(count)) - - - -if __name__ == '__main__': - main() diff --git a/packages/scripts/update-yarn.sh b/packages/scripts/update-yarn.sh deleted file mode 100755 index d33b99ff..00000000 --- a/packages/scripts/update-yarn.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p yarn2nix nodejs yarn - -SOURCE=$1 -WRITE_PATH=$(realpath $2) -SOURCE_EXTRACTED=$(mktemp -du) - -cp -r $SOURCE $SOURCE_EXTRACTED -chmod -R +w $SOURCE_EXTRACTED - -cd $SOURCE_EXTRACTED - -yarn install - -yarn2nix --lockfile $SOURCE_EXTRACTED/yarn.lock > $WRITE_PATH/yarn.nix -cp $SOURCE_EXTRACTED/package.json $WRITE_PATH/package.json -cp $SOURCE_EXTRACTED/yarn.lock $WRITE_PATH/yarn.lock - - -rm -rf $SOURCE_EXTRACTED diff --git a/packages/scripts/update.nix b/packages/scripts/update.nix deleted file mode 100644 index c83759d7..00000000 --- a/packages/scripts/update.nix +++ /dev/null @@ -1,185 +0,0 @@ -{ - package ? null, - maintainer ? null, - predicate ? null, - path ? null, - max-workers ? null, - include-overlays ? false, - keep-going ? null, - commit ? null, -}: -# TODO: add assert statements -let - nixpkgs = import ( - if !include-overlays - then {overlays = [];} - else if include-overlays - then {} # Let Nixpkgs include overlays impurely. - else {overlays = include-overlays;} - ); - pkgs = (import ../../default.nix).packages.${nixpkgs.system}; - - inherit (nixpkgs) lib; - - /* - Remove duplicate elements from the list based on some extracted value. O(n^2) complexity. - */ - nubOn = f: list: - if list == [] - then [] - else let - x = lib.head list; - xs = lib.filter (p: f x != f p) (lib.drop 1 list); - in - [x] ++ nubOn f xs; - - /* - Recursively find all packages (derivations) in `pkgs` matching `cond` predicate. - - Type: packagesWithPath :: AttrPath → (AttrPath → derivation → bool) → AttrSet → List - AttrPath :: [str] - - The packages will be returned as a list of named pairs comprising of: - - attrPath: stringified attribute path (based on `rootPath`) - - package: corresponding derivation - */ - packagesWithPath = rootPath: cond: pkgs: let - packagesWithPathInner = path: pathContent: let - result = builtins.tryEval pathContent; - - dedupResults = lst: - nubOn ({ - package, - attrPath, - }: - package.updateScript) (lib.concatLists lst); - in - if result.success - then let - evaluatedPathContent = result.value; - in - if lib.isDerivation evaluatedPathContent - then - lib.optional (cond path evaluatedPathContent) { - attrPath = lib.concatStringsSep "." path; - package = evaluatedPathContent; - } - else if lib.isAttrs evaluatedPathContent - then - # If user explicitly points to an attrSet or it is marked for recursion, we recur. - if path == rootPath || evaluatedPathContent.recurseForDerivations or false || evaluatedPathContent.recurseForRelease or false - then dedupResults (lib.mapAttrsToList (name: packagesWithPathInner (path ++ [name])) evaluatedPathContent) - else [] - else [] - else []; - in - packagesWithPathInner rootPath pkgs; - - /* - Recursively find all packages (derivations) in `pkgs` matching `cond` predicate. - */ - packagesWith = packagesWithPath []; - - allPackagesWithUpdateScript = packagesWith (_: builtins.hasAttr "updateScript"); - - /* - Recursively find all packages under `path` in `pkgs` with updateScript. - */ - packagesWithUpdateScript = path: pkgs: let - prefix = lib.splitString "." path; - pathContent = lib.attrByPath prefix null pkgs; - in - if pathContent == null - then builtins.throw "Attribute path `${path}` does not exist." - else - packagesWithPath prefix (path: builtins.hasAttr "updateScript") - pathContent; - - /* - List of packages matched based on the CLI arguments. - */ - packages = - if path != null - then packagesWithUpdateScript path pkgs - else allPackagesWithUpdateScript pkgs; - - helpText = '' - Please run: - - % nix-shell maintainers/scripts/update.nix --argstr maintainer garbas - - to run all update scripts for all packages that lists \`garbas\` as a maintainer - and have \`updateScript\` defined, or: - - % nix-shell maintainers/scripts/update.nix --argstr package gnome.nautilus - - to run update script for specific package, or - - % nix-shell maintainers/scripts/update.nix --arg predicate '(path: pkg: pkg.updateScript.name or null == "gnome-update-script")' - - to run update script for all packages matching given predicate, or - - % nix-shell maintainers/scripts/update.nix --argstr path gnome - - to run update script for all package under an attribute path. - - You can also add - - --argstr max-workers 8 - - to increase the number of jobs in parallel, or - - --argstr keep-going true - - to continue running when a single update fails. - - You can also make the updater automatically commit on your behalf from updateScripts - that support it by adding - - --argstr commit true - ''; - - /* - Transform a matched package into an object for update.py. - */ - packageData = { - package, - attrPath, - }: { - inherit (package) name; - pname = lib.getName package; - oldVersion = lib.getVersion package; - updateScript = map builtins.toString (lib.toList (package.updateScript.command or package.updateScript)); - supportedFeatures = package.updateScript.supportedFeatures or []; - attrPath = package.updateScript.attrPath or attrPath; - }; - - /* - JSON file with data for update.py. - */ - packagesJson = nixpkgs.writeText "packages.json" (builtins.toJSON (map packageData packages)); - - optionalArgs = - lib.optional (max-workers != null) "--max-workers=${max-workers}" - ++ lib.optional (keep-going == "true") "--keep-going" - ++ lib.optional (commit == "true") "--commit"; - - args = [packagesJson] ++ optionalArgs; -in - nixpkgs.stdenv.mkDerivation { - name = "nixpkgs-update-script"; - buildCommand = '' - echo "" - echo "----------------------------------------------------------------" - echo "" - echo "Not possible to update packages using \`nix-build\`" - echo "" - echo "${helpText}" - echo "----------------------------------------------------------------" - exit 1 - ''; - shellHook = '' - unset shellHook # do not contaminate nested shells - exec ${nixpkgs.python3.interpreter} ${./update.py} ${builtins.concatStringsSep " " args} - ''; - } diff --git a/packages/scripts/update.py b/packages/scripts/update.py deleted file mode 100644 index dadfa579..00000000 --- a/packages/scripts/update.py +++ /dev/null @@ -1,262 +0,0 @@ -from __future__ import annotations -from typing import Dict, Generator, List, Optional, Tuple -import argparse -import asyncio -import contextlib -import json -import os -import re -import subprocess -import sys -import tempfile - - -class CalledProcessError(Exception): - process: asyncio.subprocess.Process - - -class UpdateFailedException(Exception): - pass - - -def eprint(*args, **kwargs): - print(*args, file=sys.stderr, **kwargs) - - -async def check_subprocess(*args, **kwargs): - """ - Emulate check argument of subprocess.run function. - """ - process = await asyncio.create_subprocess_exec(*args, **kwargs) - returncode = await process.wait() - - if returncode != 0: - error = CalledProcessError() - error.process = process - - raise error - - return process - - -async def run_update_script(nixpkgs_root: str, merge_lock: asyncio.Lock, temp_dir: Optional[Tuple[str, str]], package: Dict, keep_going: bool): - worktree: Optional[str] = None - - update_script_command = package['updateScript'] - - if temp_dir is not None: - worktree, _branch = temp_dir - - # Ensure the worktree is clean before update. - await check_subprocess('git', 'reset', '--hard', '--quiet', 'HEAD', cwd=worktree) - - # Update scripts can use $(dirname $0) to get their location but we want to run - # their clones in the git worktree, not in the main nixpkgs repo. - update_script_command = map(lambda arg: re.sub(r'^{0}'.format( - re.escape(nixpkgs_root)), worktree, arg), update_script_command) - - eprint(f" - {package['name']}: UPDATING ...") - - try: - update_process = await check_subprocess('env', f"UPDATE_NIX_ATTR_PATH={package['attrPath']}", *update_script_command, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, cwd=worktree) - update_info = await update_process.stdout.read() - - await merge_changes(merge_lock, package, update_info, temp_dir) - except KeyboardInterrupt as e: - eprint('Cancelling…') - raise asyncio.exceptions.CancelledError() - except CalledProcessError as e: - eprint(f" - {package['name']}: ERROR") - eprint() - eprint( - f"--- SHOWING ERROR LOG FOR {package['name']} ----------------------") - eprint() - stderr = await e.process.stderr.read() - eprint(stderr.decode('utf-8')) - with open(f"{package['pname']}.log", 'wb') as logfile: - logfile.write(stderr) - eprint() - eprint( - f"--- SHOWING ERROR LOG FOR {package['name']} ----------------------") - - if not keep_going: - raise UpdateFailedException( - f"The update script for {package['name']} failed with exit code {e.process.returncode}") - - -@contextlib.contextmanager -def make_worktree() -> Generator[Tuple[str, str], None, None]: - with tempfile.TemporaryDirectory() as wt: - branch_name = f'update-{os.path.basename(wt)}' - target_directory = f'{wt}/nixpkgs' - - subprocess.run(['git', 'worktree', 'add', '-b', - branch_name, target_directory]) - yield (target_directory, branch_name) - subprocess.run(['git', 'worktree', 'remove', - '--force', target_directory]) - subprocess.run(['git', 'branch', '-D', branch_name]) - - -async def commit_changes(name: str, merge_lock: asyncio.Lock, worktree: str, branch: str, changes: List[Dict]) -> None: - for change in changes: - # Git can only handle a single index operation at a time - async with merge_lock: - await check_subprocess('git', 'add', *change['files'], cwd=worktree) - commit_message = '{attrPath}: {oldVersion} → {newVersion}'.format( - **change) - if 'commitMessage' in change: - commit_message = change['commitMessage'] - elif 'commitBody' in change: - commit_message = commit_message + '\n\n' + change['commitBody'] - await check_subprocess('git', 'commit', '--quiet', '-m', commit_message, cwd=worktree) - await check_subprocess('git', 'cherry-pick', branch) - - -async def check_changes(package: Dict, worktree: str, update_info: str): - if 'commit' in package['supportedFeatures']: - changes = json.loads(update_info) - else: - changes = [{}] - - # Try to fill in missing attributes when there is just a single change. - if len(changes) == 1: - # Dynamic data from updater take precedence over static data from passthru.updateScript. - if 'attrPath' not in changes[0]: - # update.nix is always passing attrPath - changes[0]['attrPath'] = package['attrPath'] - - if 'oldVersion' not in changes[0]: - # update.nix is always passing oldVersion - changes[0]['oldVersion'] = package['oldVersion'] - - if 'newVersion' not in changes[0]: - attr_path = changes[0]['attrPath'] - obtain_new_version_process = await check_subprocess('nix-instantiate', '--expr', f'with import ./. {{}}; lib.getVersion {attr_path}', '--eval', '--strict', '--json', stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE, cwd=worktree) - changes[0]['newVersion'] = json.loads((await obtain_new_version_process.stdout.read()).decode('utf-8')) - - if 'files' not in changes[0]: - changed_files_process = await check_subprocess('git', 'diff', '--name-only', 'HEAD', stdout=asyncio.subprocess.PIPE, cwd=worktree) - changed_files = (await changed_files_process.stdout.read()).splitlines() - changes[0]['files'] = changed_files - - if len(changed_files) == 0: - return [] - - return changes - - -async def merge_changes(merge_lock: asyncio.Lock, package: Dict, update_info: str, temp_dir: Optional[Tuple[str, str]]) -> None: - if temp_dir is not None: - worktree, branch = temp_dir - changes = await check_changes(package, worktree, update_info) - - if len(changes) > 0: - await commit_changes(package['name'], merge_lock, worktree, branch, changes) - else: - eprint(f" - {package['name']}: DONE, no changes.") - else: - eprint(f" - {package['name']}: DONE.") - - -async def updater(nixpkgs_root: str, temp_dir: Optional[Tuple[str, str]], merge_lock: asyncio.Lock, packages_to_update: asyncio.Queue[Optional[Dict]], keep_going: bool, commit: bool): - while True: - package = await packages_to_update.get() - if package is None: - # A sentinel received, we are done. - return - - if not ('commit' in package['supportedFeatures'] or 'attrPath' in package): - temp_dir = None - - await run_update_script(nixpkgs_root, merge_lock, temp_dir, package, keep_going) - - -async def start_updates(max_workers: int, keep_going: bool, commit: bool, packages: List[Dict]): - merge_lock = asyncio.Lock() - packages_to_update: asyncio.Queue[Optional[Dict]] = asyncio.Queue() - - with contextlib.ExitStack() as stack: - temp_dirs: List[Optional[Tuple[str, str]]] = [] - - # Do not create more workers than there are packages. - num_workers = min(max_workers, len(packages)) - - nixpkgs_root_process = await check_subprocess('git', 'rev-parse', '--show-toplevel', stdout=asyncio.subprocess.PIPE) - nixpkgs_root = (await nixpkgs_root_process.stdout.read()).decode('utf-8').strip() - - # Set up temporary directories when using auto-commit. - for i in range(num_workers): - temp_dir = stack.enter_context(make_worktree()) if commit else None - temp_dirs.append(temp_dir) - - # Fill up an update queue, - for package in packages: - await packages_to_update.put(package) - - # Add sentinels, one for each worker. - # A workers will terminate when it gets sentinel from the queue. - for i in range(num_workers): - await packages_to_update.put(None) - - # Prepare updater workers for each temp_dir directory. - # At most `num_workers` instances of `run_update_script` will be running at one time. - updaters = asyncio.gather(*[updater(nixpkgs_root, temp_dir, merge_lock, - packages_to_update, keep_going, commit) for temp_dir in temp_dirs]) - - try: - # Start updater workers. - await updaters - except asyncio.exceptions.CancelledError: - # When one worker is cancelled, cancel the others too. - updaters.cancel() - except UpdateFailedException as e: - # When one worker fails, cancel the others, as this exception is only thrown when keep_going is false. - updaters.cancel() - eprint(e) - sys.exit(1) - - -def main(max_workers: int, keep_going: bool, commit: bool, packages_path: str) -> None: - with open(packages_path) as f: - packages = json.load(f) - - eprint() - eprint('Going to be running update for following packages:') - for package in packages: - eprint(f" - {package['name']}") - eprint() - - confirm = input('Press Enter key to continue...') - if confirm == '': - eprint() - eprint('Running update for:') - - asyncio.run(start_updates(max_workers, keep_going, commit, packages)) - - eprint() - eprint('Packages updated!') - sys.exit() - else: - eprint('Aborting!') - sys.exit(130) - - -parser = argparse.ArgumentParser(description='Update packages') -parser.add_argument('--max-workers', '-j', dest='max_workers', type=int, - help='Number of updates to run concurrently', nargs='?', default=4) -parser.add_argument('--keep-going', '-k', dest='keep_going', - action='store_true', help='Do not stop after first failure') -parser.add_argument('--commit', '-c', dest='commit', - action='store_true', help='Commit the changes') -parser.add_argument( - 'packages', help='JSON file containing the list of package names and their update scripts') - -if __name__ == '__main__': - args = parser.parse_args() - - try: - main(args.max_workers, args.keep_going, args.commit, args.packages) - except KeyboardInterrupt as e: - # Let’s cancel outside of the main loop too. - sys.exit(130) diff --git a/packages/sievec.nix b/packages/sievec.nix deleted file mode 100644 index 7125ce90..00000000 --- a/packages/sievec.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ - writeText, - stdenv, - dovecot_pigeonhole, - ... -} @ pkgs: { - name, - src, - exts, -}: let - dummyConfig = writeText "dovecot.cfg" '' - plugin { - sieve_plugins = sieve_imapsieve sieve_extprograms - sieve_global_extensions = +vnd.dovecot.pipe - } - ''; -in - stdenv.mkDerivation { - inherit name; - inherit src; - - phases = ["copyPhase" "compilePhase"]; - - copyPhase = '' - mkdir $out - cp $src $out/${name}.sieve - sed -i 's|/nix/store/||g' $out/${name}.sieve - chmod 0755 $out/${name}.sieve - set +x - ''; - compilePhase = '' - ${dovecot_pigeonhole}/bin/sievec -c ${dummyConfig} $out/${name}.sieve $out/${name}.svbin -x "${toString exts}" - ''; - } diff --git a/packages/sieves.nix b/packages/sieves.nix deleted file mode 100644 index b3eaa40a..00000000 --- a/packages/sieves.nix +++ /dev/null @@ -1,85 +0,0 @@ -{ - lib, - writeText, - writeScript, - zsh, - coreutils-full, - rspamd, - ... -} @ pkgs: let - sievec = import ./sievec.nix pkgs; - rspamd_host = "localhost"; - sa-learn-ham-script = writeScript "sa-learn-ham" '' - #!${zsh}/bin/zsh - - tmpfile=$(${coreutils-full}/bin/mktemp /tmp/spam.XXXXXX) - ${coreutils-full}/bin/cat > $tmpfile - password=$(${coreutils-full}/bin/cat /run/secrets/services/dovecot/rspamd_password) - - ${coreutils-full}/bin/cat $tmpfile | ${rspamd}/bin/rspamc -P $password -h ${rspamd_host} learn_ham - ${coreutils-full}/bin/cat $tmpfile | ${rspamd}/bin/rspamc -P $password -h ${rspamd_host} -w 5 -f 11 fuzzy_del - - ${coreutils-full}/bin/rm $tmpfile - ''; - - sa-learn-spam-script = writeScript "sa-learn-spam" '' - #!${zsh}/bin/zsh - - tmpfile=$(${coreutils-full}/bin/mktemp /tmp/spam.XXXXXX) - ${coreutils-full}/bin/cat > $tmpfile - password=$(${coreutils-full}/bin/cat /run/secrets/services/dovecot/rspamd_password) - - ${coreutils-full}/bin/cat $tmpfile | ${rspamd}/bin/rspamc -P $password -h ${rspamd_host} learn_spam - ${coreutils-full}/bin/cat $tmpfile | ${rspamd}/bin/rspamc -P $password -h ${rspamd_host} -w 5 -f 11 fuzzy_add - - ${coreutils-full}/bin/rm $tmpfile - ''; - removeStore = location: lib.removePrefix "/nix/store/" "${location}"; -in { - default = sievec { - name = "default"; - src = writeText "default.sieve" '' - require "fileinto"; - if header :contains "X-Spam" "YES" { - fileinto "Junk"; - } - ''; - exts = ["fileinto"]; - }; - report-ham = sievec { - name = "report-ham"; - src = writeText "report-ham.sieve" '' - require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"]; - - if environment :matches "imap.mailbox" "*" { - set "mailbox" "$${1}"; - } - - if string "$${mailbox}" [ "Trash", "train_ham", "train_prob", "train_spam" ] { - stop; - } - - pipe :copy "${removeStore sa-learn-ham-script}"; - ''; - exts = ["vnd.dovecot.pipe" "copy" "imapsieve" "environment" "variables"]; - }; - report-spam = sievec { - name = "report-spam"; - src = writeText "report-spam.sieve" '' - require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "imap4flags"]; - - if environment :is "imap.cause" "COPY" { - pipe :copy "${removeStore sa-learn-spam-script}"; - } - - # Catch replied or forwarded spam - elsif anyof (allof (hasflag "\\Answered", - environment :contains "imap.changedflags" "\\Answered"), - allof (hasflag "$Forwarded", - environment :contains "imap.changedflags" "$Forwarded")) { - pipe :copy "${removeStore sa-learn-spam-script}"; - } - ''; - exts = ["vnd.dovecot.pipe" "copy" "imapsieve" "environment" "imap4flags"]; - }; -} diff --git a/packages/update.sh b/packages/update.sh deleted file mode 100755 index bb3c745f..00000000 --- a/packages/update.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -#./scripts/update-git.sh https://github.com/starfive-tech/linux linux/vf2/source.json "--rev refs/heads/JH7110_VisionFive2_upstream" -#./scripts/update-git.sh https://github.com/koverstreet/bcachefs linux/bcachefs/source.json -nix-shell ./scripts/update.nix diff --git a/packages/updater.nix b/packages/updater.nix new file mode 100644 index 00000000..c527247e --- /dev/null +++ b/packages/updater.nix @@ -0,0 +1,19 @@ +{ + lib, + callPackage, + writeScriptBin, + bash, + nix, +}: +let + script = lib.concatMapStringsSep "\n" (f: callPackage "${f}/updater.nix" { }) [ + ./art + ./kodi + ]; +in +writeScriptBin "updater" '' + #!${bash}/bin/bash + set -euxo pipefail + ${nix}/bin/nix flake update + ${script} +'' diff --git a/packages/web/miifox-net.nix b/packages/web/miifox-net.nix deleted file mode 100644 index 56356f27..00000000 --- a/packages/web/miifox-net.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ - stdenvNoCC, - fetchgit, - chevron, - lndir, - lib, -}: let - source = builtins.fromJSON (builtins.readFile ./miifox.json); -in - stdenvNoCC.mkDerivation { - pname = "miifox.net"; - version = source.date; - src = fetchgit { - inherit (source) url rev sha256; - }; - nativeBuildInputs = [chevron lndir]; - buildPhase = '' - chevron -d index.json index.handlebars > index.html - ''; - installPhase = '' - mkdir $out - lndir -silent $src $out - cp index.html $out - rm $out/index.json - ''; - meta = { - description = "miifox.net"; - license = lib.licenses.unfree; - }; - passthru.updateScript = [../scripts/update-git.sh "https://git.chir.rs/CarolineHusky/MiiFox.net" "web/miifox.json"]; - } diff --git a/packages/web/miifox.json b/packages/web/miifox.json deleted file mode 100644 index 7bd9ca24..00000000 --- a/packages/web/miifox.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "url": "https://git.chir.rs/CarolineHusky/MiiFox.net", - "rev": "f24ef76468b77d529d2331415b5bf04805cba04f", - "date": "2023-10-23T15:22:52+02:00", - "path": "/nix/store/7hr4g6v1jl89rnvxagpnzdc7y2pa7m54-MiiFox.net", - "sha256": "0gpplkmgzlyjs4wi85vcpzi3dvv6qcy8pr69fy56lw41ssgm3rjm", - "hash": "sha256-VeZRn9aBcGqKd8nkizzDZu824r9sFxQ50dLT/+qk9z4=", - "fetchLFS": false, - "fetchSubmodules": false, - "deepClone": false, - "leaveDotGit": false -} diff --git a/programs/default.nix b/programs/default.nix new file mode 100644 index 00000000..676198ad --- /dev/null +++ b/programs/default.nix @@ -0,0 +1,15 @@ +_: { + imports = [ + ./shell + ./editors + ./ssh + ./desktop + ./stylix + ]; + home-manager.users.root.imports = [ + ./home-manager.nix + ]; + home-manager.users.darkkirb.imports = [ + ./home-manager.nix + ]; +} diff --git a/programs/desktop/default.nix b/programs/desktop/default.nix new file mode 100644 index 00000000..247b08e7 --- /dev/null +++ b/programs/desktop/default.nix @@ -0,0 +1,40 @@ +{ + config, + pkgs, + stylix, + ... +}: +{ + imports = [ + ./steam + ./kodi/system-config.nix + ./pipewire.nix + ./firefox/system.nix + stylix.nixosModules.stylix + ]; + home-manager.users.darkkirb.imports = + if config.isGraphical then + [ + ./home-manager.nix + ] + else + [ ]; + + environment.plasma6.excludePackages = with pkgs.kdePackages; [ + elisa + kate + ]; + + networking.firewall.allowedTCPPortRanges = [ + { + from = 1714; + to = 1764; + } + ]; + networking.firewall.allowedUDPPortRanges = [ + { + from = 1714; + to = 1764; + } + ]; +} diff --git a/programs/desktop/development/rust/default.nix b/programs/desktop/development/rust/default.nix new file mode 100644 index 00000000..49e600ac --- /dev/null +++ b/programs/desktop/development/rust/default.nix @@ -0,0 +1,48 @@ +{ + pkgs, + config, + systemConfig, + ... +}: +{ + home.packages = with pkgs; [ + rust-bin.stable.latest.default + cargo-mommy + clang + ]; + home.shellAliases = { + cargo = "${pkgs.cargo-mommy}/bin/cargo-mommy"; + }; + home.sessionVariables = + ( + if systemConfig.isNSFW then + { + CARGO_MOMMYS_MOODS = "chill/thirsty/yikes"; + CARGO_MOMMYS_LITTLE = "racc/plush"; + CARGO_MOMMYS_PARTS = "shit/pee"; + CARGO_MOMMYS_FUCKING = "pet/toy/toilet/shitslut/septic tank"; + } + else + { + CARGO_MOMMYS_MOODS = "chill"; + CARGO_MOMMYS_LITTLE = "racc/plush"; + } + ) + // { + CARGO_HOME = "${config.xdg.dataHome}/cargo"; + }; + systemd.user.tmpfiles.rules = [ + "d /persistent${config.xdg.cacheHome}/cargo - - - - -" + "d /persistent${config.xdg.cacheHome}/cargo/git - - - - -" + "d /persistent${config.xdg.cacheHome}/cargo/registry - - - - -" + "L /persistent${config.xdg.dataHome}/cargo/git - - - - ${config.xdg.cacheHome}/cargo/git" + "L /persistent${config.xdg.dataHome}/cargo/registry - - - - ${config.xdg.cacheHome}/cargo/registry" + ]; + xdg.dataFile."cargo/config.toml".source = (pkgs.formats.toml { }).generate "config.toml" { + build.target-dir = "${config.xdg.cacheHome}/cargo/target"; + profile.release = { + lto = true; + codegen-units = 1; + }; + }; +} diff --git a/programs/desktop/firefox/default.nix b/programs/desktop/firefox/default.nix new file mode 100644 index 00000000..bac49d5b --- /dev/null +++ b/programs/desktop/firefox/default.nix @@ -0,0 +1,154 @@ +{ + pkgs, + lib, + rycee-nur-expressions, + ... +}: +let + rycee = import rycee-nur-expressions { inherit pkgs; }; + extensions = { + "ublock-origin" = [ + "alarms" + "dns" + "menus" + "privacy" + "storage" + "tabs" + "unlimitedStorage" + "webNavigation" + "webRequest" + "webRequestBlocking" + "" + "http://*/*" + "https://*/*" + "file://*/*" + "https://easylist.to/*" + "https://*.fanboy.co.nz/*" + "https://filterlists.com/*" + "https://forums.lanik.us/*" + "https://github.com/*" + "https://*.github.io/*" + "https://github.com/uBlockOrigin/*" + "https://ublockorigin.github.io/*" + "https://*.reddit.com/r/uBlockOrigin/*" + ]; + "sidebery" = [ + "activeTab" + "tabs" + "contextualIdentities" + "cookies" + "storage" + "unlimitedStorage" + "sessions" + "menus" + "menus.overrideContext" + "search" + "theme" + ]; + "darkreader" = [ + "alarms" + "contextMenus" + "storage" + "tabs" + "theme" + "" + ]; + "plasma-integration" = [ + "nativeMessaging" + "notifications" + "storage" + "downloads" + "tabs" + "" + "contextMenus" + "*://*/*" + ]; + "keepassxc-browser" = [ + "activeTab" + "clipboardWrite" + "contextMenus" + "cookies" + "nativeMessaging" + "notifications" + "storage" + "tabs" + "webNavigation" + "webRequest" + "webRequestBlocking" + "https://*/*" + "http://*/*" + "https://api.github.com/" + "" + ]; + "sponsorblock" = [ + "storage" + "scripting" + "https://sponsor.ajay.app/*" + "https://*.youtube.com/*" + "https://www.youtube-nocookie.com/embed/*" + ]; + "dearrow" = [ + "storage" + "unlimitedStorage" + "alarms" + "https://sponsor.ajay.app/*" + "https://dearrow-thumb.ajay.app/*" + "https://*.googlevideo.com/*" + "https://*.youtube.com/*" + "https://www.youtube-nocookie.com/embed/*" + "scripting" + ]; + }; +in +{ + programs.firefox = { + enable = true; + nativeMessagingHosts = with pkgs; [ + kdePackages.plasma-browser-integration + keepassxc + ]; + profiles.default = { + containersForce = true; + extensions = map (v: rycee.firefox-addons.${v}) (lib.attrNames extensions); + settings = { + "extensions.autoDisableScopes" = 0; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + "browser.tabs.inTitlebar" = 0; + "widget.use-xdg-desktop-portal.file-picker" = 1; + "widget.use-xdg-desktop-portal.location" = 1; + "widget.use-xdg-desktop-portal.mime-handler" = 1; + "widget.use-xdg-desktop-portal.open-uri" = 1; + "widget.use-xdg-desktop-portal.settings" = 1; + "extensions.pocket.enabled" = false; + "browser.newtabpage.activity-stream.showSponsored" = false; + "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; + "browser.newtabpage.activity-stream.default.sites" = ""; + }; + userChrome = '' + @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + + #TabsToolbar { + visibility: collapse; + } + + #titlebar { + display: none; + } + + #sidebar-header { + display: none; + } + ''; + }; + }; + assertions = lib.mapAttrsToList ( + k: v: + let + unaccepted = lib.subtractLists v rycee.firefox-addons.${k}.meta.mozPermissions; + in + { + assertion = unaccepted == [ ]; + message = ''Extension ${k} has unaccepted permissions: ${builtins.toJSON unaccepted}''; + } + ) extensions; +} diff --git a/programs/desktop/firefox/system.nix b/programs/desktop/firefox/system.nix new file mode 100644 index 00000000..bb434e09 --- /dev/null +++ b/programs/desktop/firefox/system.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + environment.persistence."/persistent".directories = [ + "/home/darkkirb/.mozilla" + "/home/darkkirb/.thunderbird" + ]; +} diff --git a/programs/desktop/games/default.nix b/programs/desktop/games/default.nix new file mode 100644 index 00000000..49ca2472 --- /dev/null +++ b/programs/desktop/games/default.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: +{ + imports = [ + ./ff14 + ]; + home.packages = with pkgs; [ factorio ]; +} diff --git a/programs/desktop/games/ff14/default.nix b/programs/desktop/games/ff14/default.nix new file mode 100644 index 00000000..3779d014 --- /dev/null +++ b/programs/desktop/games/ff14/default.nix @@ -0,0 +1,15 @@ +{ + config, + pkgs, + lib, + systemConfig, + ... +}: +{ + config = lib.mkIf (systemConfig.networking.hostName == "rainbow-resort") { + home.packages = with pkgs; [ xivlauncher ]; + systemd.user.tmpfiles.rules = [ + "L ${config.home.homeDirectory}/.xlcore - - - - ${config.home.homeDirectory}/Games/FF14/xlcore" + ]; + }; +} diff --git a/programs/desktop/home-manager.nix b/programs/desktop/home-manager.nix new file mode 100644 index 00000000..13fdba04 --- /dev/null +++ b/programs/desktop/home-manager.nix @@ -0,0 +1,43 @@ +{ + pkgs, + nixos-config, + systemConfig, + ... +}: +{ + imports = [ + ./firefox + ./password-manager.nix + ./syncthing + ./games + ./ims.nix + "${nixos-config}/services/desktop" + ./kodi + ./pim + ./development/rust + ./music + ]; + home.packages = + with pkgs; + [ + libreoffice + obsidian + ] + ++ ( + if !systemConfig.isSway then + with pkgs; + [ + kdePackages.kalk + kdePackages.kalgebra + kdePackages.filelight + kdePackages.kdegraphics-thumbnailers + kdePackages.ffmpegthumbs + kdePackages.dolphin-plugins + ] + else + [ ] + ); + home.persistence.default.directories = [ + ".local/share/kwalletd" + ]; +} diff --git a/programs/desktop/ims.nix b/programs/desktop/ims.nix new file mode 100644 index 00000000..c3dd01f5 --- /dev/null +++ b/programs/desktop/ims.nix @@ -0,0 +1,69 @@ +{ + config, + pkgs, + lib, + systemConfig, + ... +}: +{ + home.packages = with pkgs; [ + telegram-desktop + discord + element-desktop + ]; + home.persistence.default.directories = [ + ".local/share/TelegramDesktop" + ".local/share/discord" + ".local/share/Element" + ]; + systemd.user.tmpfiles.rules = lib.mkMerge [ + [ + "d /persistent${config.xdg.cacheHome}/TelegramDesktop/cache - - - - -" + "d /persistent${config.xdg.cacheHome}/TelegramDesktop/media_cache - - - - -" + "d /persistent${config.xdg.cacheHome}/discord - - - - -" + "d /persistent${config.xdg.cacheHome}/discord/Cache - - - - -" + "d /persistent${config.xdg.cacheHome}/discord/Code\x20Cache - - - - -" + "d /persistent${config.xdg.cacheHome}/discord/component_crx_cache - - - - -" + "d /persistent${config.xdg.cacheHome}/discord/DawnGraphiteCache - - - - -" + "d /persistent${config.xdg.cacheHome}/Element/Cache - - - - -" + "d /persistent${config.xdg.cacheHome}/Element/Code\x20Cache - - - - -" + "d /persistent${config.xdg.cacheHome}/Element/DawnGraphiteCache - - - - -" + "d /persistent${config.xdg.dataHome}/discord - - - - -" + "d /persistent${config.xdg.dataHome}/Element - - - - -" + "L /persistent${config.xdg.dataHome}/TelegramDesktop/tdata/user_data/cache - - - - ${config.xdg.cacheHome}/TelegramDesktop/cache" + "L /persistent${config.xdg.dataHome}/TelegramDesktop/tdata/user_data/media_cache - - - - ${config.xdg.cacheHome}/TelegramDesktop/media_cache" + "L /persistent${config.xdg.dataHome}/discord/Cache - - - - ${config.xdg.cacheHome}/discord/Cache" + "L /persistent${config.xdg.dataHome}/discord/Code\x20Cache - - - - ${config.xdg.cacheHome}/discord/Code\x20Cache" + "L /persistent${config.xdg.dataHome}/discord/component_crx_cache - - - - ${config.xdg.cacheHome}/discord/component_crx_cache" + "L /persistent${config.xdg.dataHome}/discord/DawnGraphiteCache - - - - ${config.xdg.cacheHome}/discord/DawnGraphiteCache" + "L /persistent${config.xdg.dataHome}/discord/userDataCache.json - - - - ${config.xdg.cacheHome}/discord/userDataCache.json" + "L /persistent${config.xdg.dataHome}/Element/Cache - - - - ${config.xdg.cacheHome}/Element/Cache" + "L /persistent${config.xdg.dataHome}/Element/Code\x20Cache - - - - ${config.xdg.cacheHome}/Element/Code\x20Cache" + "L /persistent${config.xdg.dataHome}/Element/DawnGraphiteCache - - - - ${config.xdg.cacheHome}/Element/DawnGraphiteCache" + "L ${config.xdg.configHome}/discord - - - - ${config.xdg.dataHome}/discord" + "L ${config.xdg.configHome}/Element - - - - ${config.xdg.dataHome}/Element" + ] + # GPU Cache sometimes breaks for electron apps on intel, so only persist that on non-intel + (lib.mkIf (!systemConfig.isIntelGPU) [ + "d /persistent${config.xdg.cacheHome}/discord/DawnWebGPUCache - - - - -" + "d /persistent${config.xdg.cacheHome}/discord/GPUCache - - - - -" + "d /persistent${config.xdg.cacheHome}/Element/DawnWebGPUCache - - - - -" + "d /persistent${config.xdg.cacheHome}/Element/GPUCache - - - - -" + "L /persistent${config.xdg.dataHome}/discord/DawnWebGPUCache - - - - ${config.xdg.cacheHome}/discord/DawnWebGPUCache" + "L /persistent${config.xdg.dataHome}/discord/GPUCache - - - - ${config.xdg.cacheHome}/discord/GPUCache" + "L /persistent${config.xdg.dataHome}/Element/DawnWebGPUCache - - - - ${config.xdg.cacheHome}/Element/DawnWebGPUCache" + "L /persistent${config.xdg.dataHome}/Element/GPUCache - - - - ${config.xdg.cacheHome}/Element/GPUCache" + + ]) + (lib.mkIf (systemConfig.isIntelGPU) [ + "d /tmp${config.xdg.cacheHome}/discord/DawnWebGPUCache - - - - -" + "d /tmp${config.xdg.cacheHome}/discord/GPUCache - - - - -" + "d /tmp${config.xdg.cacheHome}/Element/DawnWebGPUCache - - - - -" + "d /tmp${config.xdg.cacheHome}/Element/GPUCache - - - - -" + "L /persistent${config.xdg.dataHome}/discord/DawnWebGPUCache - - - - /tmp${config.xdg.cacheHome}/discord/DawnWebGPUCache" + "L /persistent${config.xdg.dataHome}/discord/GPUCache - - - - /tmp${config.xdg.cacheHome}/discord/GPUCache" + "L /persistent${config.xdg.dataHome}/Element/DawnWebGPUCache - - - - /tmp${config.xdg.cacheHome}/Element/DawnWebGPUCache" + "L /persistent${config.xdg.dataHome}/Element/GPUCache - - - - /tmp${config.xdg.cacheHome}/Element/GPUCache" + ]) + ]; +} diff --git a/programs/desktop/kodi/default.nix b/programs/desktop/kodi/default.nix new file mode 100644 index 00000000..80bbbc31 --- /dev/null +++ b/programs/desktop/kodi/default.nix @@ -0,0 +1,19 @@ +{ pkgs, ... }: +{ + home.file.widevine-lib.source = "${pkgs.widevine-cdm}/share/google/chrome/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so"; + home.file.widevine-lib.target = ".kodi/cdm/libwidevinecdm.so"; + home.file.widevine-manifest.source = "${pkgs.widevine-cdm}/share/google/chrome/WidevineCdm/manifest.json"; + home.file.widevine-manifest.target = ".kodi/cdm/manifest.json"; + home.packages = [ + (pkgs.kodi.withPackages ( + kodiPkgs: with kodiPkgs; [ + jellyfin + jellycon + pkgs.kodi-joyn + ] + )) + ]; + home.persistence.default.directories = [ + ".kodi/userdata" + ]; +} diff --git a/programs/desktop/kodi/system-config.nix b/programs/desktop/kodi/system-config.nix new file mode 100644 index 00000000..5fefe4c2 --- /dev/null +++ b/programs/desktop/kodi/system-config.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + networking.firewall.allowedTCPPorts = [ + 8080 + 9090 + ]; +} diff --git a/programs/desktop/music/audacious.nix b/programs/desktop/music/audacious.nix new file mode 100644 index 00000000..9580eedf --- /dev/null +++ b/programs/desktop/music/audacious.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: +{ + home.packages = with pkgs; [ audacious ]; + home.persistence.default.directories = [ + ".config/audacious" + ]; +} diff --git a/programs/desktop/music/default.nix b/programs/desktop/music/default.nix new file mode 100644 index 00000000..ff9a909c --- /dev/null +++ b/programs/desktop/music/default.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + imports = [ + ./audacious.nix + ./picard.nix + ]; +} diff --git a/programs/desktop/music/picard.nix b/programs/desktop/music/picard.nix new file mode 100644 index 00000000..46fe75fb --- /dev/null +++ b/programs/desktop/music/picard.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: +{ + home.packages = [ + pkgs.picard + pkgs.rsgain + ]; +} diff --git a/programs/desktop/password-manager.nix b/programs/desktop/password-manager.nix new file mode 100644 index 00000000..4624ae74 --- /dev/null +++ b/programs/desktop/password-manager.nix @@ -0,0 +1,16 @@ +{ pkgs, lib, ... }: +{ + home.packages = with pkgs; [ + keepassxc + ]; + xdg.configFile."keepassxc/keepassxc.ini".text = lib.generators.toINI { } { + General.ConfigVersion = 2; + Browser = { + CustomProxyLocation = ""; + Enabled = true; + UpdateBinaryPath = false; + }; + GUI.ApplicationTheme = "classic"; + FdoSecrets.Enabled = true; + }; +} diff --git a/programs/desktop/pim/calendar.nix b/programs/desktop/pim/calendar.nix new file mode 100644 index 00000000..9b0330a6 --- /dev/null +++ b/programs/desktop/pim/calendar.nix @@ -0,0 +1,22 @@ +{ pkgs, config, ... }: +{ + accounts.calendar.accounts.lotte = { + khal = { + enable = true; + addresses = [ "lotte@chir.rs" ]; + }; + primary = true; + remote = { + passwordCommand = [ + "${pkgs.coreutils}/bin/cat" + config.sops.secrets."accounts/calendar/accounts/lotte/remote/password".path + ]; + type = "caldav"; + url = "https://calendar.zoho.eu/caldav/423167e221264cf4af974b9faa0abc3b/events/"; + userName = "lotte@chir.rs"; + vdirsyncer.enable = true; + }; + }; + accounts.calendar.basePath = "Data/calendar"; + sops.secrets."accounts/calendar/accounts/lotte/remote/password".sopsFile = ./secrets.yaml; +} diff --git a/programs/desktop/pim/contacts.nix b/programs/desktop/pim/contacts.nix new file mode 100644 index 00000000..5339ff11 --- /dev/null +++ b/programs/desktop/pim/contacts.nix @@ -0,0 +1,22 @@ +{ pkgs, config, ... }: +{ + accounts.contact.accounts.lotte = { + khal = { + enable = true; + addresses = [ "lotte@chir.rs" ]; + }; + khard.enable = true; + remote = { + passwordCommand = [ + "${pkgs.coreutils}/bin/cat" + config.sops.secrets."accounts/contact/accounts/lotte/remote/password".path + ]; + type = "carddav"; + url = "https://contacts.zoho.eu/carddav/lotte@chir.rs/default/contacts"; + userName = "lotte@chir.rs"; + vdirsyncer.enable = true; + }; + }; + accounts.calendar.basePath = "Data/contacts"; + sops.secrets."accounts/contact/accounts/lotte/remote/password".sopsFile = ./secrets.yaml; +} diff --git a/programs/desktop/pim/default.nix b/programs/desktop/pim/default.nix new file mode 100644 index 00000000..69499897 --- /dev/null +++ b/programs/desktop/pim/default.nix @@ -0,0 +1,10 @@ +{ ... }: +{ + imports = [ + ./calendar.nix + ./contacts.nix + ./email.nix + ./rss.nix + ./taskwarrior.nix + ]; +} diff --git a/programs/desktop/pim/email.nix b/programs/desktop/pim/email.nix new file mode 100644 index 00000000..00fdc22e --- /dev/null +++ b/programs/desktop/pim/email.nix @@ -0,0 +1,72 @@ +{ pkgs, config, ... }: +{ + accounts.email.accounts.lotte = { + address = "lotte@chir.rs"; + gpg = { + encryptByDefault = true; + key = "B4E3D4801C49EC5E"; + signByDefault = true; + }; + imap = { + host = "imappro.zoho.eu"; + port = 993; + }; + imapnotify = { + enable = true; + onNotify = "${pkgs.isync}/bin/mbsync test-%s"; + onNotifyPost = "${pkgs.notmuch}/bin/notmuch new && ${pkgs.libnotify}/bin/notify-send 'New mail arrived'"; + }; + mbsync = { + enable = true; + create = "both"; + expunge = "both"; + extraConfig.account.AuthMechs = "plain"; + }; + msmtp = { + enable = true; + extraConfig.auth = "plain"; + }; + neomutt.enable = true; + notmuch = { + enable = true; + neomutt = { + enable = true; + virtualMailboxes = [ + { + name = "Inbox"; + query = "tag:inbox"; + } + ]; + }; + }; + passwordCommand = [ + "${pkgs.coreutils}/bin/cat" + config.sops.secrets."accounts/email/accounts/lotte/password".path + ]; + realName = "Charlotte 🦝 Delenk"; + smtp = { + host = "smtppro.zoho.eu"; + port = 465; + }; + thunderbird.enable = true; + userName = "lotte@chir.rs"; + primary = true; + }; + accounts.email.maildirBasePath = "Data/Maildir"; + sops.secrets."accounts/email/accounts/lotte/password".sopsFile = ./secrets.yaml; + services.imapnotify.enable = true; + programs.mbsync.enable = true; + programs.notmuch.enable = true; + programs.neomutt.enable = true; + programs.thunderbird = { + enable = true; + profiles.default = { + isDefault = true; + withExternalGnupg = true; + }; + }; + systemd.user.services.imapnotify.Unit = { + Wants = [ "sops-nix.service" ]; + After = [ "sops-nix.service" ]; + }; +} diff --git a/programs/desktop/pim/rss.nix b/programs/desktop/pim/rss.nix new file mode 100644 index 00000000..9c2c832d --- /dev/null +++ b/programs/desktop/pim/rss.nix @@ -0,0 +1,63 @@ +{ config, ... }: +{ + programs.newsboat = { + enable = true; + autoReload = true; + urls = + [ + { + tags = [ "blog" ]; + url = "https://www.5snb.club/rss.xml"; + } + { + tags = [ "blog" ]; + url = "https://soatok.blog/feed/"; + } + { + tags = [ "blog" ]; + url = "https://cendyne.dev/feed.xml"; + } + { + tags = [ "blog" ]; + url = "https://xeiaso.net/blog.rss"; + } + { + tags = [ "comic" ]; + url = "https://xkcd.com/atom.xml"; + } + ] + ++ (map + (url: { + tags = [ "youtube" ]; + inherit url; + }) + [ + "https://www.youtube.com/feeds/videos.xml?channel_id=UCqDbZac1bo_WEPau9c5R5WQ" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCuCkxoKLYO_EQ2GeFtbM_bw" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCwxrHMcTY7DCJSYCSftJOTA" + "https://www.youtube.com/feeds/videos.xml?channel_id=UC1dRqPWIjPwcONdV2L1-mrw" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCCWeRTgd79JL0ilH0ZywSJA" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCXnNibvR_YIdyPs8PZIBoEw" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCRHXUZ0BxbkU2MYZgsuFgkQ" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCdnteqJUEFetgKgWItToLHg" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCE5dIscvDxrb7CD5uiJJOiw" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCbtwi4wK1YXd9AyV_4UcE6g" + "https://www.youtube.com/feeds/videos.xml?channel_id=UC9pVBqtx2-XrSfKn3BwHrXA" + "https://www.youtube.com/feeds/videos.xml?channel_id=UChIs72whgZI9w6d6FhwGGHA" + "https://www.youtube.com/feeds/videos.xml?channel_id=UC1D3yD4wlPMico0dss264XA" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCFhXFikryT4aFcLkLw2LBLA" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCYO_jab_esuFRV4b17AJtAw" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCy0tKL1T7wFoYcxCe0xjN6Q" + "https://www.youtube.com/feeds/videos.xml?channel_id=UClRwC5Vc8HrB6vGx6Ti-lhA" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCWoSKWs8h6lFdiEDAjuIfpA" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCwRqWnW5ZkVaP_lZF7caZ-g" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCk9RA3G-aVQXvp7-Q4Ac9kQ" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCto7D1L-MiRoOziCXK9uT5Q" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCKOvOaJv4GK-oDqx-sj7VVg" + "https://www.youtube.com/feeds/videos.xml?channel_id=UChFur_NwVSbUozOcF_F2kMg" + "https://www.youtube.com/feeds/videos.xml?channel_id=UCL0EBrPPyepiM_U3CIW-0xw" + ] + ); + }; + home.persistence.default.directories = [ ".local/share/newsboat" ]; +} diff --git a/programs/desktop/pim/secrets.yaml b/programs/desktop/pim/secrets.yaml new file mode 100644 index 00000000..36b2b724 --- /dev/null +++ b/programs/desktop/pim/secrets.yaml @@ -0,0 +1,44 @@ +accounts: + calendar: + accounts: + lotte: + remote: + password: ENC[AES256_GCM,data:Y+ITsQj6vFJ2Jgk8,iv:ZrdVVxh2L9pJKhLWaz3BE+IU0xasn4WQ1Jm0kpnWMLI=,tag:gTJsmCNqnKNbhBXJipijbA==,type:str] + contact: + accounts: + lotte: + remote: + password: ENC[AES256_GCM,data:Swzr3KZgLh5EMo1J,iv:QQl0mUbs9uCgFlv+GgOFxAJ+YkUmjwayMM3TR0W0teE=,tag:Ha+8dv7299lPiPDoXU2Lig==,type:str] + email: + accounts: + lotte: + password: ENC[AES256_GCM,data:+Sf6HN8A1ULHW7nX,iv:yG2I0IX4OQysLbMb4B+k7T9uxxvb4WEs0gcpLXO+mG0=,tag:pLTYJZlPeGrw/Ws4nA8KKw==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzZit5SC9uVEpHUlFLSlVj + NWdyK3FLaTIwYnowdDdVWXJhVUcyczNEckVZCmdpU1VQZTFpeDRMN0FBTU0wOGs2 + MTBWTFg1V21BUitpWXZUbSs5bHJHSTAKLS0tICttZk1ldGFoaEloYmErR3J6OHA5 + V0FCYjdlckhkR3VOWjJkdDFFMzJucUkKC+Ru5SgA1h/vNV95L4homj8jIHgJ8OLc + YbkptH9Yk86491HxgbXNfDjYTxyemOldD5Z9TGWIGkXPQNpTIbxZiA== + -----END AGE ENCRYPTED FILE----- + - recipient: age15g6tzvcmcp3ae4hwnn4pwewat6eq9unlhtjrlaka6rf94ej9dd5qqpgt7u + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3b1dLdTk3L2dZcHAwaURI + MThMZWo2dGRaaUlrTUg1amhuUytLTFB3eVhrCm15Nm9SK0pqMVZETmRDdTBOQVpL + WlExNnhMVmI1bUJQRENWZlI1dmZqa28KLS0tIGZxc2RkbnM2N2VHK0s4anVmaUVj + ZC92TnJZb3NBVUdteHhrNk5pK3QwSmcKbY4gZ0wDYR2A9mG8i69kY1KGi5iiAUWo + jHi0K4vaAQly8IbKnMtxCOlzpLPBg2zCV9zSyOyDYedf1zEt+lnNAw== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-11-11T08:57:33Z" + mac: ENC[AES256_GCM,data:cGooQpFW9SrmvFwxhBfUI/BUjYbrQTfyqvsa1vhdc9S1M+VFKzrmIfaSpuFslj6///WbvQKpi9qcqWNhCdr6wWMCSR14ewMk57i0l3AsmfT4j3yElMl15+ereQMZ3z2c1NbU4x1ZP0OSCPAXUgr44qzY3EVziQrwbNRlAGqkk8M=,iv:U7O9mFyD6rA1efTlQKcl13vLC9TPekiDfCJGbAYtjPk=,tag:K3sd6T+wSdWdOU8VkEnbOw==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.1 diff --git a/programs/desktop/pim/taskwarrior.nix b/programs/desktop/pim/taskwarrior.nix new file mode 100644 index 00000000..8847fad1 --- /dev/null +++ b/programs/desktop/pim/taskwarrior.nix @@ -0,0 +1,8 @@ +{ pkgs, config, ... }: +{ + programs.taskwarrior = { + enable = true; + package = pkgs.taskwarrior3; + dataLocation = "${config.home.homeDirectory}/Data/tasks"; + }; +} diff --git a/programs/desktop/pipewire.nix b/programs/desktop/pipewire.nix new file mode 100644 index 00000000..8ad8e738 --- /dev/null +++ b/programs/desktop/pipewire.nix @@ -0,0 +1,11 @@ +{ ... }: +{ + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + }; +} diff --git a/programs/desktop/steam/default.nix b/programs/desktop/steam/default.nix new file mode 100644 index 00000000..55943ca8 --- /dev/null +++ b/programs/desktop/steam/default.nix @@ -0,0 +1,12 @@ +{ lib, config, ... }: +{ + programs.steam = lib.mkIf config.isGraphical { + enable = !config.isInstaller; + remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play + dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server + localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers + }; + nixpkgs.config.allowUnfree = true; + + home-manager.users.darkkirb.imports = if config.isGraphical then [ ./home-manager.nix ] else [ ]; +} diff --git a/programs/desktop/steam/home-manager.nix b/programs/desktop/steam/home-manager.nix new file mode 100644 index 00000000..bfa7d248 --- /dev/null +++ b/programs/desktop/steam/home-manager.nix @@ -0,0 +1,9 @@ +{ ... }: +{ + home.persistence.default.directories = [ + { + directory = ".local/share/Steam"; + method = "symlink"; + } + ]; +} diff --git a/programs/desktop/syncthing/default.nix b/programs/desktop/syncthing/default.nix new file mode 100644 index 00000000..a3869a1b --- /dev/null +++ b/programs/desktop/syncthing/default.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + services.syncthing = { + enable = true; + tray.enable = true; + }; + home.persistence.default.directories = [ ".local/state/syncthing" ]; +} diff --git a/programs/editors/default.nix b/programs/editors/default.nix new file mode 100644 index 00000000..882a0ae0 --- /dev/null +++ b/programs/editors/default.nix @@ -0,0 +1,7 @@ +{ config, ... }: +{ + imports = [ + ./nvim + ]; + home-manager.users.darkkirb.imports = if config.isGraphical then [ ./vscode ] else [ ]; +} diff --git a/config/programs/vim/config/after/ftplugin/cpp.vim b/programs/editors/nvim/config/after/ftplugin/cpp.vim similarity index 100% rename from config/programs/vim/config/after/ftplugin/cpp.vim rename to programs/editors/nvim/config/after/ftplugin/cpp.vim diff --git a/config/programs/vim/config/after/ftplugin/gitconfig.vim b/programs/editors/nvim/config/after/ftplugin/gitconfig.vim similarity index 100% rename from config/programs/vim/config/after/ftplugin/gitconfig.vim rename to programs/editors/nvim/config/after/ftplugin/gitconfig.vim diff --git a/config/programs/vim/config/after/ftplugin/javascript.vim b/programs/editors/nvim/config/after/ftplugin/javascript.vim similarity index 100% rename from config/programs/vim/config/after/ftplugin/javascript.vim rename to programs/editors/nvim/config/after/ftplugin/javascript.vim diff --git a/config/programs/vim/config/after/ftplugin/json.vim b/programs/editors/nvim/config/after/ftplugin/json.vim similarity index 100% rename from config/programs/vim/config/after/ftplugin/json.vim rename to programs/editors/nvim/config/after/ftplugin/json.vim diff --git a/config/programs/vim/config/after/ftplugin/lua.vim b/programs/editors/nvim/config/after/ftplugin/lua.vim similarity index 100% rename from config/programs/vim/config/after/ftplugin/lua.vim rename to programs/editors/nvim/config/after/ftplugin/lua.vim diff --git a/config/programs/vim/config/after/ftplugin/markdown.vim b/programs/editors/nvim/config/after/ftplugin/markdown.vim similarity index 100% rename from config/programs/vim/config/after/ftplugin/markdown.vim rename to programs/editors/nvim/config/after/ftplugin/markdown.vim diff --git a/config/programs/vim/config/after/ftplugin/python.vim b/programs/editors/nvim/config/after/ftplugin/python.vim similarity index 100% rename from config/programs/vim/config/after/ftplugin/python.vim rename to programs/editors/nvim/config/after/ftplugin/python.vim diff --git a/config/programs/vim/config/after/ftplugin/qf.vim b/programs/editors/nvim/config/after/ftplugin/qf.vim similarity index 100% rename from config/programs/vim/config/after/ftplugin/qf.vim rename to programs/editors/nvim/config/after/ftplugin/qf.vim diff --git a/config/programs/vim/config/after/ftplugin/sql.vim b/programs/editors/nvim/config/after/ftplugin/sql.vim similarity index 100% rename from config/programs/vim/config/after/ftplugin/sql.vim rename to programs/editors/nvim/config/after/ftplugin/sql.vim diff --git a/config/programs/vim/config/after/ftplugin/tex.lua b/programs/editors/nvim/config/after/ftplugin/tex.vim similarity index 100% rename from config/programs/vim/config/after/ftplugin/tex.lua rename to programs/editors/nvim/config/after/ftplugin/tex.vim diff --git a/config/programs/vim/config/after/ftplugin/text.vim b/programs/editors/nvim/config/after/ftplugin/text.vim similarity index 100% rename from config/programs/vim/config/after/ftplugin/text.vim rename to programs/editors/nvim/config/after/ftplugin/text.vim diff --git a/config/programs/vim/config/after/ftplugin/vim.vim b/programs/editors/nvim/config/after/ftplugin/vim.vim similarity index 100% rename from config/programs/vim/config/after/ftplugin/vim.vim rename to programs/editors/nvim/config/after/ftplugin/vim.vim diff --git a/config/programs/vim/config/after/ftplugin/yaml.vim b/programs/editors/nvim/config/after/ftplugin/yaml.vim similarity index 100% rename from config/programs/vim/config/after/ftplugin/yaml.vim rename to programs/editors/nvim/config/after/ftplugin/yaml.vim diff --git a/config/programs/vim/config/autoload/buf_utls.vim b/programs/editors/nvim/config/autoload/buf_utls.vim similarity index 100% rename from config/programs/vim/config/autoload/buf_utls.vim rename to programs/editors/nvim/config/autoload/buf_utls.vim diff --git a/config/programs/vim/config/autoload/text_obj.vim b/programs/editors/nvim/config/autoload/text_obj.vim similarity index 100% rename from config/programs/vim/config/autoload/text_obj.vim rename to programs/editors/nvim/config/autoload/text_obj.vim diff --git a/config/programs/vim/config/autoload/utils.vim b/programs/editors/nvim/config/autoload/utils.vim similarity index 100% rename from config/programs/vim/config/autoload/utils.vim rename to programs/editors/nvim/config/autoload/utils.vim diff --git a/config/programs/vim/config/ftdetect/pdc.vim b/programs/editors/nvim/config/ftdetect/pdc.vim similarity index 100% rename from config/programs/vim/config/ftdetect/pdc.vim rename to programs/editors/nvim/config/ftdetect/pdc.vim diff --git a/config/programs/vim/config/lua/colorschemes.lua b/programs/editors/nvim/config/lua/colorschemes.lua similarity index 100% rename from config/programs/vim/config/lua/colorschemes.lua rename to programs/editors/nvim/config/lua/colorschemes.lua diff --git a/config/programs/vim/config/lua/config/bqf.lua b/programs/editors/nvim/config/lua/config/bqf.lua similarity index 100% rename from config/programs/vim/config/lua/config/bqf.lua rename to programs/editors/nvim/config/lua/config/bqf.lua diff --git a/config/programs/vim/config/lua/config/bufferline.lua b/programs/editors/nvim/config/lua/config/bufferline.lua similarity index 100% rename from config/programs/vim/config/lua/config/bufferline.lua rename to programs/editors/nvim/config/lua/config/bufferline.lua diff --git a/config/programs/vim/config/lua/config/cmp-ai.lua b/programs/editors/nvim/config/lua/config/cmp-ai.lua similarity index 100% rename from config/programs/vim/config/lua/config/cmp-ai.lua rename to programs/editors/nvim/config/lua/config/cmp-ai.lua diff --git a/config/programs/vim/config/lua/config/dashboard-nvim.lua b/programs/editors/nvim/config/lua/config/dashboard-nvim.lua similarity index 100% rename from config/programs/vim/config/lua/config/dashboard-nvim.lua rename to programs/editors/nvim/config/lua/config/dashboard-nvim.lua diff --git a/config/programs/vim/config/lua/config/fidget-nvim.lua b/programs/editors/nvim/config/lua/config/fidget-nvim.lua similarity index 100% rename from config/programs/vim/config/lua/config/fidget-nvim.lua rename to programs/editors/nvim/config/lua/config/fidget-nvim.lua diff --git a/config/programs/vim/config/lua/config/fugitive.lua b/programs/editors/nvim/config/lua/config/fugitive.lua similarity index 100% rename from config/programs/vim/config/lua/config/fugitive.lua rename to programs/editors/nvim/config/lua/config/fugitive.lua diff --git a/config/programs/vim/config/lua/config/git-linker.lua b/programs/editors/nvim/config/lua/config/git-linker.lua similarity index 100% rename from config/programs/vim/config/lua/config/git-linker.lua rename to programs/editors/nvim/config/lua/config/git-linker.lua diff --git a/config/programs/vim/config/lua/config/gitsigns.lua b/programs/editors/nvim/config/lua/config/gitsigns.lua similarity index 100% rename from config/programs/vim/config/lua/config/gitsigns.lua rename to programs/editors/nvim/config/lua/config/gitsigns.lua diff --git a/config/programs/vim/config/lua/config/hlslens.lua b/programs/editors/nvim/config/lua/config/hlslens.lua similarity index 100% rename from config/programs/vim/config/lua/config/hlslens.lua rename to programs/editors/nvim/config/lua/config/hlslens.lua diff --git a/config/programs/vim/config/lua/config/indent-blankline.lua b/programs/editors/nvim/config/lua/config/indent-blankline.lua similarity index 100% rename from config/programs/vim/config/lua/config/indent-blankline.lua rename to programs/editors/nvim/config/lua/config/indent-blankline.lua diff --git a/config/programs/vim/config/lua/config/lsp.lua b/programs/editors/nvim/config/lua/config/lsp.lua similarity index 100% rename from config/programs/vim/config/lua/config/lsp.lua rename to programs/editors/nvim/config/lua/config/lsp.lua diff --git a/config/programs/vim/config/lua/config/nvim-cmp.lua b/programs/editors/nvim/config/lua/config/nvim-cmp.lua similarity index 100% rename from config/programs/vim/config/lua/config/nvim-cmp.lua rename to programs/editors/nvim/config/lua/config/nvim-cmp.lua diff --git a/config/programs/vim/config/lua/config/nvim-notify.lua b/programs/editors/nvim/config/lua/config/nvim-notify.lua similarity index 100% rename from config/programs/vim/config/lua/config/nvim-notify.lua rename to programs/editors/nvim/config/lua/config/nvim-notify.lua diff --git a/config/programs/vim/config/lua/config/nvim-tree.lua b/programs/editors/nvim/config/lua/config/nvim-tree.lua similarity index 100% rename from config/programs/vim/config/lua/config/nvim-tree.lua rename to programs/editors/nvim/config/lua/config/nvim-tree.lua diff --git a/config/programs/vim/config/lua/config/nvim_hop.lua b/programs/editors/nvim/config/lua/config/nvim_hop.lua similarity index 100% rename from config/programs/vim/config/lua/config/nvim_hop.lua rename to programs/editors/nvim/config/lua/config/nvim_hop.lua diff --git a/config/programs/vim/config/lua/config/statusline.lua b/programs/editors/nvim/config/lua/config/statusline.lua similarity index 100% rename from config/programs/vim/config/lua/config/statusline.lua rename to programs/editors/nvim/config/lua/config/statusline.lua diff --git a/config/programs/vim/config/lua/config/treesitter.lua b/programs/editors/nvim/config/lua/config/treesitter.lua similarity index 100% rename from config/programs/vim/config/lua/config/treesitter.lua rename to programs/editors/nvim/config/lua/config/treesitter.lua diff --git a/programs/editors/nvim/config/lua/config/which-key.lua b/programs/editors/nvim/config/lua/config/which-key.lua new file mode 100644 index 00000000..ea0aa4c9 --- /dev/null +++ b/programs/editors/nvim/config/lua/config/which-key.lua @@ -0,0 +1,6 @@ +require("which-key").setup { + preset = "modern", + icons = { + mappings = false + } +} \ No newline at end of file diff --git a/config/programs/vim/config/lua/config/yanky.lua b/programs/editors/nvim/config/lua/config/yanky.lua similarity index 100% rename from config/programs/vim/config/lua/config/yanky.lua rename to programs/editors/nvim/config/lua/config/yanky.lua diff --git a/config/programs/vim/config/lua/config/zen-mode.lua b/programs/editors/nvim/config/lua/config/zen-mode.lua similarity index 100% rename from config/programs/vim/config/lua/config/zen-mode.lua rename to programs/editors/nvim/config/lua/config/zen-mode.lua diff --git a/config/programs/vim/config/lua/custom-autocmd.lua b/programs/editors/nvim/config/lua/custom-autocmd.lua similarity index 100% rename from config/programs/vim/config/lua/custom-autocmd.lua rename to programs/editors/nvim/config/lua/custom-autocmd.lua diff --git a/config/programs/vim/config/lua/mappings.lua b/programs/editors/nvim/config/lua/mappings.lua similarity index 100% rename from config/programs/vim/config/lua/mappings.lua rename to programs/editors/nvim/config/lua/mappings.lua diff --git a/config/programs/vim/config/lua/plugins.lua b/programs/editors/nvim/config/lua/plugins.lua similarity index 100% rename from config/programs/vim/config/lua/plugins.lua rename to programs/editors/nvim/config/lua/plugins.lua diff --git a/config/programs/vim/config/lua/utils.lua b/programs/editors/nvim/config/lua/utils.lua similarity index 100% rename from config/programs/vim/config/lua/utils.lua rename to programs/editors/nvim/config/lua/utils.lua diff --git a/config/programs/vim/config/plugin/command.vim b/programs/editors/nvim/config/plugin/command.vim similarity index 100% rename from config/programs/vim/config/plugin/command.vim rename to programs/editors/nvim/config/plugin/command.vim diff --git a/config/programs/vim/config/plugin/log-autocmds.vim b/programs/editors/nvim/config/plugin/log-autocmds.vim similarity index 100% rename from config/programs/vim/config/plugin/log-autocmds.vim rename to programs/editors/nvim/config/plugin/log-autocmds.vim diff --git a/config/programs/vim/config/resources/head.tex b/programs/editors/nvim/config/resources/head.tex similarity index 100% rename from config/programs/vim/config/resources/head.tex rename to programs/editors/nvim/config/resources/head.tex diff --git a/config/programs/vim/config/viml_conf/autocommands.vim b/programs/editors/nvim/config/viml_conf/autocommands.vim similarity index 100% rename from config/programs/vim/config/viml_conf/autocommands.vim rename to programs/editors/nvim/config/viml_conf/autocommands.vim diff --git a/config/programs/vim/config/viml_conf/options.vim b/programs/editors/nvim/config/viml_conf/options.vim similarity index 100% rename from config/programs/vim/config/viml_conf/options.vim rename to programs/editors/nvim/config/viml_conf/options.vim diff --git a/config/programs/vim/config/viml_conf/plugins.vim b/programs/editors/nvim/config/viml_conf/plugins.vim similarity index 100% rename from config/programs/vim/config/viml_conf/plugins.vim rename to programs/editors/nvim/config/viml_conf/plugins.vim diff --git a/programs/editors/nvim/default.nix b/programs/editors/nvim/default.nix new file mode 100644 index 00000000..d4f71c4c --- /dev/null +++ b/programs/editors/nvim/default.nix @@ -0,0 +1,8 @@ +_: { + home-manager.users.root.imports = [ + ./home-manager.nix + ]; + home-manager.users.darkkirb.imports = [ + ./home-manager.nix + ]; +} diff --git a/config/programs/vim/globals.nix b/programs/editors/nvim/globals.nix similarity index 94% rename from config/programs/vim/globals.nix rename to programs/editors/nvim/globals.nix index bbcc2d13..a8530ef2 100644 --- a/config/programs/vim/globals.nix +++ b/programs/editors/nvim/globals.nix @@ -1,18 +1,13 @@ { config, pkgs, - lib, ... -}: let - boolToStr = b: - if b - then "true" - else "false"; - boolToStr' = b: - if b - then "1" - else "0"; -in { +}: +let + boolToStr = b: if b then "true" else "false"; + boolToStr' = b: if b then "1" else "0"; +in +{ xdg.configFile."nvim/lua/globals.lua".text = '' local fn = vim.fn local api = vim.api diff --git a/config/programs/vim/default.nix b/programs/editors/nvim/home-manager.nix similarity index 87% rename from config/programs/vim/default.nix rename to programs/editors/nvim/home-manager.nix index 3c34cc76..d091e591 100644 --- a/config/programs/vim/default.nix +++ b/programs/editors/nvim/home-manager.nix @@ -1,14 +1,15 @@ -desktop: { +{ pkgs, config, ... -}: { +}: +{ imports = [ ./globals.nix ./plugins/lazy-nvim.nix ]; programs.neovim = { - plugins = with pkgs.vimPlugins; [lazy-nvim]; + plugins = with pkgs.vimPlugins; [ lazy-nvim ]; enable = true; viAlias = true; vimAlias = true; @@ -53,9 +54,9 @@ desktop: { withPython3 = true; }; systemd.user.tmpfiles.rules = [ - "d %h/.cache/nvim/undo-files 0700 - - mM:1w -" - "d %h/.cache/nvim/swap-files 0700 - - mM:1w -" - "d %h/.cache/nvim/backup-files 0700 - - mM:1w -" + "d /persistent${config.xdg.cacheHome}/nvim/undo-files 0700 - - mM:1w -" + "d /persistent${config.xdg.cacheHome}/nvim/swap-files 0700 - - mM:1w -" + "d /persistent${config.xdg.cacheHome}/nvim/backup-files 0700 - - mM:1w -" ]; xdg.configFile.nvim = { recursive = true; diff --git a/config/programs/vim/plugins/lazy-nvim.nix b/programs/editors/nvim/plugins/lazy-nvim.nix similarity index 93% rename from config/programs/vim/plugins/lazy-nvim.nix rename to programs/editors/nvim/plugins/lazy-nvim.nix index 14e28dd8..499bef83 100644 --- a/config/programs/vim/plugins/lazy-nvim.nix +++ b/programs/editors/nvim/plugins/lazy-nvim.nix @@ -2,11 +2,13 @@ pkgs, config, ... -}: { +}: +{ programs.neovim = { - plugins = with pkgs.vimPlugins; + plugins = + with pkgs.vimPlugins; [ - (nvim-treesitter.withPlugins (p: [])) + (nvim-treesitter.withPlugins (p: [ ])) (pkgs.vimUtils.buildVimPlugin { name = "vim-highlighturl"; src = pkgs.fetchFromGitHub { @@ -39,7 +41,10 @@ indent-blankline-nvim lazy-nvim (LeaderF.overrideAttrs (super: { - buildInputs = [pkgs.python3 pkgs.python3Packages.setuptools]; + buildInputs = [ + pkgs.python3 + pkgs.python3Packages.setuptools + ]; })) lspkind-nvim lualine-nvim @@ -84,12 +89,13 @@ zen-mode-nvim ] ++ ( - if pkgs.targetPlatform.system != "riscv64-linux" - then [ - diffview-nvim - vim-grammarous - ] - else [] + if pkgs.targetPlatform.system != "riscv64-linux" then + [ + diffview-nvim + vim-grammarous + ] + else + [ ] ); }; xdg.configFile."nvim/lua/config/lazy-nvim.lua".text = '' @@ -280,12 +286,14 @@ -- Better git commit experience { "rhysd/committia.vim", lazy = true }, ${ - if pkgs.targetPlatform.system != "riscv64-linux" - then '' { - "sindrets/diffview.nvim" - },'' - else "" - } + if pkgs.targetPlatform.system != "riscv64-linux" then + '' + { + "sindrets/diffview.nvim" + },'' + else + "" + } { "kevinhwang91/nvim-bqf", ft = "qf", @@ -310,13 +318,15 @@ end, }, ${ - if pkgs.targetPlatform.system != "riscv64-linux" - then '' { - "rhysd/vim-grammarous", - ft = { "markdown" }, - },'' - else "" - } + if pkgs.targetPlatform.system != "riscv64-linux" then + '' + { + "rhysd/vim-grammarous", + ft = { "markdown" }, + },'' + else + "" + } { "chrisbra/unicode.vim", event = "VeryLazy" }, -- Additional powerful text object for vim, this plugin should be studied -- carefully to use its full power diff --git a/programs/editors/vscode/default.nix b/programs/editors/vscode/default.nix new file mode 100644 index 00000000..645ccf09 --- /dev/null +++ b/programs/editors/vscode/default.nix @@ -0,0 +1,101 @@ +{ + vscode-server, + config, + systemConfig, + lib, + pkgs, + ... +}: +{ + imports = [ + "${vscode-server}/modules/vscode-server/home.nix" + ]; + programs.vscode = { + enable = true; + enableExtensionUpdateCheck = false; + enableUpdateCheck = false; + mutableExtensionsDir = false; + extensions = + (with pkgs.vscode-extensions; [ + fill-labs.dependi + jnoortheen.nix-ide + mechatroner.rainbow-csv + mkhl.direnv + pkief.material-icon-theme + rust-lang.rust-analyzer + signageos.signageos-vscode-sops + tamasfe.even-better-toml + vadimcn.vscode-lldb + ]) + ++ (with pkgs.vscode-marketplace; [ + janisdd.vscode-edit-csv + jscearcy.rust-doc-viewer + ]); + userSettings = { + "editor.fontLigatures" = true; + "editor.formatOnPaste" = true; + "editor.formatOnSave" = true; + "editor.formatOnType" = true; + "nix.enableLanguageServer" = true; + "nix.formatterPath" = "${pkgs.nixfmt-rfc-style}/bin/nixfmt"; + "nix.serverPath" = "${pkgs.nil}/bin/nil"; + "nix.serverSettings" = { + nil.formatting.command = [ "${pkgs.nixfmt-rfc-style}/bin/nixfmt" ]; + }; + "rust-analyzer.cargo.targetDir" = "${config.xdg.cacheHome}/cargo/rust-analyzer-target"; + "rust-analyzer.check.command" = "clippy"; + "rust-analyzer.diagnostics.experimental.enable" = true; + "rust-analyzer.diagnostics.styleLints.enable" = true; + "rust-analyzer.hover.actions.references.enable" = true; + "rust-analyzer.imports.granularity.enforce" = true; + "rust-analyzer.inlayHints.bindingModeHints.enable" = true; + "rust-analyzer.inlayHints.closureCaptureHints.enable" = true; + "rust-analyzer.inlayHints.closureReturnTypeHints.enable" = "always"; + "rust-analyzer.inlayHints.discriminantHints.enable" = "always"; + "rust-analyzer.inlayHints.lifetimeElisionHints.enable" = "always"; + "rust-analyzer.inlayHints.lifetimeElisionHints.useParameterNames" = true; + "rust-analyzer.inlayHints.rangeExclusiveHints.enable" = true; + "rust-analyzer.inlayHints.typeHints.hideClosureInitialization" = false; + "rust-analyzer.interpret.tests" = true; + "rust-analyzer.lens.references.adt.enable" = true; + "rust-analyzer.lens.references.enumVariant.enable" = true; + "rust-analyzer.lens.references.method.enable" = true; + "rust-analyzer.lens.references.trait.enable" = true; + "sops.binPath" = "${pkgs.sops}/bin/sops"; + "workbench.iconTheme" = "material-icon-theme"; + }; + }; + services.vscode-server.enable = true; + systemd.user.tmpfiles.rules = lib.mkMerge [ + [ + "d /persistent${config.xdg.cacheHome}/Code/Cache - - - - -" + "d /persistent${config.xdg.cacheHome}/Code/CachedData - - - - -" + "d /persistent${config.xdg.cacheHome}/Code/CachedProfilesData - - - - -" + "d /persistent${config.xdg.cacheHome}/Code/Code\x20Cache - - - - -" + "d /persistent${config.xdg.cacheHome}/Code/DawnGraphiteCache - - - - -" + "d /persistent${config.xdg.dataHome}/Code - - - - -" + "L /persistent${config.xdg.dataHome}/Code/Cache - - - - ${config.xdg.cacheHome}/Code/Cache" + "L /persistent${config.xdg.dataHome}/Code/CachedData - - - - ${config.xdg.cacheHome}/Code/CachedData" + "L /persistent${config.xdg.dataHome}/Code/CachedProfilesData - - - - ${config.xdg.cacheHome}/Code/CachedProfilesData" + "L /persistent${config.xdg.dataHome}/Code/Code\x20Cache - - - - ${config.xdg.cacheHome}/Code/Code\x20Cache" + "L /persistent${config.xdg.dataHome}/Code/DawnGraphiteCache - - - - ${config.xdg.cacheHome}/Code/DawnGraphiteCache" + "L ${config.xdg.configHome}/Code - - - - ${config.xdg.dataHome}/Code" + ] + # GPU Cache sometimes breaks for electron apps on intel, so only persist that on non-intel + (lib.mkIf (!systemConfig.isIntelGPU) [ + "d /persistent${config.xdg.cacheHome}/Code/DawnWebGPUCache - - - - -" + "d /persistent${config.xdg.cacheHome}/Code/GPUCache - - - - -" + "L /persistent${config.xdg.dataHome}/Code/DawnWebGPUCache - - - - ${config.xdg.cacheHome}/Code/DawnWebGPUCache" + "L /persistent${config.xdg.dataHome}/Code/GPUCache - - - - ${config.xdg.cacheHome}/Code/GPUCache" + ]) + (lib.mkIf (systemConfig.isIntelGPU) [ + "d /tmp${config.xdg.cacheHome}/Code/DawnWebGPUCache - - - - -" + "d /tmp${config.xdg.cacheHome}/Code/GPUCache - - - - -" + "L /persistent${config.xdg.dataHome}/Code/DawnWebGPUCache - - - - /tmp${config.xdg.cacheHome}/Code/DawnWebGPUCache" + "L /persistent${config.xdg.dataHome}/Code/GPUCache - - - - /tmp${config.xdg.cacheHome}/Code/GPUCache" + ]) + ]; + home.persistence.default.directories = [ + ".local/share/Code" + ]; +} diff --git a/programs/home-manager.nix b/programs/home-manager.nix new file mode 100644 index 00000000..6b91b5f7 --- /dev/null +++ b/programs/home-manager.nix @@ -0,0 +1,14 @@ +{ pkgs, ... }: +{ + programs.eza.enable = true; + programs.bat.enable = true; + programs.fzf.enable = true; + home.shellAliases = { + cat = "bat"; + less = "bat"; + }; + home.packages = with pkgs; [ + ripgrep + fd + ]; +} diff --git a/programs/shell/default.nix b/programs/shell/default.nix new file mode 100644 index 00000000..fd6e9b19 --- /dev/null +++ b/programs/shell/default.nix @@ -0,0 +1,14 @@ +{ ... }: +{ + imports = [ + ./fish + ./tmux + ]; + + home-manager.users.root.imports = [ + ./home-manager.nix + ]; + home-manager.users.darkkirb.imports = [ + ./home-manager.nix + ]; +} diff --git a/programs/shell/fish/default.nix b/programs/shell/fish/default.nix new file mode 100644 index 00000000..7be5a6fe --- /dev/null +++ b/programs/shell/fish/default.nix @@ -0,0 +1,21 @@ +{ pkgs, ... }: +{ + programs.fish.enable = true; + home-manager.users.root.imports = [ + ./home-manager.nix + ]; + home-manager.users.darkkirb.imports = [ + ./home-manager.nix + ]; + programs.bash.interactiveShellInit = '' + for user in root darkkirb; do + if [[ $USER == $user ]]; then + if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] + then + shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" + exec ${pkgs.fish}/bin/fish $LOGIN_OPTION + fi + fi + done + ''; +} diff --git a/programs/shell/fish/home-manager.nix b/programs/shell/fish/home-manager.nix new file mode 100644 index 00000000..19d67cdb --- /dev/null +++ b/programs/shell/fish/home-manager.nix @@ -0,0 +1,28 @@ +{ pkgs, ... }: +{ + imports = [ + ./tide.nix + ./z.nix + ]; + programs.fish = { + enable = true; + plugins = with pkgs.fishPlugins; [ + { + name = "autopair"; + src = autopair.src; + } + { + name = "fzf"; + src = fzf.src; + } + ]; + }; + home.persistence.default.files = [ + ".local/share/fish/fish_history" + ]; + home.persistence.default.directories = [ + ".local/share/direnv" + ]; + programs.nix-index.enable = true; + programs.direnv.enable = true; +} diff --git a/programs/shell/fish/tide.nix b/programs/shell/fish/tide.nix new file mode 100644 index 00000000..efaf0c1f --- /dev/null +++ b/programs/shell/fish/tide.nix @@ -0,0 +1,12 @@ +{ pkgs, ... }: +{ + programs.fish.plugins = with pkgs.fishPlugins; [ + { + name = "tide"; + src = tide.src; + } + ]; + programs.fish.shellInit = '' + tide configure --auto --style=Rainbow --prompt_colors='True color' --show_time='24-hour format' --rainbow_prompt_separators=Round --powerline_prompt_heads=Sharp --powerline_prompt_tails=Flat --powerline_prompt_style='Two lines, frame' --prompt_connection=Dotted --powerline_right_prompt_frame=Yes --prompt_connection_andor_frame_color=Light --prompt_spacing=Sparse --icons='Many icons' --transient=Yes + ''; +} diff --git a/programs/shell/fish/z.nix b/programs/shell/fish/z.nix new file mode 100644 index 00000000..23d7e13e --- /dev/null +++ b/programs/shell/fish/z.nix @@ -0,0 +1,12 @@ +{ pkgs, ... }: +{ + programs.fish.plugins = with pkgs.fishPlugins; [ + { + name = "z"; + src = z.src; + } + ]; + home.persistence.default.directories = [ + ".local/share/z" + ]; +} diff --git a/programs/shell/home-manager.nix b/programs/shell/home-manager.nix new file mode 100644 index 00000000..ba1bbcf7 --- /dev/null +++ b/programs/shell/home-manager.nix @@ -0,0 +1,20 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.hyfetch ]; + xdg.configFile."hyfetch.json".text = builtins.toJSON { + preset = "nonhuman-unity"; + mode = "rgb"; + light_dark = "dark"; + lightness = 0.65; + color_align = { + mode = "vertical"; + custom_colors = [ ]; + fore_back = [ ]; + }; + backend = "neofetch"; + args = null; + distro = null; + pride_month_shown = [ ]; + pride_month_disable = false; + }; +} diff --git a/programs/shell/tmux/default.nix b/programs/shell/tmux/default.nix new file mode 100644 index 00000000..38c3ff94 --- /dev/null +++ b/programs/shell/tmux/default.nix @@ -0,0 +1,9 @@ +{ ... }: +{ + home-manager.users.root.imports = [ + ./home-manager.nix + ]; + home-manager.users.darkkirb.imports = [ + ./home-manager.nix + ]; +} diff --git a/config/programs/tmux.nix b/programs/shell/tmux/home-manager.nix similarity index 80% rename from config/programs/tmux.nix rename to programs/shell/tmux/home-manager.nix index 10efaa5a..f998a376 100644 --- a/config/programs/tmux.nix +++ b/programs/shell/tmux/home-manager.nix @@ -1,4 +1,5 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ programs.tmux = { enable = true; baseIndex = 1; @@ -33,4 +34,12 @@ set -g default-terminal "screen-256color" ''; }; + programs.fish.shellInit = '' + if status is-interactive + and not set -q TMUX + and set -q SSH_TTY + tmux attach || tmux + end + ''; + programs.fzf.tmux.enableShellIntegration = true; } diff --git a/config/programs/builders.nix b/programs/ssh/builders.nix similarity index 53% rename from config/programs/builders.nix rename to programs/ssh/builders.nix index 0d893adf..7574031b 100644 --- a/config/programs/builders.nix +++ b/programs/ssh/builders.nix @@ -1,42 +1,54 @@ -{config, ...}: { +{ + config, + systemConfig, + lib, + ... +}: +let + identityFile = + if config.home.username == "root" then + systemConfig.sops.secrets.".ssh/builder_id_ed25519".path + else + config.sops.secrets.".ssh/builder_id_ed25519".path; +in +{ programs.ssh = { enable = true; matchBlocks = { "build-nas" = { hostname = "nas.int.chir.rs"; identitiesOnly = true; - identityFile = "${config.home.homeDirectory}/.ssh/builder_id_ed25519"; + inherit identityFile; port = 22; user = "remote-build"; }; "build-rainbow-resort" = { hostname = "rainbow-resort.int.chir.rs"; identitiesOnly = true; - identityFile = "${config.home.homeDirectory}/.ssh/builder_id_ed25519"; + inherit identityFile; port = 22; user = "remote-build"; }; "build-aarch64" = { hostname = "instance-20221213-1915.int.chir.rs"; identitiesOnly = true; - identityFile = "${config.home.homeDirectory}/.ssh/builder_id_ed25519"; + inherit identityFile; port = 22; user = "remote-build"; }; - "backup" = { - hostname = "backup.int.chir.rs"; - identitiesOnly = true; - identityFile = "${config.home.homeDirectory}/.ssh/builder_id_ed25519"; - port = 22; - user = "backup"; - }; "build-riscv" = { - hostname = "vf2.int.chir.rs"; + hostname = "not522.tailbab65.ts.net"; identitiesOnly = true; - identityFile = "${config.home.homeDirectory}/.ssh/builder_id_ed25519"; + inherit identityFile; port = 22; user = "remote-build"; }; }; }; + sops.secrets = lib.mkIf (config.home.username != "root") { + ".ssh/builder_id_ed25519" = { + mode = "600"; + sopsFile = ./shared-keys.yaml; + }; + }; } diff --git a/programs/ssh/default.nix b/programs/ssh/default.nix new file mode 100644 index 00000000..d4f71c4c --- /dev/null +++ b/programs/ssh/default.nix @@ -0,0 +1,8 @@ +_: { + home-manager.users.root.imports = [ + ./home-manager.nix + ]; + home-manager.users.darkkirb.imports = [ + ./home-manager.nix + ]; +} diff --git a/programs/ssh/home-manager.nix b/programs/ssh/home-manager.nix new file mode 100644 index 00000000..07300719 --- /dev/null +++ b/programs/ssh/home-manager.nix @@ -0,0 +1,55 @@ +{ + lib, + config, + systemConfig, + ... +}: +{ + imports = [ + ./builders.nix + ]; + programs.ssh = { + controlMaster = "auto"; + controlPersist = "10m"; + matchBlocks."*" = + lib.hm.dag.entryAfter + [ + "build-nas" + "build-rainbow-resort" + "build-aarch64" + "build-riscv" + "rainbow-resort.int.chir.rs" + ] + { + identityFile = + if config.home.username == "root" then + systemConfig.sops.secrets.".ssh/id_ed25519_sk".path + else + config.sops.secrets.".ssh/id_ed25519_sk".path; + }; + matchBlocks."rainbow-resort.int.chir.rs" = { + forwardAgent = true; + remoteForwards = [ + { + bind.address = "/%d/.local/state/gnupg/S.gpg-agent"; + host.address = "/%d/.local/state/gnupg/S.gpg-agent.extra"; + } + { + bind.address = "/%d/.local/state/waypipe/server.sock"; + host.address = "/%d/.local/state/waypipe/client.sock"; + } + ]; + forwardX11 = true; + forwardX11Trusted = true; + setEnv.WAYLAND_DISPLAY = "wayland-waypipe"; + extraOptions.StreamLocalBindUnlink = "yes"; + }; + enable = true; + }; + sops.secrets = lib.mkIf (config.home.username != "root") { + ".ssh/id_ed25519_sk" = { + mode = "600"; + sopsFile = ./shared-keys.yaml; + }; + }; +} diff --git a/programs/ssh/shared-keys.yaml b/programs/ssh/shared-keys.yaml new file mode 100644 index 00000000..a49923eb --- /dev/null +++ b/programs/ssh/shared-keys.yaml @@ -0,0 +1,68 @@ +.ssh: + builder_id_ed25519: ENC[AES256_GCM,data:dpyWd1bm1Mf6uE5D5c2qurSKWfsrtSKf2ZY201jAEgOKJ4x7TXC31AmjSgxhjfxhf/8FVFWdHM+vtZ8tiyJYqnxmTX0SIesBdsF3CQr8MNufQA86aO74PJ8Iasbg8qY8xYm6eGCvRSdPU2VeUOA8HLdOtqJN9llq046REWztmxd3vtD6ZkpFMYVyuWHwZNlFCfS2cYAMH1n3mjVfZGmoiFW3ZeuwpXL5ObGOiktOiquGxARDuNKKd4PD1KrxB3en3dDWk++Chr4W3YBk6pNKYAS06Yt2A/YdFpMRhd+jx1BIAPB581V7DHfQ2WrOvvPrMD2xUhdNW1WLSk6QRDkysr0BYt1cvcv9YW0tjUrvdzwADzvW38tFYvdpQegTuJ659Sy+EoXk9XPp793/0AbDJJhxPomlL3UErQ+a8u2ZaO0FVB7qCvOl6cEC1Sw1RTkQgVN4/WZacEUWQImg8OB8hReZkK9sfFVA3DFjIiJRRow+I1Y32r4PB3fuTHFvKyaNhrtT6w6mop0aFsC21BtaHhupD9RSKxoX7CTR,iv:s6hq7lhhC+y/Ab/u5LP/Rf4+XzwQOWe2I4pmObq7a/Y=,tag:UDJPJBJ0K87RLe7/f0sNVg==,type:str] + id_ed25519_sk: ENC[AES256_GCM,data:vHNaGuhov/tqtyKsGXK3++Gl48k9VMdKycwSZavIWhYoyZkSnXsJeMFOWB/KYG9j/g/s4uW+tDWYZV+m1A+yuX5Uj1UcB72hBVJd6F8F/uunZW2bxRXFyI9xtcbiIi9mibWRiiemeU785gW576DCirJledCBWiEKvkEvyB4Vz0ihvxLzsrJyTXVn1PZTXRuszL70uBIgT8hUwgyE0RoGumqO8/6N8i3dPIXvF/WQ9Tx1JZnsNubDGXjzqSQQZAcmqHjmrxU29SwdSLIF20deP0LFpMJ+89X6WR03qlSFY3AY1ZYlYz70ZE6oMqY1QB9qCR28lGCRH4c2+spkQrNjArFHZAPsePe61rHuCNIvWxbiXouAFtU+jnYqSTE9eD/0QacN3lUSO4wV4TnkB13WSqOpz5asM/J9NDCFUD54R5D5gPaOei6ZP32H4lBX1Uzf/ntoCNf1bAriV3Ht/2WU40GIaSaHf2j0vaYg//cV6o5xtLsUDAUOWk3lFNb1zQtBNrmtR+2QexNqBDaEWNLHT8qIJ4OXD7HWUkuPNIB7w6uLmLrRCmP9R8zII2lbOJIAS0WaM5Th5HI=,iv:Iq+xakWRFTnoqeSxS3r1QdpyyvbHIFbavdhqWcf4hEM=,tag:4zFS141jqeSdJ71UFNsktw==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsSmxYU0RBU1Y1dzRTUFJu + N2xYeUpVeURmQkRNVW4rckEwYkNxSjlScGtVCmoxdzd1UWlKbXRKQ0hZZTFvMXBa + UTBEUnl0anFVMk4rV3VtYmFCRkRibmsKLS0tIGRKT00zQlp0RjB4a2hqQkovKzVW + R1BFM0hSdWZlU2VwVzVzY1FXcmcraWMKTe7VQ3UWgtZPvr3vkjHRBSm0Uxq2KGwF + vxXYRibdWJDr4q7O52NGoF53pHeRkJry7m9bDcgw9kHFYQh7qfwJiw== + -----END AGE ENCRYPTED FILE----- + - recipient: age15g6tzvcmcp3ae4hwnn4pwewat6eq9unlhtjrlaka6rf94ej9dd5qqpgt7u + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIeEdwNGVWd2p0b3VodVY3 + TnJwS0RVQk9nMmdpYXFHSG9NRDc2RStoYlhzCkFuaGVkMUlnNm85eU9UWHZndXJZ + NE1XYkhEN1dvcHpzamdRT3E4amdFb1kKLS0tIEFNSnNBcXllellHemtLTTJ0cEU1 + UWcvT2UzRTJObFpZR0Q0eURFUFNsb0UKBxhhczNzqcqlYpx0Ifxp/gbXoNcaV70Z + sDia1XQTsAG8NeB4TlrfWbV4Fq3yDTo9mJCxzzEdclIk5wTCnh9xdQ== + -----END AGE ENCRYPTED FILE----- + - recipient: age1emv3kzvwgl36hgllrv7rlekqy3y3c6eztadl3lv09ks3z9vv6vdqw06yqa + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLdERSVi9jTHoxTUxETWVw + bkx5QWJraW1ITEhYSGhhYmxuMUREdUV0MFRRCm9nQmJVZ1lmNGJkWFhvN1RkbnVW + b2YreHF5TmhuYzFQdlZLcXdoU3dtUUEKLS0tIE9pcGRNWXF2ajhIYXRmR2R6d2xU + WDhrQ3llNW9uQmZWM0p6TmY5Ti91SXcKGONKMtsvLR8y6QWQqV1mZq6N7tdwydfg + 44+4mHhUpbP1l7kE1GafJGublDEjtFlcAUChB77LcTRUdnxdX22VtQ== + -----END AGE ENCRYPTED FILE----- + - recipient: age1eh2vd6cdy23qazwg0hzq95pn9e6p8yaqu4g6zyan8gzal4x5ed5qful8kg + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArQ1hmejMreExWT2U3NTlh + MzNtdkpCUGUxQnlyNDc3UExQYWlPMVcvd3gwCkgxd0pDa3VzWGxadjFWM042UG50 + VlZNKzh3aTBReG8yRjdwQXlJaUk0Zk0KLS0tIDYxcTc5NEl3ck5scCtvN0F2RzB4 + TzhaT3ZGRTl2VnNYZ0pocHVPKzFTWWMKd96QPl4OGKNMz3xfM1NTDXE9Pdw5ewfT + 6M9hmpvUngyXN4S5JGbAYrg3yBidfdrKShq2PRud5d/zfveLeUxIDQ== + -----END AGE ENCRYPTED FILE----- + - recipient: age19vzypddhexvvsf8xylstxc9znnkd8rxmamhjlt7elvz4j3zaf5tqqura6f + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6UWdRNWYvUDZ5bjVzQU1O + UVpJQ3lFajJIWG9ydWFvQ1diWGVoRzJLcTNZCjg2K04rY2x0OTVsUkhBUzZNd2FX + WjJCRE9uc3QxWVdGVlpBakhUQmkvZkEKLS0tIDVyTXFEcGVVZ3paL2FqS0VGemlB + aW5uNkRQNlRXZ0RnV2ZNQzNxYVZnSlEK5WDot4E5Fw+2k78ltnEHvThZhrkgXTih + eOeMLlNXFXXMqFohjASAOD/0r5EfaU3IICZwQcmhuWRazRmlh5TZUA== + -----END AGE ENCRYPTED FILE----- + - recipient: age1p400545a482fma40yfgytu40p6wr5a75v4f8yeudvgf7eh5erufqxhgynr + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByLzVOZGY2MmZ6Rmg1YndM + SkR5VVRmQUcwVm9HeENBNDE4dC80bkRBVTEwCmZNRTlKNjFicWFHRS9MdWlvVHRa + Snp6Z3YrL0k5MGpqN3crNzkrU0RxaDgKLS0tIHJUWnRuUmhRZ2pDV2JyUkk4Y2Fr + MUJUVFVMKzNsWDA3QzJ5YWpMcy9lbUEKUkqB8BSdR7XQdBKAvtW8nxbNrce2gm3l + tXjqxa6DhKMjxnRT1+MvEUa8kk0dMqyGKkLzLfm5JV/l+Lx+r3UNag== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-11-06T08:58:58Z" + mac: ENC[AES256_GCM,data:yzeJcuRDNbPebTJ4wwT4yiOuFMplSOf/XJcdw+g04S3ELj8tWwmQszv/gYJfCTI7kfeREbggyddF/2g4T7dzwCK2dWvGNRvGz96JFvYalWwI8a1ZSDk2DCS1ahKzcXisLG1WtVqVpr7i5ttkWGUjrgcRJrekLCCHGz228JnlUvE=,iv:EQs/TLqF8Hzah5YDZ2GqSrpr8FGkZgHt/Q/4bMlWe8U=,tag:AWsIaUAphZ2g95idHnhNSQ==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.1 diff --git a/programs/stylix/default.nix b/programs/stylix/default.nix new file mode 100644 index 00000000..cf020643 --- /dev/null +++ b/programs/stylix/default.nix @@ -0,0 +1,270 @@ +{ + pkgs, + self, + nixpkgs, + lib, + config, + system, + ... +}: +let + sfw-bgs = [ + "2020-07-24-urbankitsune-bna-ych.jxl" + "2021-09-15-cloverhare-lotteplush.jxl" + "2022-05-02-anonfurryartist-giftart.jxl" + "2022-06-21-sammythetanuki-lotteplushpride.jxl" + "2022-11-15-wolfsifi-maff-me-leashed.jxl" + ]; + nsfw-bgs = [ + "2020-07-24-urbankitsune-bna-ych.jxl" + "2021-09-15-cloverhare-lotteplush.jxl" + "2021-10-29-butterskunk-lotte-scat-buffet.jxl" + "2021-11-27-theroguez-lottegassyvore1.jxl" + "2021-12-12-baltnwolf-christmas-diaper-messy.jxl" + "2021-12-12-baltnwolf-christmas-diaper.jxl" + "2022-04-20-cloverhare-mxbatty-maffsie-train-plush.jxl" + "2022-04-20-cloverhare-mxbatty-me-train-maffsie-plush.jxl" + "2022-05-02-anonfurryartist-giftart.jxl" + "2022-06-21-sammythetanuki-lotteplushpride.jxl" + "2022-08-12-deathtoaster-funpit-scat.jxl" + "2022-08-15-deathtoaster-funpit-mud.jxl" + "2022-11-15-wolfsifi-maff-me-leashed.jxl" + "2022-12-27-rexyi-scatych.jxl" + "2023-03-09-rexyi-voredisposal-ych.jxl" + "2023-08-09-coldquarantine-lotte-eating-trash.jxl" + "2023-08-10-coldquarantine-lotte-eating-trash-diapers.jxl" + "2023-08-20-coldquarantine-lotte-eating-trash-clean.jxl" + ]; + mod = a: b: a - (a / b * b); + choose = + l: rand: + let + len = builtins.length l; + in + builtins.elemAt l (mod rand len); + hexToIntList = { + "0" = 0; + "1" = 1; + "2" = 2; + "3" = 3; + "4" = 4; + "5" = 5; + "6" = 6; + "7" = 7; + "8" = 8; + "9" = 9; + "a" = 10; + "b" = 11; + "c" = 12; + "d" = 13; + "e" = 14; + "f" = 15; + "A" = 10; + "B" = 11; + "C" = 12; + "D" = 13; + "E" = 14; + "F" = 15; + }; + hexToInt = + s: lib.foldl (state: new: state * 16 + hexToIntList.${new}) 0 (lib.strings.stringToCharacters s); + seed = hexToInt (self.shortRev or nixpkgs.shortRev); + bg = choose (if config.isNSFW then nsfw-bgs else sfw-bgs) seed; + bgPng = pkgs.stdenv.mkDerivation { + name = "bg.png"; + src = pkgs.emptyDirectory; + nativeBuildInputs = [ pkgs.imagemagick ]; + buildPhase = '' + magick ${pkgs.art-lotte}/${bg} $out + ''; + installPhase = "true"; + }; + qtctPalette = pkgs.writeText "colors.conf" ( + with config.lib.stylix.colors; + '' + [ColorScheme] + active_colors=#ff${base0C}, #ff${base01}, #ff${base01}, #ff${base05}, #ff${base03}, #ff${base04}, #ff${base0E}, #ff${base06}, #ff${base05}, #ff${base01}, #ff${base00}, #ff${base03}, #ff${base02}, #ff${base0E}, #ff${base09}, #ff${base08}, #ff${base02}, #ff${base05}, #ff${base01}, #ff${base0E}, #8f${base0E} + disabled_colors=#ff${base0F}, #ff${base01}, #ff${base01}, #ff${base05}, #ff${base03}, #ff${base04}, #ff${base0F}, #ff${base0F}, #ff${base0F}, #ff${base01}, #ff${base00}, #ff${base03}, #ff${base02}, #ff${base0E}, #ff${base09}, #ff${base08}, #ff${base02}, #ff${base05}, #ff${base01}, #ff${base0F}, #8f${base0F} + inactive_colors=#ff${base0C}, #ff${base01}, #ff${base01}, #ff${base05}, #ff${base03}, #ff${base04}, #ff${base0E}, #ff${base06}, #ff${base05}, #ff${base01}, #ff${base00}, #ff${base03}, #ff${base02}, #ff${base0E}, #ff${base09}, #ff${base08}, #ff${base02}, #ff${base05}, #ff${base01}, #ff${base0E}, #8f${base0E} + '' + ); +in +{ + home-manager.users.root.stylix.targets.kde.enable = lib.mkForce false; + home-manager.users.darkkirb.imports = [ + { + xdg.configFile = { + "qt5ct/qt5ct.conf".text = lib.generators.toINI { } { + Appearance = { + custom_palette = true; + color_scheme_path = "${qtctPalette}"; + standard_dialogs = "xdgdesktopportal"; + style = "breeze"; + }; + }; + "qt6ct/qt6ct.conf".text = lib.generators.toINI { } { + Appearance = { + custom_palette = true; + color_scheme_path = "${qtctPalette}"; + standard_dialogs = "xdgdesktopportal"; + style = "breeze"; + }; + }; + }; + } + { + stylix.targets.kde.enable = lib.mkForce (config.isGraphical && !config.isSway); + } + ( + if config.isSway then + { + qt.style = { + name = "breeze-dark"; + package = pkgs.kdePackages.breeze; + }; + gtk.iconTheme = { + package = pkgs.kdePackages.breeze-icons; + name = "breeze-dark"; + }; + } + else + { } + ) + ( + if config.isGraphical && !config.isSway then + { config, lib, ... }: + { + home.activation.konsolerc = lib.hm.dag.entryAfter [ "stylixLookAndFeel" ] '' + PATH="${config.home.path}/bin:$PATH:${pkgs.jq}" + palette=$HOME/.config/stylix/palette.json + scheme=$HOME/.local/share/konsole/Stylix.colorscheme + + if ! [ -f $palette ]; then + echo "Palette doesn't exist" + else + json=$( cat $palette ) + + hex_to_rgb() { + hex=$1 + r=$((16#''${hex:0:2})) + g=$((16#''${hex:2:2})) + b=$((16#''${hex:4:2})) + echo "$r,$g,$b" + } + + for base in base00 base01 base02 base03 base04 base05 base06 base07 base08 base09 base0A base0B base0C base0D base0E base0F; do + hex=$(echo "$json" | jq -r ".$base") + rgb=$(hex_to_rgb "$hex") + declare "''${base}_rgb=$rgb" + done + + mustache_template=" + [Background] + Color={{base00-rgb-r}},{{base00-rgb-g}},{{base00-rgb-b}} + [BackgroundIntense] + Color={{base03-rgb-r}},{{base03-rgb-g}},{{base03-rgb-b}} + [Color0] + Color={{base00-rgb-r}},{{base00-rgb-g}},{{base00-rgb-b}} + [Color0Intense] + Color={{base03-rgb-r}},{{base03-rgb-g}},{{base03-rgb-b}} + [Color1] + Color={{base08-rgb-r}},{{base08-rgb-g}},{{base08-rgb-b}} + [Color1Intense] + Color={{base08-rgb-r}},{{base08-rgb-g}},{{base08-rgb-b}} + [Color2] + Color={{base0B-rgb-r}},{{base0B-rgb-g}},{{base0B-rgb-b}} + [Color2Intense] + Color={{base0B-rgb-r}},{{base0B-rgb-g}},{{base0B-rgb-b}} + [Color3] + Color={{base0A-rgb-r}},{{base0A-rgb-g}},{{base0A-rgb-b}} + [Color3Intense] + Color={{base0A-rgb-r}},{{base0A-rgb-g}},{{base0A-rgb-b}} + [Color4] + Color={{base0D-rgb-r}},{{base0D-rgb-g}},{{base0D-rgb-b}} + [Color4Intense] + Color={{base0D-rgb-r}},{{base0D-rgb-g}},{{base0D-rgb-b}} + [Color5] + Color={{base0E-rgb-r}},{{base0E-rgb-g}},{{base0E-rgb-b}} + [Color5Intense] + Color={{base0E-rgb-r}},{{base0E-rgb-g}},{{base0E-rgb-b}} + [Color6] + Color={{base0C-rgb-r}},{{base0C-rgb-g}},{{base0C-rgb-b}} + [Color6Intense] + Color={{base0C-rgb-r}},{{base0C-rgb-g}},{{base0C-rgb-b}} + [Color7] + Color={{base05-rgb-r}},{{base05-rgb-g}},{{base05-rgb-b}} + [Color7Intense] + Color={{base07-rgb-r}},{{base07-rgb-g}},{{base07-rgb-b}} + [Foreground] + Color={{base05-rgb-r}},{{base05-rgb-g}},{{base05-rgb-b}} + [ForegroundIntense] + Color={{base07-rgb-r}},{{base07-rgb-g}},{{base07-rgb-b}} + [General] + Description=Stylix + Opacity=0.75 + Wallpaper= + " + populated_template=$(echo "$mustache_template" \ + | sed "s/{{base00-rgb-r}},{{base00-rgb-g}},{{base00-rgb-b}}/$base00_rgb/g" \ + | sed "s/{{base03-rgb-r}},{{base03-rgb-g}},{{base03-rgb-b}}/$base03_rgb/g" \ + | sed "s/{{base08-rgb-r}},{{base08-rgb-g}},{{base08-rgb-b}}/$base08_rgb/g" \ + | sed "s/{{base0B-rgb-r}},{{base0B-rgb-g}},{{base0B-rgb-b}}/$base0B_rgb/g" \ + | sed "s/{{base0A-rgb-r}},{{base0A-rgb-g}},{{base0A-rgb-b}}/$base0A_rgb/g" \ + | sed "s/{{base0D-rgb-r}},{{base0D-rgb-g}},{{base0D-rgb-b}}/$base0D_rgb/g" \ + | sed "s/{{base0E-rgb-r}},{{base0E-rgb-g}},{{base0E-rgb-b}}/$base0E_rgb/g" \ + | sed "s/{{base0C-rgb-r}},{{base0C-rgb-g}},{{base0C-rgb-b}}/$base0C_rgb/g" \ + | sed "s/{{base05-rgb-r}},{{base05-rgb-g}},{{base05-rgb-b}}/$base05_rgb/g" \ + | sed "s/{{base07-rgb-r}},{{base07-rgb-g}},{{base07-rgb-b}}/$base07_rgb/g") + echo "$populated_template" > $scheme + fi + + ''; + } + else + { } + ) + ]; + + stylix = { + enable = system != "riscv64-linux"; + image = bgPng; + polarity = "dark"; + fonts = { + serif = { + package = pkgs.noto-fonts; + name = "Noto Serif"; + }; + sansSerif = { + package = pkgs.noto-fonts; + name = "Noto Sans"; + }; + monospace = { + package = pkgs.nerdfonts.override { + fonts = [ + "FiraCode" + "Noto" + ]; + }; + name = "FiraCode Nerd Font Mono"; + }; + emoji = { + package = pkgs.noto-fonts-emoji; + name = "Noto Color Emoji"; + }; + }; + }; + home-manager.sharedModules = [ + { + stylix.targets = { + kde.enable = config.isGraphical && !config.isSway; + }; + } + ]; + environment.systemPackages = [ + (pkgs.writeTextDir "share/sddm/themes/breeze/theme.conf.user" '' + [General] + background=${bgPng} + type=image + '') + ]; +} diff --git a/renovate.json b/renovate.json deleted file mode 100644 index 65222a1e..00000000 --- a/renovate.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": [ - "config:best-practices", - "schedule:automergeDaily", - "schedule:daily" - ], - "postUpgradeTasks": { - "commands": [ - "./update.sh", - "alejandra ." - ], - "fileFilters": [ - "packages/**/*" - ] - }, - "automerge": true -} \ No newline at end of file diff --git a/secrets/desktop.yaml b/secrets/desktop.yaml deleted file mode 100644 index 4ee209b8..00000000 --- a/secrets/desktop.yaml +++ /dev/null @@ -1,52 +0,0 @@ -aws: - credentials: ENC[AES256_GCM,data:M/rxedIWDy9vULXljK86RhMjKrNHp6AgLvutRm1PZ4R4R+d6JYCy+rmVKW3o573LfJ9cqwXCppRQqfM6ASAlWbPc4ucRR+B114ncYfI+EgqpvvSvYDIsIA8L/OCrxltL+cI8LY+wz7XYnQOMPr1zjA==,iv:pWj2Ig8dQ6xI/pOBOhXyjzt455CnmqzhXXlQbVmg12s=,tag:VYEYdWhmAf5BUUirGvtZ0Q==,type:str] -.config: - gh: - hosts.yml: ENC[AES256_GCM,data:epb1IX5YsuVpYFGX0w1Fr3Cf4HhgfI4f+7KPSCau/B9qeLm9Hdf/OINYGAvjEQQb70V0WV9iifrUerAc48jcw64o8X5RMX5ca5Qpm4JBoi4XynN5tr0V5p9lBzhPQ+45j6m4YWspVqc48uAlNAQ1,iv:KB1CrjbrBm3pH/3mcDyg6IpAEjtOW5FbhsX3W1kgg4c=,tag:uaMlrJ5zUgTnjkPY02YRbQ==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1p400545a482fma40yfgytu40p6wr5a75v4f8yeudvgf7eh5erufqxhgynr - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1aDJYNjlkMGQ3MlhPSkhp - eSt0N1k3NkgyamRkS1dpemRhWG4xek5TaGhZCkdVbjBKL3FPVWRMYTVXS3Rob2ZP - S1JkbDBFcU9ZdFFoTGk0R1VlZUV1YjQKLS0tIDY3SjlvY0RPUnBleUtZTnovcGxB - RDJ2TnVtdU53MndsYnZNRmVNWDVmQXcKysyED4sFrDhcjHQSX3RVBkGgEb/KjWCv - JmRuDr+MNz0mZCTPAnuig7lbrIVQZHD1ytpxvRtIT7wpcPbDArjBmQ== - -----END AGE ENCRYPTED FILE----- - - recipient: age19vzypddhexvvsf8xylstxc9znnkd8rxmamhjlt7elvz4j3zaf5tqqura6f - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkTE9uS1FHWnJZNTF6R2ZC - Nkpha21rSE81b0cvTm0rUEljVUdTMkVFTkZzCm1jNmp6bmhtNWFORWVYUU96QWV3 - My8xODlzbTB0MDRBVWk2OXh3VTI4elUKLS0tIDg3eXFxeXVucUpLb3hwbTZsY2lW - Z0NqZ1o3M204MkpaRTNmSzh2RFBMQ0UKZBoPipX54LhsWF61W81mkibvFhHIb71e - bgZaABbmZFtTfF/McjfF4s8dpbjH+XvTXnNCB07+wA6ODNhUSChmww== - -----END AGE ENCRYPTED FILE----- - - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqdCtuSTJQa3F6UnVFU0Ro - Q1Y1Q3hxYWZ5dCtIampFWGFxVURWcTRSZ1gwCkx5UVIwUFNzVWQwTzg4Y3hYOWVB - RkxCcE1ZUk03WDl0YTFTMWltNE9sa2cKLS0tIDFpSjZpUlBSWjJ2alRna1VkaXcw - WEF6VE40cENlWjFyRWdvVGFmYURtcWcKACr1xh6SPEB2imBb/2ZKkTB1X9GLbs45 - fqzIIaptedW3Wj/ICFZtF6sd3Q+aU2EddPp/l7PCrIU8KvJr0rrV2A== - -----END AGE ENCRYPTED FILE----- - - recipient: age1sqvl2cwvzeztuelpwppaestqufzeap8uf0vgy7t5mzr9rwc3dpxqhx8ly9 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvSmVxMUxwUWlIVjVxTXAy - RFZhMWxMeWIxNVVkVVhKbFpCeVJCdEticURRClc5WFJNQm9DVStzK2FZaFZlUmdH - THF3YW14ZDNVQnhiN2pyUDdRTnJQRWcKLS0tIFJSSGswUG5veURiK2pNMFFsTUtO - VWZBbk5xWHNjUnJQTTV1aDZTUW9WVjgKKJczSJNcsaaQjHpYQ/Ocey6AM9Zt7nBe - dFP/wN/l6YPhnKy6Rl0XJim41w4YOJknKcjOedIBnacFnnnjBS+oLQ== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-03-19T08:50:22Z" - mac: ENC[AES256_GCM,data:04UhuuQk7vPhjiBxlizLO8ttnn2iIQdn5jhbU/fSup+qFOkY8wwWgwHQwNpcaCI7tl26KAi9UCczckAMOBO7woJZ4yKY6NHFMAI2kDwr83c8xFqAtSNZ3BTf7SZGI+UcUm7iZS12MIbwFdDinsFD3L3H+cW7wz2Z51sRIcL/TYE=,iv:6aDY223rwCPNK5AKQhkQ/y7hsXbq9y8hBNztNeeq1fw=,tag:ksdpeuCOMth0E2kaKbfv3g==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.8.1 diff --git a/secrets/devterm.yaml b/secrets/devterm.yaml deleted file mode 100644 index 9ae60d71..00000000 --- a/secrets/devterm.yaml +++ /dev/null @@ -1,35 +0,0 @@ -email: - lotte@chir.rs: ENC[AES256_GCM,data:g2+amJkqJ0NdkbINffz5OKTRKQ==,iv:z0qPNdq08I8TFef3qsWIa+7DV5/XpljOMiaCRuNMgVk=,tag:pSiRCLITD5anTu2I9rNdfw==,type:str] - mdelenk@hs-mittweida.de: ENC[AES256_GCM,data:nCTMUQRrHeDxZ7wBUTzYKoOBBZDzsEPGtBDcN8cwnDyq0e53lV9qZB1fgf7oAbqvgJA66iYo+D6xDfjL9tn0Ig==,iv:NWb1g/7MR1RVZtyn/6D/ikoGWo1fBh8KSNSev+GbyX0=,tag:7cyvHTO3ibzAAm7umkZ6sw==,type:str] -password: - root: ENC[AES256_GCM,data:iqe4ZXY8eAESm+Hnb418tWUF1Zj/uFZkr4R8a0hCXcynZjY4zzxMqiO+pTg/RPZT6LIwtd9wSuAF6Ir2BjmRiPx+dQnKOxIYwIB847GbD+PhIviAy4da3jle6KYA3goj0XXULU9KxVhx4g==,iv:CdEBYaAiiA0kKawaiek9uhwLKE5EtNoOoKdwbjJiYe8=,tag:8Fk5BEfWzPzLqyqN7okGMA==,type:str] - darkkirb: ENC[AES256_GCM,data:T7YfuKVDSsH1WFre2cwr478jviwjhefRc5n4ks6zZ35/uZgPEEz3cEtl0zNGAb5yVpAiS/rZj+meTDiDh+iDhtuNpOVmUzoxIvhgH6EXb5Pm7TN9K3oC0ruww0dQt5T24OSxKHEkdxY/qQ==,iv:Z4n80AoueAhZkuHn3/fuqEMP+dq7CTW/IZHDT5lmQ3k=,tag:lGfsZpJ8d22EWfQysDp+xw==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1sqvl2cwvzeztuelpwppaestqufzeap8uf0vgy7t5mzr9rwc3dpxqhx8ly9 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBabHhLKzRZK3YwcUJ4cFMr - MTRkVlFmSFlzRGEzeHVtT1V1dDJHU1d6d2lVClZrbVkzU01IYWVYamtBb0JSZXY0 - QVQxYUpaSXdzL1hnU2VwZlJubXhpVUkKLS0tIHhkVWNiMjdWU1NQVFJseEN2aEFE - a1VDU1hsNUhxNDhOUmpTSG5xSENkZUUKevN8YMKj6dk3BB5od0atvZNLUSVBKM0/ - A0DdaXLIfVV+72gGa82RDcWGMVg8QmMrVzjtt6NotVcUx97Xx6/Ieg== - -----END AGE ENCRYPTED FILE----- - - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6SWZyY2NKSGFXSm5qN3Vt - T0NnMFJVQ2VtZjdEazZCdEswckFmeEcxU1ZZCllaZVh6QjRrQi9iWldsVVdZWVR1 - OG8xQlFIN2tOOVBwcFVENmFtYmE0S0kKLS0tIGZVN2w5YlVaUXpIZHpnQnY4NWVr - cDBlUXpKR3VnMXE4Wm5XZTMwV3IxTTQKC1nRGz0RiUxSYbqf7iVH46UenyNcGyyy - jDWGgKjZv+PS6uJjLGp6GML53vMBSBVZkoZhAEaPMhWjcnkv2g0zxA== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-06-17T19:25:31Z" - mac: ENC[AES256_GCM,data:F6XLIbk3W06LtYMn1QQu7JdFdCbh6fN9mBSM+TBvjRa3qIhoeETT5SRXktRITk7lDzvdwgAXmcWnGSBLPc5YrjT/93n1ferMwQdyAtAZUBjT2eMKSG/N5pY6hoDIP9+CbY+lVgcU1vw8SGUhy1xDPK/uOq2fK0y3vz8TVtdKqmE=,iv:vbUPbfvrXQ4hDXWei46xY1ONt5ddxU9+ZVGbP0dTobI=,tag:+B37FS/TQK6/5nnrhVYs9g==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.8.1 diff --git a/secrets/instance-20221213-1915.yaml b/secrets/instance-20221213-1915.yaml deleted file mode 100644 index 1e790bd7..00000000 --- a/secrets/instance-20221213-1915.yaml +++ /dev/null @@ -1,60 +0,0 @@ -network: - wireguard: - privkey: ENC[AES256_GCM,data:UkR/QgQP4Rf8RPYbDSdzjxJyz/GpOadqoY5h/f8v4cg0BcclZkQRK1eRmms=,iv:DnqE5i9WaEqEXktIiZ/wlpQAZ9Tr3CF/pZXyek0NShM=,tag:Xr71cIxFh8jISHkmN4DRqg==,type:str] -security: - acme: - dns: ENC[AES256_GCM,data:qKV0y5g0Pky8SjK4gGkra7eT8eegcw2HakdVCSZj+CXQ3cI4BlYY5nwBa7Hvgn1h4D+wLLYDRCaefvNEqw36z4inAsgUQfcfF0LqlYbyxSSGZjox6TY0ZmdB/b6ES8TdobnbB3UTUaacm5zYk9DJk4hfOfTfK+kgxJrk7x4ZCKCi04pxer18Y6FMl2vqTw/2bUmzlPkI/w9dhRhoy+X2bdQj8keBKD/xpL3l5nkfRdzJSLvfqRElXoyBOMKsKeLby2JLkv6e5WhvNQgv/3TUcTX01UHu,iv:0DoH8UXLRcN8Z0T0hAzXE3Xr8xOGmVUxyfPEYelNoVo=,tag:nK79w9qvEi2iTPexYXAlyw==,type:str] - cloudflare: ENC[AES256_GCM,data:eAJL7aNBIVoLp7+EQXDCpN2DdDTYolg8gG802vjo+AmqfbuHKY1lv8URbmvCWnEdXj/wv7n5dGu30kbsULa/w3/b1v6ye8EEw5u7dVfo9kvfPIPLzH3XKmaKnlBPd/zqoyYlFjHSRQLSTl3WzYrM7O5muT7TOPbonJW/KB6rQ8zhsQbHBskZV2JWytqd9pSrO7jkh0pXe4cjenue+qnHldAx2UUsLrOqfGKRP17clIC7gRKID03/43U=,iv:NZ1V2hbyUjGV1OZ+k40gMc04oMGoEdz5h6T8DUFWA80=,tag:JiMP0cgGhMD645eeeW/zaQ==,type:str] - gcloud.json: ENC[AES256_GCM,data:bJjn5OK1UFWKqBGUhQvt3+s8r0xHQMc7qmhZXyZDkJm0i/4tQeg16gwNcsli/nADNwpZstP8Hqlgg7k0O2VIm9MBekdjw5miP844CCzLCNLkyedpHy3jSM848eQQmzqzIvnR0iMAJyMdTpY5cvJlTs1wKJZOUMgnbihFzmgl4qNBQvHAErGwE/ryYQxsphk4pBtI5SAtvw35uJjmUS6sbJ+BDARLqa+kjoLYH2r8se+E7XGvOq4ceWDMbZDfIkZihs7ZpXod6pFN/0YVlnnNmHa7PqFJL9rzZrOKcG12P//laXzwg+ZqTqLOexPctk+lIZm8lca6BvBbOCXZ/XWTblxzdZN1c+V9fAcvw/YdguQcF3rM9u5m9qK15HzK7AIc8qXihwbxed0JnyPidLo2+UfRCj8UCq6954DMIL0bkOUgOx9QpdFQwqXD4UdW3ObdbDSfydVZ2MEArZrUeImtzkSSpe5YlrSucpXSQnumA35b+eamJdsOlwQaIhPN28be/+X6ETfTOprVG3ny3ZhoW2fSq0jQ4BdWGxNPyh7kAvsYW55WDKObFBiIhy+BfpGWvMeD0BNHzCs9zYVDe551sJEZGXosknDDvtHqUn0PxJtSkG6ampJ35qMd1OUzhtLEsRzUAhDtjz0ijyEyZV7ENtq1UupvlENJfwuc2NHFnN+ovlq6dbvCY8C9tYjqCyp14sGp5fqNDNMhVIsJnnnHIGtWbdKWsweTCkeiT80Qs2OD6ISn5YHO6eGJl5wge7Ws4Mm39ATur1Qrgjz/HM6aFJTggGiWa0nXr7WO6LZwucwusd8zVf0zxkjUPzqKZeBOklmRLshPSSluQibZMVJAwrmnWsugu19RnYZowFo9XmMohlKOvKLpje1PW+UF4VK+bnNIVwvbwa7YHqJUeC0LkVdpwVSPbSUoMwB/UCu3ZOnYRRg6HepI5iQ5q5tI6YDm4jLJsFltSiAn+S7C41U12axiyDSmbks6gB42v2OZ7sj2LP4m/Dq7obWgXziY82azjddZAb3ynaeOf2YeJ55GYh1fy1L4pDmsSfHrMNf5GhmXaangc+oaluK8aw1FLr3OqzTjgwHovSyQW/so2KFAuhd1CPRmXbfdwZqjFypOUX3aH+9rx5lxY82P7aGXcLupsZIgjLv9KBJGD+OBA5osivA+lOyfDjQOD6YxKbHOE8je2dZcaTZwolq6qUoraWhZ2EgeR6Aa9E13QPayLteCH84OjoO+llJsmxg8PODDy3mNMhY7TvdOReCNmHq+2aasXpiNlizCG/pkLry1yh6ogjhMzBDlAvxfqEw8lyP6QbmfF7f1qfogNwACbickDT8rP/kloxNntAXqJ94FeqqGJo9D60cctrp022Wuyx23XQtIcz6X9iEpjrEzbUuetIr/rQqL7qXNuDn92dqmoW4vYKdl9J5/VhcYk6cDRHyjTHyH5zRERXArqGORi33dKESO+5QfbK78rdvWlg2DfKS7ZudPe2pBxtHj49sj2eLUliEM9AH3pgg0U1Qop0hx9TiuqVv5sgh5e1fasXW04QsqnhNGrAfuBbixsROr32uPH6kFH94ljLPNBCU47dVvrXlYgy2PwyZWicPAzsS/a/AbHo7qU+aD2efz8yUs4yYSKUEtT2NbtLARWiaSOQOit6c2Ug2vvNnA3Tv8Mrnu1besBriZTUJolUxzdYGqf+G7fZSV07/Qwvdv4JInhTFQvQkml7w7LvN8cWnownmATSRFTDuIOpM2EL9MGpo8dRX8aKOMgsUXChbYKpxJ8UKwa8RXbE8yhb3CG5BDKV8I83kVMIcEFvvZ1jHt4bc3TO7G9TJ7ej6XA6apsjYqx9UoxdYIw3cxaCkQcOjN3GIuabpXpP/mW4JdMQMdwo/it+jD+/PXurRnlKef8Vu/G0dqZPc+jwChPGEAgxQ6iuCz/NI3MjIiuavdGhNgEA/pYuJYLRy9gga231Rx69ju8koHssboddFkZT+D0/nbvkgaDlJi+pFBk+31fYv+G1iocZmyXnSlUbCOfaUQ7wj8czJejaVfl8hOgLv7jctw1T+ALsir8/4cLbURDg7jG/TAY/TR+W8FGG0FGcNzNR6QOmR9MSzt2+v5SW/P88OARCa4punbmq9GUNJcN1isqzwSOWP0suymF7KrFprYDyyrgubY1D1z3zpk2bPQdSERnc47uJnzK0nGRTQbl7WsOF2Ac4GT6wM5MB1fWgS4fnk+DdRfbPg0nmoGKCxWMI5cS8yLmArjB1I41MjMdKGVcrgSwmxuIRNTrHB6Ks8P3f46ImWftwjOVB+SR53G1a9JQ7nIUl6oiA+X24fKbwrWpNUllC/yFlIX7cKVbYKmfmm+bqcHLsCjijeyxuHoI6wEGo/l0YgKJIM4grl23nTALrMeXLjJwk6AMRpy5b0JaQAvg1knDlm6FmLE7JCNh9xbVCFIaafRy2R4504JTMqYh6xUDipJTlkPs06xVRJFbQQZM1w5lD8sgcWgqtcdrWJmQUIu4GTvMPtk4o/zXzWMEVrktrOjC3vc2D/sPip97AZ3pBpl2l+VcFdnhW+eLnDtS8ElJd7JQ6Loe8CmU5FCcUR+j2Fpj+K3j20+mZnCjFayDz9eetQICBwBhI3DHT4Y0sr/Bn8QOsbMc4zlW0CZK/Ib+WkFQPeOqqFDOeOG/iiczzkAKnuGMFofzIxG9xLbQZbeT1FAcPw60nl+dqorrOlz1NZ0Ud9KR9g4jx6YGZcBcIZeWtwzKVyLuX/m61FQXK7JmG/Xe/OqhEVAQtFojuQYO0Yiq1mAY6V/cNVHv20BD01vsoyVDgPeAmlcX8xOHO5Z4t0sFdWWf6Da32sge891ahPu6WI53TN+c3yOLxfwYwbEx0cosXt8L3gris0pS4HT2WV7eVw6UmKF4ElKuXy0/eJY1DPKoWci4NHbj6Buo7JdUqOGFAld4/TsHq6ugnNChRuY0wk0Vwa5YMOD1iu6B5Bvof7Z9kYjdZ7ticY1srghlJI4ugjwecisRiePW2khipec3I3goQVgYfZZ/PvXqBSuXl7gT+7+qbfPEeMDqsVoJqeHUaV6hbV1W/XF+1xDvpuVUBYGxCpHroLMd9N+IGXK5ND5vnKU4lU=,iv:64OaUxQSM4c2Iv9BcSItCHieepFhdXopvn911ZprsGU=,tag:bLVDYXET9ThqKFzjZSh5dw==,type:str] - gcloud: ENC[AES256_GCM,data:V+71RbCEZAQ+dCqIqLhpdivkdBlqBzmzMwqepQraCfZXF/T8cnGbdN8IDY35oV3B/y7lhY0XEj3HX/IEyx/Yuw==,iv:B8ddqDGOsETimp4YKHjxUJ/JG5HgTZ+4P7aNN9/8h8A=,tag:c5pRh8KkxO9V9cs8RSm52A==,type:str] -services: - attic: ENC[AES256_GCM,data:+YhjQbgXUMlkTI/TmDV4RYrB51EVB9E5AYC3bk7NXfgGa3UYj7BP3rgMloAShXZ8AY49kcZGcs7v16v62RmUkdfuiMv0LsHez6JsGWil+duEKhBSOBr6oFJWOAJHRHPmenXG4yzHv4H+awTWzZRzPDGsFye6rO+PSZHisdCOQdNpzL7o42m+H6DsWOvsohuNiWOSVS1f9yygEk6x/6/aOXU8sKbf9YWH7aFcCBy0wI4BmjruHHD1N+XfHZ+pDqn8fOCZOVJ0EpTTFy3jg12WERRFUufmjWrN/HAIza3fwykYfx0VUU8ucw==,iv:6WpQGtEG5RLMVv6PcIbwVx9V/naZIquYR4iIrvSszAE=,tag:UydfZUBOMLhzYxkm3/0DuA==,type:str] - chir-rs: - database-password: ENC[AES256_GCM,data:BfoHblko9WJSv1vKemolK0HCODVV705udJmkKO6nGyI=,iv:PdXQwFlmCrkEhfpsLqjX+DVlWngWvyh3rfWu5r27pI0=,tag:NY9+q+ANmi/RDUMLAOuZNg==,type:str] - signup-secret: ENC[AES256_GCM,data:5MCmvQEULy1ASkeDfi89GtZ1ZeeOHfSKtClyO3zbSOE=,iv:3qnEt8b98JEKID6MIT+bSMRSLVLKcja+Iez3OBGmXyA=,tag:cLv336v3TiR06tdrFn1aZg==,type:str] - ipfs: - accessKey: ENC[AES256_GCM,data:rnPPE9pcfmzuoD7ZeZoeM5iOUG8=,iv:Ia5aWCNC0+q0wGyiDKBO/BeYeTtMHyGzbbSh/myYxIQ=,tag:TlP0usxvxcYrKNhzLBxxEw==,type:str] - secretKey: ENC[AES256_GCM,data:vBcSS0CEVdWb4BvKjpqEqig3+tLyxhKZMUoRQuh4D+3GfCPDldOtQA==,iv:Zmls+HWWHQG/RHZ/pft1ocoEG2W6UfMD1Nxbqhld4qc=,tag:V25OL9rpR4Bj4CFY7XDmaA==,type:str] - ssh: - host-key: ENC[AES256_GCM,data:netLH41jqZL7YdM84d4MDmmqbvBs3lgeHBU9N8uBaF9NMC2F/cEXLo7BIsK7lTVkMC8MM5CWSrxodbS6o5lOqdfSsyzg3esoDEwcQ1g2q9bNl91KLblejJsKL2guVxY50pNrGP+xTjdKIvPDHeO5MulPZZPfmE39rKtV7CIZtz8jbTDrl4i2RPr0XAkoBHOoSHDvvvRaJbKDQti20YUyG3SpB4NEU5bs4MmhrOxVwGnK7doXvZ7MtJ5dO4dqW+UN7RbuSaI/lUOyVWVfXEaClpGMIg/hxIyjxb5b6zIfxLmBE5/OnlNHFU5qZGtr9CkuQQU+q2Zz9o3MoOtdq7i1IOgCdPu01JqC4J+TKMGlZkZMPHl8s7g755Lo5FkN8ZI6uNe+89wEu0oNTl8xjFuJ+BYgLCzXexBVzYEHpHB0qCY7retXC1F+c0n8jM/YpbsHkG6YP/Q1KF4FRv55mizMrPSxp/8TNGEZFkiKngdOLLBbgEblZ/EBk3YGU2Lc+/NtbfHpVURvior0pWdM76fd,iv:6vlXEKAOXuJxPeDLt4OLfVRA3yg2ERUvXnpqEOOCsNY=,tag:GpXzMZoBQup57ajcjrhJgg==,type:str] - hydra: - gitea_token: ENC[AES256_GCM,data:yofF/oYxQeNQMsViuqKbomw46eeTb5a3d5i+QUvq4/eEamSA6d8CIQ==,iv:WmS4Q/uGayYfPUVb8oomN/3G0M2QjMwpW/13+jqcQzo=,tag:EHQ0B/1nx8/FcmuJW+wcAA==,type:str] - gitea: ENC[AES256_GCM,data:TMtwDa+YjdRc16iMM1XXLfRJzliKAHLtUnF/ntGG9MCeDhS5i39Kpg==,iv:5Ho/2j/8VVW364F4M9RVv6qxTq3dBzURvsRjjll65x0=,tag:dO/j5CafLzmd8uda9JAttg==,type:str] -email: - lotte@chir.rs: ENC[AES256_GCM,data:ZHDiaavrF/LpciXJQXSR6JfAng==,iv:7J4JDJe1UH8is13liJWqVfVOHt/zRzH3fpIpYwoC4jc=,tag:LYrvv1hOODniUoq7Vxc3pg==,type:str] - mdelenk@hs-mittweida.de: ENC[AES256_GCM,data:7kLefJkWMZRQzJdDTLgqyP94GGkQvGImaWc+hR2OxCmTLuOGs36tV1atYY+qwxfsrwntrOzdMG09ErpGKI5Qsg==,iv:bwtuDXYv301Uon5DndFlkOsfIFz9vHkPJ0ZmMncTXug=,tag:4SKv7LWOrTSAUoe7wqpXuA==,type:str] -root: - .ssh: - id_ed25519: ENC[AES256_GCM,data:WMYPcMyJx98TZY5drAOJAIkwYl2wLt+bxKGH7c0168HDa98XH93UfEDjRx8mGYCwdIxlnfsXd3k9T5m/zGB//wxtYvXxqwTOCSaZ56/ZnayIThCdl7oW1r6KyqmKN0EXs/XdonvODFgERMqXCi3D0wGc9botSZ+5kae3g/SsL4XWoX8tsZWPE2y5UMAzQzQANQd/d474u1698rU/EgrqxGQluX1Ug3jvFpNvOGF2RHgMHfjvMSScIZpX7f9xTTIw3vZPtvXNMf/y2T1HN5kMNd8hY1XdqVMquao6PvcjBv1zxbKoJYZrfTXROBfXeOXdcDsW0wT4ZFz7ZAVDIY6sA9BNzqeX3t7el49oD7tEfNj+vsbvpJEra4l0vYByXfVZdRWHOJ51KrCL/v8AaXZzfwVkKkkxXQjTpogHOeocnOpjVjLIu7YXtx8QOo0tYkTyg/K2H93nUCkXCZYk9mHumlkBfuNj1SeRUFbxnb2G9R52AqlJYyuxLkivTiczLPolkWGHXpMg/aADtX13Lf1FRao4qFtavXre7ujb,iv:zum6qEYEXCZ0XBxEhTMQrMzq/r+d0qnvhkLXBLcvau0=,tag:ZwqaMYrcisknG9R+V/BOig==,type:str] -password: - root: ENC[AES256_GCM,data:VC0jwpENwj62gRedUfTlM3fcd3CH0RI5rr42/0vi5rBu5QCqEtt6/sSf7rNuJFbmRMdxTkVVd47WEFlrFX4ScDydEvlx2j4SebSSK/l6VWJqcnUcj3DULQtEimxiSPfYw66SfxhD7PSYiQ==,iv:+wXLxO9LnXvvCIpwaDa/kZ2EHPyyu+15Y1BhZ9HwLkY=,tag:1NGFRc9Ad2uFq7A/Zlbt9Q==,type:str] - darkkirb: ENC[AES256_GCM,data:yZ1Z421BkxZY/hVqAOPY+SUirqNM6aMJ2rMa1kwtt5zDz0PsLLmfuOc1a8kNCxdRI5xj/LR/32DEv2l2vD5+3lpIKgFWweArPxeXl3cUyq/kzyrhkERsTlRKuE+4ub8X/54IzGLu7dQkGg==,iv:6Yc/MwNmxhtpqIZ62IGsxKDjgSOmNEevCWVv5+DqlgE=,tag:Li0amgGpL4IyGsFCOLpcSA==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1elra3uklw8rmwkevqms2l4tsd06d5utqda9d2w4qvqpz898uzuesugxkhc - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIeC9FMWo2UGxvN2tUQjZU - ZVI1YmdkSHJtZ0gvQmo4dHQrd0xZMHlveHdrCmtVQzBJWU1lc0Q2RVBIenhidGR1 - eG5qa2tRZEVYT0xmUW03MXlES25JNHMKLS0tIEEwaDY5UzBpZERsQ3A4cFRTbitZ - S2cvRitaOTU4T1ZjSDVINUdTWjJDdEkKy5QPMvQnMZbEX08YQLFKzzeifATx5wbJ - YzUJFUJvlyJl1saasHz+0UmZWNBhM+7Myyk+Pncqanm3TGhaTbw0dw== - -----END AGE ENCRYPTED FILE----- - - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwanpURUY1K1pZUjErQ0Z2 - VzdpRi9FQ3hiVSt2QjNidFdxb1cyMGppem5zCllxbFVvd0QyelFTNU1wZml6U1l3 - dXd0M3ZWa2gyRC9zazBkN0JJOVVrUEkKLS0tIE52ZDdTZ09WbWJRQ1Mya3pEK293 - MlFHb1lUWUVaY1Q3bFRPSkdEVWlUN28Kl9GWvEOoDVqvxTGxDhrj6uwcGKwawCyo - bzdNfnpDUFP8DWuZ5zrZsvoRmthWitfdVTet55Ui/QrDe1E4ZTheSg== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-09-29T06:14:41Z" - mac: ENC[AES256_GCM,data:OhbtwpZKcpn0W36lZrOkq9nThAUxCRooFPSiPw59YAVRA6hmaprviJLb9uEO9P/mBjDW58e65s8d5qJqsSYBhIipgNfOofC/bsICk2osZj+BOKE6gueG9Hfgcnf+0+WqUwuwc5KdnWU2zAXeInKTYT1+ERpsm5gCYFS3jrN4iiA=,iv:rLjNUPCmX0ucQPg4IvCL+usaBX7Hv/PpJwmpRzN/J7g=,tag:AjwafHW37PsvWWypgmcY1A==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.9.0 diff --git a/secrets/kubernetes.yaml b/secrets/kubernetes.yaml deleted file mode 100644 index 3035740e..00000000 --- a/secrets/kubernetes.yaml +++ /dev/null @@ -1,58 +0,0 @@ -k3s: - token: ENC[AES256_GCM,data:ZbmIV5uATQsJyhhvO+2v3wpwJ0K3wLuDk993Ahmg5HI=,iv:8mlFqHfwVpJDeXkOv30nIqYnk/DIpdBev6+uIC4qnRM=,tag:Mjn3zUDOmBXgS2ZglCX03Q==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1273ps5thcy70ckdt0270s2nysqgu48t38pq3wq975v3y7mf4eavsw38wsl - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPbi9BT28zVFRsZkJVUVNo - dFNTaXgrZ0lTRUNGMFFRcm5TZFk5dWNZVmpvCjBXM3dLb0wyUjVWL1dCTU1wc0ZU - TW9ML1dvV1lRVXVXclNSemJ5UFRiczgKLS0tIHhxaHh4VjFZeVZSOTVxdEdla0tn - RWtSc0hNQ3JyQVN1Y3VlaWREMFlQRGcK2hJtMszUZuJ7gambY5FrvvbPbV4fWPok - MrWe3FtwkRmBTOpzCYnTOA54FJQggnCZoCJYsL4phrD5NALWuvFKew== - -----END AGE ENCRYPTED FILE----- - - recipient: age1c7y687sxh428wk34s8ws6kemu62mggafpt40rmanevgkuj5xa59q6f7tlc - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGRzdyT0hmNFV5T2RZVzhS - TWZKd2NFZFJPbHN6cGEyQXE3ZDc2elk2TnlrCjdXSEhJSi9PZjR1NVlwbkxFYWpv - MWNYVmQrOTVYTmR4U3pOVHZUbG5rK0kKLS0tIGFkWkRQb1VNRXlJaHJ0eWVNa2Iy - bEFPc0h2ZElDalVkaStTQmFheEhVVUUKLcHTs0i9JDPGaS6sW88fvElj1aAVU3di - CIhGyP1LBXwpSajR/R8b1sxBeQt7ZnEDxM/OOJoFyOfz2cQb3t1TVA== - -----END AGE ENCRYPTED FILE----- - - recipient: age1elra3uklw8rmwkevqms2l4tsd06d5utqda9d2w4qvqpz898uzuesugxkhc - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuVTJJNWxyNXN2ZUw5aDZv - dGxyTnR2UDExS2xnVFFPcnRQWXdoc0ZJZWk4CkxvR3A1YWMvdzBybE5MSFZEenU4 - YVpyWjlKQ1FJWDVYVUhkWGRsOEg2aG8KLS0tIGp1YjFkZUlBVWg2M2xULzBZc1FP - dFZJK0JNUytWZmgxdnBVdU80RS9NMm8KXGVtZu/5xpCdrYe/6NB631Q8NHJGbuZT - GOjiqjqHLnW51I7OA53W90fIweZxdkAsjh69kqCNXxv6iOc1nn5u0w== - -----END AGE ENCRYPTED FILE----- - - recipient: age19vzypddhexvvsf8xylstxc9znnkd8rxmamhjlt7elvz4j3zaf5tqqura6f - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBEY0ErTkM2MmhiUWhzQ0Vt - dWE5Mll2K1hDVC9qaWU2RWVic3BhdDNPMnpBCndaZXRWZVZaQTFFQm1WRlRpd2Js - aTlWeGJNV0lqZzhWOHcrREFWMzBFZTgKLS0tIEdFZzV0QUh4R2ZFWElSOEVjU09Q - K0FFWlhEekQ0UEZzSXdsbG13VElmcnMKviWBzh+YuubOjHjzsI6Eb6ghC05olASI - 4nePmwr3jZbetLyxok1EHtreWw4K/uHH4MU3qQzPGu109TluVbX4Zg== - -----END AGE ENCRYPTED FILE----- - - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZS0p0VWNTUWhhRytaTW81 - QXhCanNvZ2NkSVlublJsZE16VUJacDJSSXg4CjdqRHR6QWZHN24xS3cvYWxLQXNX - OUJiQVRNTHlpSVhvSmZjUEV3MWc5Mk0KLS0tIG9IVTFEQjdreVJ4T211MGpJUE56 - L1BXT2dsMStUdG5va2l1QVA5WkxOZ2MKqbxMIRio6LAPOMQZiEiGvmx1LFMX3R5U - 3Bgmvp/kw7l6OltzVhDdlBIHRkK2hBV9nDjJ21OqmgESoCGexdSv1g== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-05-23T13:01:52Z" - mac: ENC[AES256_GCM,data:u7eN9J0SQzRsa9Fj+fyqrXKbn2CDvRuMt2Quc7kj7SsCScp80xf2jR+ThgTtBZyhYvnC2JD9LfXvz3WbOhhL1lwZ3P85EWOWUdiYak2vOwRP3vUTRgXCltW5bGoYEX8HUXD5cbE6NKsfW1AJcfNTJdu/1gkw9sPe2CXywgtHfbc=,iv:qKMAyyBm52rSe7j9csidU1O9r9qXY0puiOBR8IDL/Wg=,tag:ydf9W3LKoOpT8X7U45VASA==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.8.1 diff --git a/secrets/nas.yaml b/secrets/nas.yaml deleted file mode 100644 index 42e0f518..00000000 --- a/secrets/nas.yaml +++ /dev/null @@ -1,70 +0,0 @@ -network: - wireguard: - privkey: ENC[AES256_GCM,data:9QpTN8w6HoHvqOB2P60t+ttYtSBjiCudeTQMGqxS8MADjXIUTzcg7MxcnQI=,iv:mQtVm77DpmTW2ro/KueOKD7UUEAwSX/+hoS4HydDeGs=,tag:l88zUFFsXwkRbA2gj67Ggw==,type:str] -services: - synapse: - private_key: ENC[AES256_GCM,data:ZIjLX3OvDySAlu3RiCNcq5Gx8q5r6+GB8cC1A1/juCzzWx4/SRTS0kyzkFbkjGovjovj8s+fERfrUZTJ8AHserJDF7Pq71f9Bek5YSvANPaS3Uf33baAdgVZnkV5JXshLcrXgT9+cRmkRoOT7m0LW6ZKdCs55Q==,iv:dXukCDEFHIXf2c6JbeDSFEuUo4hfD98G3AB3FEW65Yc=,tag:m01ECY6ItPY7Wqx6PxKBkg==,type:str] - mautrix: - telegram: ENC[AES256_GCM,data:wwnyH5cd9UYUSSrQlo7L9j3C6cJmmS4VRsSXVjW40L17oO4FdvlDkihq2Soe/5FchjyRO3acRMPjGoNr77AsfwEylqsQ6eyray3PAHQ3oNimDwdkrsMIT3XQ44ujGK05wqlU6ywYMFtlQYkuOqQOxEnRngVwufMhKs7Yo1ycxVPc+CIE3Hlju93xTuTuIJZY9pEKCrOtdP13OmvnFf6rMvstiJrN2i+EzTwqbqSfs3uubRxpSnrKKLlkaL5TuIphU7sFcL1irzh5MCTM7aaX7RdJJuP6KuAT2iHaPz8aCOnGzHXbibrSb+6enj12P60xv0J9ayTXjL7iDLKCYBndfXNZUl05PazTL9zRhm8jSQjkYXXsMmawbdVcrH7/1UFXd1AJPWQ/O2KvDipstw==,iv:ICa1U4B1A+8qCPrK+sWO0/mJoyJxUVWyR+HaD/cC+LI=,tag:q63tvOJhDKnN6AgzvLiKJA==,type:str] - shared_secret: ENC[AES256_GCM,data:k43actfw+7pbrjOJ68dVBAPD+ZBgJaPRRDNpv/CDTCJI5HFSqE0N,iv:LaT32Dfdgs5lsz2FBusVq8tp+1clNcSGi17+BOmsL0Y=,tag:6WO20t7pPq8gjJBtZWtwzw==,type:str] - discord.yaml: ENC[AES256_GCM,data:o+tRrpvL/bzyJdEtNcROhU9YIVg7yqp9MHJ1OrufyzqrlGP0XOnUxCzHfnQAi9FWAT6SF5hUajMvs+5oFqQxW5ph8U/WX8VKgxdP54jcbriUK+m3zEhcGO9wD4N3BwnG3URuclZO4p/8QXaoyWfRlT7CZciXYE7wPpya7//cKyww/BYgcnWnmNLbjMzBdjUvc+cE0JauR1akM5rFOt1G+jK7Ny+4FglHDKCkwEE1wAoZTWPrBM/qh9u4R058Yth861yaRiRwr7MqRfTti8SI0k8DlfIf0/WkS/+mpUkpWxiwxUAPmxXp7fikSlPQoob4pAjOLuRlueNUB/6uMQJyaup4YkrH5Ox8dg5yf8b3UoS8C26izhLOJNgPtAoO8reCimGd4Nzu11/LfaU9IsxHHF3NsYfbYzR8uzOWujG4jf5gyXOab5/cyzGVQZuO1d2cacU+u92lkfcmeAaXElNxDNRcKrdJ9rei3Hc72GTMyChPF5KkzVy/P10CLYHSG25Xwphk9nBSZP80cVl7jHCj12T7/Zc/IaG1x0lP7ZlyXHAU7+LX8G2kXd2nw4oTcIaqHEh1GxkYKILSGK9xWyWBMPiXFaiCY9JihnMeykZOh7ceCWtmvD1ioegZthzTVQ==,iv:4czLM538d6re0qlk7beMmZVm+1IgAZUDz+0Avc6WxNM=,tag:bZZQhnFuD3/U9OlmarIraQ==,type:str] - signal.yaml: ENC[AES256_GCM,data:SCjYJWAo+qO/qwwmJCbo7kHEtagg4a9LNaMuVEgyXAC6FGRTegWKERP5J13veEZvHeJ/vOj1fiSokUkamOM+1cEjVyaxU7lYZzdw1rYAmVymuiJjSnHfTk01LxK6HVbMjPAtzzrS8VV7OVaU95ehCY1Ia95yWgYneRTfUPwwfIEwLrWhrrEsyD8P+aiLX4s4195KhUBMqcrlXhhJylSj9bOfYxgf2j58tW/0syxcA8ZGaU9fxbvj5ZLUVaWf1wMWrwFh1Jyybz4bWrrTwqLnjTgaTeMbpWi7stGP5RjDKwf04hqIQYI9yke5cKwVz8k5V54SYE51X5cAFVEhysR1852+t8Pp+2o22FIPG1xYR/TVGFG9O5Tk6hQzAT3zEorK94OfW+cXeGQTjP8WITie/qThTg3pGxNAtBdMhly9gtApwYifumB/rSmOMaiqngHfyIX01SA0g+jsQeb6/mDMGidN1iLEqzLjFxJXaC1eJybdEvScEqmY0w4J8f/h8hsxKWV2YKCXs1sAVOQ5NpWRppDtVAdelKTqPBO21/dCFYDT0fzmCXQjevABSXs6bRbeapWyh6FZOOqX760i+BxCj3/DYfmpIxisxtJefUwK8Je9H3W3JkjfsKtLHY+0lk8es15/U7LDVoTcOMDquExlGFIIt2gkZfa0zC8M,iv:WqKZ8O3upTGgtzNljGfPqF3Gw1osfCasXugFjXxhZ2c=,tag:6Px1D9Cz3/fzeVs7cuiJcw==,type:str] - telegram.yaml: ENC[AES256_GCM,data:ZDmIhgb+1J5EaJHitxPzNrYKocViFNNEHI/6CKK80rtUc+Pi4bmKZNwlU1dr3P49Fe74mnInfZe2X15sdRSOAsr03KDsAAHERd4k6fr7zMfBVQr8D8Sxb0SbFo13+5qqdPOn/CFEh22UV1T1fmrGK9MLo+Gjc6bd7KEBW4zdlXfBqWGEqyF4zGwu816ORXJZclDZyv6lbQ6FDg8CwaaoSAGzeOEIruIy5petXTrSphGXkDby2SSHP355wnEwEw2HeWBOPklZuYLS411OjN5EpxPkMP481gjXOs+Rw2YALqWH0m27Ha9xYm3uBFacqmQ09c9MxAs3Gh8Wm89Sdl+6R8nhQKe9V+knfxXgSBhw1qsyEMd65cvRN5YLCT6/uO2NoNfC7UcGiL4NKsqt8OzDY5VrM1Rj7rxgtsmzlT1TiWUJ+nDspCwQeOR4/5RGRjZdWT9WUz2I6bHG9kX0lAxzSpOanluW63xjTEfk40alcQWUxoN5dnuN/TdVWjjAuYryfI6/O7Qj95BgBjrTFfatEEogxmgzFXHr8Ro10+aYQlubZKb+4uxAgcZHBhuOpqx11ob9tbEHb98hFscLJ6zHZqTr9vNANiN7c+0yTYP0io90F0wNInmvUgSB7Jg+yoKFCrkOZaoQNAmnxJNEPeCNmAIXO0GY2c2EO+Nzor51dmgPGOZHZstI8SoxNGRS7yFJyVT1DeFLNbwkAO+lBuq/+PTkWXzEeqUw1sqWW0GAssFan+etLPYU4Q==,iv:gsd4hvDsD4SPoszDlK/PdKSIjXWkU4GhnwtS3T5Cndk=,tag:InHiGwvXrO+EpVCUwGeBPg==,type:str] - whatsapp.yaml: ENC[AES256_GCM,data:qEJ/ZzBPZCEDtB14a5A/EYJxoQsnULPPeqWSIMC0kerLBYmdKnTDVIFOnwnHsAqFw//2dsbdGmndD5NmRy6J2gN9g5KyIcgDG2btfL9sM6lpSHpiDFICay77DtKj99V23WUSJ3d41jLzWZZgZ1sg7Qgf/2bayAAgjQLhavHm+kMQMquGTgPlP4iwgdOa4GMSVrV82YtlTIXwXNAQHfV3IYiilJi0HRcqMKDSBsJ/r4CXYDrgFQfTCYln5HJ/B8ibdoAShrWcRO40zfFz8yw7ddWP+LiNDgSQrRt+ryHmSu+v1VJfp6O8Z52XaawV4IwwOIH0fjrdQDdqjDG9QTZCBbwJNt+oqiIPsAm9shTla9fEkbfSt3GqBPjDKxwKlzSiD5N0KvrPh8kzXSc6CQStJBaW5wlpxhiFW1ZnOWnF2Er8m4dgNJSGfJIUYzJ3I7zbHP8pb7K9rvfCO2CC/Gk+2GxELD3Lw4K+TsTeSqGXQ6U3kuMSt4a5tOPinTsjPaFXcCBrSxe7UMS8T0wSWGA3JbIBXdhPqL8aPN183wNnHFpgYO/Tp5CYmfIT9SnYgX42cWqArB8zEewFXcncu2qQ5TTo5OlFH66VhPIjDukHz3YdDmbRUex3u5THHLQR2ytVXg==,iv:Dfedr/Q20ztIkCcCM4zBxNWc35O0yFEMR4Hye/lKzNA=,tag:0nMZ/1jtbgYU56olwZV5Cg==,type:str] - slack.yaml: ENC[AES256_GCM,data:RFF92/pHom8C3EIBYNkKWvZxiELj2sw+mXBul40bsU6Jhz1P6YPNneuBltkGNcyhN/tDm3VXV548rr6e6nywwv5/YLp79zhqE484DgBtvkIkftzQZoiE7dVztp/HjphS1FaMpe27h1lGx38FooH26bgE7SeeyDdeyqx5xiUMScULcdf/U/RbCCSwrVdcL+36zHLOfcKUNh+yXmkNm3jj+9o6AZGwDOsuuosJGjesKb4fl2t11Rt54ulJEt49EyK4RmYJQ84e4zQ2cauHN+Og921dWrdFrkhSY29r69uQfoAwcKlepXcAGKSi0Pu+TAm4zJ5nYIuT50dA6jurtCYoX5Ot66jhM8apYC1b+7pk5UrZ6KYvdHqygtorSugINoVrFmundw5fmkHx/+mq8nWgSqtYEHXDjp/OOCdN065EFPKp2LuZwOXDhmH+xiYXDWGGj8jM0Q2tOmbyKWot4ZXGh4R43ugzypn7XXwCmpsvZtjejmMlxXeS1tGsIMmqcUGVQsz4gbVzr8gi9HyEBLkDytUNIA4rVgoHbmkdkvI1wstPHJiGcNiQeINyjxFH/vQLQG4PtFki+lt9mGiQ1skLt4HcwWEbZUTC77oHM8KuBKk2lalPDGji80dys1CAQhx2osHZhovviRg37U0PuXXODS0C3eMTnlCRBlRjsu5PBPOYaYs=,iv:gce9YEdp7k4Xb1MJg7Et7hhChL/KEnVjD7otjsh9gFs=,tag:PjcRQe7VFQNtlSmKPknlWQ==,type:str] - doublepuppet.yaml: ENC[AES256_GCM,data:L7WUNSgIoTT+7vYdx34z7+TWBMalPzIHzEA5njYwaJaqpLaPMR5Jx3oFv+TUDzYvs2UKP1DfIJBI1zkm+aMRNE5QOTeMDtZj1AZ07v3ENiPSNCuDaUgSLAdsBPtDIA5rCy+SUxLfeVjfCFs929yrlYyPKbzMcmXhk+otofghGDDDDb9CmwJcvamM4+xqS7pEms5CKy2zkyPD0g5PlMSqGzcYtjRL+qRs/MauKtxSpTBYWPv4lUXEr2iN4guGIJu2kkuKWisM01qYN2SLArAL8WAjHzdPx0LU9Qv9oXdCBTVeNNR5+tK4EQ==,iv:AcQGkdbGc4E14g8xQtDd2PZJR7sIkabelLnx2zOJyO4=,tag:TAg/Lx49l51O0y6IltHICg==,type:str] - hydra: - cache-key: ENC[AES256_GCM,data:CLCu9BTtbIFQ3epWbJYwnj+q7Gnxe/Gs8a53pxiEFObVp9EKMMArNHsvGBIBnuBG4vU6muRw/3EhF3LwDgT/YqVaI7KFKYn0myiTviSQ1hBcWHvTdWnbrlrB0kplBcv4oQ==,iv:kw2me7DIkeq4p+vmgl/bH6yvs6Bn2ifJDh56UT5XkaM=,tag:0ZQITx1NyQ67nyuTM6anCw==,type:str] - gitea_token: ENC[AES256_GCM,data:dEXglNtESY30IOKEmTamv8Ce5w63D5T4AJWJBO4XNC2iv9/me5zOuw==,iv:DYjWgu0oQMmMmTFiULcn2ZTV8bKVGR8bouItsNYL9/4=,tag:+/G9dzBaQ130r66PQYVxzA==,type:str] - github_token: ENC[AES256_GCM,data:K3EbLFMNGdG5ZWQqdyUu+1Prtvb37AY2iNhSBzcuNyvW4gocGTr9PA==,iv:pa2KHxQpUvtZRjhFjJhZO5RDwWPWTaIlHVetYtGjt2g=,tag:osKk8GucgoUMle+ZctLlCg==,type:str] - aws_credentials: ENC[AES256_GCM,data:Jqlm/51nraW5Z8Tz1wYKghcPqTFZtSHb5bC2/EKjYjQfcd504AHFNlAQjlsa0vdf5hyca9401PpeWuxxPb2jnKdRqYSh/JXqNKIXNDySJIdHbEwdBSW6Y9thzBldUfkpVIOAJgjGJmA69XIYCNaq75UJ3rE=,iv:GWx0SNEXr8JYttiWuzu0LK2V0cr0+mk7DTty2llEgyE=,tag:IsB+Y6ErXmmzR80z/L3C7g==,type:str] - akkoma-key: ENC[AES256_GCM,data:0lPd+1JnjQpiDiyhOwNzCVrwA7PbQc7sK/INLOy1QiVbWmJ7C5ziwxU3AA==,iv:SZaD9QHxR6+NFiFYeC0H985/GlEEJ+QKocpo7FFg7Ls=,tag:jEGg4N42MJ/qPoIkN3q5cQ==,type:str] - forgejo-runner: ENC[AES256_GCM,data:rKQkDgejZxCt2k685P4+393mtRXL7oCSENnH0c7Tr2X+cUmmoR6QikDkoBsefA==,iv:D2K12VA+BUSDo8LiHYoVzZQpveEcUCGe9BUwWqeHJt8=,tag:2JVcklZTplALwjaImydsHg==,type:str] - forgejo-runner-darkkirb: ENC[AES256_GCM,data:eCNO+wj58LfSJ5tetTe/9LwA6gYIigSIrcbwkcrNqUmI6heSR5VioI0hAAiEdw==,iv:OKsEWxiBUv4hy+2+QerHrP+hPWm0SWOh+C/XnVmpgjc=,tag:1pdor89ss3DyisnQIaX+HA==,type:str] - renovate: ENC[AES256_GCM,data:pfbOrawWZFXj9VTqnSMoEe2MHo0wceCM39hsxQRXzLHj9+kpUlh7pQ==,iv:B03BU1MbI2mtprLs4MuVNF25EV3KF/Kip2Fdz0ff2r8=,tag:sXWgoNM1doXDOqAkQsKeGQ==,type:str] -security: - acme: - dns: ENC[AES256_GCM,data:wlwS5g6p62ilVCNuNFg1atTR+RdPRSQY6jXJwdUkQsXM15fSc2+wwWGGMtLVKnfvPH+0R+jVy+Xeu+Xya8D+HvnO2zV4cz5DV3Fqq0McCcQBVBpx1jJaU0+BvrVh5+ZwVerla8re6/0wYoVFjyVUy1EbvGYsgGS12WFoW+WdUOgZKvGqlbl3LRn27Lrht+xnk7D/46EN6VpQls/4jK1aD5WS/YDEersEdPPcAhe3LUZfHgzUsVgOJAZYhghQQqgWG60rXk/1XkMH2HrU6a3zb/obu0PU,iv:c6zY25WBevtBoKqDv7ITELkTP4yf29AAZuFEZ9w8atM=,tag:cztLn1oAekz7JLThf9kLEg==,type:str] - cloudflare: ENC[AES256_GCM,data:7kabYtvtIOAS/MRW9YPIlcEqBLmct0gPuwa2GvWl1cgBevZGM3O6+QWzPt5NyaU1LTZT+W9oehxj0tJ1JkvoCaLQrqHXIQDRfmf4iiVyHhAktcGasC1RDU/BN0vdzO29Dv2Qr8sTE/2N6qcC6LjoKBib+2YVgmiCU1Bxp+Q/wKFlnoc0k/pTk2mgZYKoym4+M7lb2AUAmj5ek+UqrIByK1U8ythL5ovoI9CqBMMLWCTdzVH7YwLqS6o=,iv:QOFzGbQN2ImYvh/AJDpai4xsZU0yJZMrWBtsQI2impA=,tag:go3zvCIdbWh1BANh6HNI7g==,type:str] - gcloud.json: ENC[AES256_GCM,data:6XpRXRv2OVuJegNVRrH4SQYIcIjHJHstswfhNlVgEDfY5/ix4KUvcxRrtM635uv/OoD5L+duNagKP2+EplabBzBJtKjtNbFGDaXINNJQvwuYA7q/k8ov2DGeWAsXnPsUSyr/Hl0fBXtditbzmKrB/ClrntmKT9rq5BSn7GcNB9+sArn1iAbUMCSlsxa8c+hijF66UIJ3diqHO7c5k3lJ8LphfhKmPPweMIEoOOc+SPLcMWC2PlOlcnRcJ7etHv2vTe4ruSY6yXyKKCocmdPKfUtZcrCTgfRRDhpWTQA8O1Wm2wEtdWOWKdJ3Jpa+Hcv0smC3SLoXzKzeKHWGO+MBW3dLlXnSJewtRSxk6F1NDz3PIFf7jAY3Zw0bKl/YBY5O62QZwXFET/Sm79YhHhFFMAZ5Yr8ZMWw7rwcBO3ejLH6dt0oAfAmW7uwLLbAsIfzA3B2Y6b772TH67oJEe70t7+xyPkP2MXPXuc2cqkhGZH4NAEc3qkmU6gOlW1nCW4l1vU6zaNgYKOMNsG9tb5GKAKrHPhI9VarAfmLI/MTvxvL03ztc67ZsMdOjaiL6a1E/hT8doKVgzf1iQsKlgAIHpDluuRS7t5a1lTgdFVZw+bJkCQdZbd9okxD89vgoS7Cc5CtsFAGovI4oLq5UtE/JrPExuA/iN665qNOPN98ninJBdNqom3s8xIakhGfoFky0UafoySfFxcE2qPsk6+x/ngsYIaq813lBAmjHQRcVQiJFax5jKH1A8nFgJInFr2ExNE1Eso6VuXTsePCENmoLnXpzPYlWRKOaLGB6fAk7M/U3nJEyMntY+AqGeI+Kah4Sd7BE1DCI48aPvrt+AnSam4vcCj7T9IBEXRWyr4l7Ef4CAjv4giBd4bCGhyB5miHv3Qs1c+x9o1sdOPLoE9LcUP0R63V8moxuW+gvITc0NUhrW+rnVB/xE3Y0F2hIk/e1lgk3YHBMMCZtTM+hw6w7AW4mh8IwmK0DA/dz4JPyQz3BO3GHeMVLv+w9qxD90YN8biD/rjdYVMKXmfj30rwaDu2JS9DYmUbpOCDbs8Bz28URDge7nFhNMBnSlugByGrvg0TGGvrh88NCm/og8bWAfqcDUqT3vDy8aude35yh188H5Mvzfw0qd9n32bijzmlepA4ma17TwA7ytpPJGyTdVhz6EK+UVFYFODxdvEcjY5Tr9aXP+3jpNKSTfJszsk2Hpo2P0WB4fbduV9jwGS7PSOR9FE8Nh4iU4bFCuTPXIWKwPhczvywj1Mkm6sqTDCHFj8mTLlkDpesCk4NIx8kqIHMYoW70kkdlzJ/4yBxfkqKCDU+cngU/v5N+2PRbc466OptEIYIxfy/CvcPe8K34Ey7Bl3ASG/yldtnkf5uji27++MxepVstIZUHSQdP6jYmrM7BXsNc+Ew91VniKsocyxWfuzwxGosBu4gHNdkANF7pkZyHITaOLfYoVomGb9INC7xp1z+e6zuLSfeD88PxozPScnKEbcZvBVFAKsZKoDZx6SgmJJUIflWKgvI+hze6cvyx2apaPJ4qZZVQkjunb6Mh0jBorzgzEKX7FBVeShMjYE3Qs5AAp430uIm8DOrwqSi+Xk1QFkahGaC+ZyaTfDJdigDL7LySL30QQ8s6/f97ZUJ4LugJRrljsEK5SSiHH+srTx1ce2WUiWnEosKKmIp/NOXUxdpNl3Gm7fDtiMUOZSOSNUrEjRrKgCxULClOfFPJ818iR4AbpgPWNRSgEZH+PNo32rt9G7F7fht8hkr9VfzIjTH4wCfGEkNDC5q2oO8WGtptx44n52yk/lWmBB3P08EabtxlK4x5HBdxVQbVQLOdsNdQZBZWAvfGen+rXmCjmGvxJ7ucoSVTKTMHJDVY6f5ik/K+u+JYoN7JcB+wN+JhVZTggw6oCOyNyAb2sfTyrx9/f5NRvHsQirDVrPiAw4F7lPIEQXx1y9xZplgd+k8lH5IbfcWMvz/pHLNhKpQo6/WFJouMmh6IWeXS001ls+I44YXtShYKAqZtdScHCAIRwqEcdS8YwOQoTrOuJXCd3zXu91IpsL/I+fc7Ycj/E5/8nYpykzN1+NeDYDK3jFk1QyrQUmEnx1ZY9oSJd85e5oJPs7F3xC/UcOFpSuzdykAHshmWgsMP8zTmmZssgpfUqgsNFQ7rxmN+/+p/mTZVC26ajTyPV47gvNnVii1R0iuVMWAOTxQt7z46Vt46T6HzYihZ7qVBqCWYe8+m6w1iJvoXaLmniZnPAbiyNHYwddHZBmN9DnOJlVGvmnKZ8rZf3bFrRJngxq98XZJ32yuMO4zYRe/A86gtbhzLKm0hu81EigRTxoM5mbSSDx4tUIZ34peXBp8ZL1LrE6RmvfY8jHw1NPeQK8OcI92PhRDGzkumEE0SOcKtSyXLWV/XK9jd/pon5hQpA+ln5vHo6GmcU+3LUZuKJCFckJRCeugtZEhmhEEXpe3drYV0c3Kz37KbYWrzdDo+/ZFKAwbn97pQmlBjxyzqSjG1Zl7QZ7zHCbERYB0xb6Bgw5jSgLx2GbFhuEmoqhslh0P5tz/nUchtzMxbUJd9T/z7KcOlkAnVd0pViyXnUVB+eI4D4k9ZRVzI4lvYj6ND5htPP+xfFbV/2s+sVb+p5ymVgXXUDExsqd3m6Z1pvsvUsAIck532G15J1Ee+OzV8Bsc51RRKuAb7GJUYF6JdRE2ZvT2ZBhNcxBEfBDU3c5TGi2+kVeichV9KL+RNEtavxT8hQTYNnvgmvczG7XfHiOXEIXcGwkQIc7h7BuRhcdJ6vM2JQhcB42ZLOUC/jYMzwUQc1xOhTPfFSUfnyz/whIWcRgFtUQ9o4wk28nn/AmUcR+72sHXW/XQ/a/MiNwlaXb7tRjZ7kxUhadXHCBSA8l0uD40HuSgU+HG2oEEdBQis/1pZUBk7PCDrjAksgEQi/Pf8LI/tpA2WSCZ/8vJdvXYuMVCYIxz3kXDkXd2PbOwx6kAuTZVhC5FyT2vjXKO6HvGw0Kxk58xB8E1xwCauDM5hpxWKy2rLR18XfmcmRQlgMBJ7+LKoxw34+/ffSNLF5DGiTDRUOmdvBStgZ4UKwZRO6u3DwD+DIWZTVV+lXI/BHpdZyiq9OIkeALI=,iv:LRFEoyuhJJinU1ZmPOYx1L9Sj+QpuOt0aA6ZjQwKRWs=,tag:O5KhGQuhSTzImdGoGW3qSQ==,type:str] - gcloud: ENC[AES256_GCM,data:7Ih+AIACAPuqMbXflp29dtTKutxWD7cnKEcOZVsB5hvalT3zNglIky9kt0e6lzz08M0p9Sr1TGVAF91sCQRALQ==,iv:E5THJlFDDjP2p8JVK8T/QVUOGIIHMkNwmZi1vB9WgFg=,tag:k33yjnujzCXrEDp+eqcasA==,type:str] -email: - lotte@chir.rs: ENC[AES256_GCM,data:L0jDdF10jMXrMU2IeveEmUHrAQ==,iv:zgx6pz7Kv/IIes3BP7XM5VAQ5xqINBJ2VE5kljQMzTo=,tag:Xgir5eUMJistQjL4YXDaag==,type:str] - mdelenk@hs-mittweida.de: ENC[AES256_GCM,data:JxmgCq2eHpMVhvzyhEI0HS17BJMMz7vSccVGnEY53aq6H/oPGqcvWhMqxlLTjFmvw2W1GubGzNFU6gd2zY2xfQ==,iv:/bdRjj6qmbcTytTuKKkNnvMYC2Qs9KoWnG2uokcGYZY=,tag:Z3e6U3cPAMlPHy7OqrsUdw==,type:str] -password: - root: ENC[AES256_GCM,data:go7/YhR6WfuAKiQ6T5FnyCk0xfbndkTH5wrSrm52emwH0ig/WAG/gLYpQoV61rsrpeV5/9EqU9VpDOJd5NxGiTo+YR/RRRgk0YpxrDrEiZNhST9CkbxEHokOXAptvkdPAb1EgxZ95w70fQ==,iv:tPfP2rMVh1n3ww8dUgarCsNoA2nakF7Rsa96QbhU1HA=,tag:YudLG/25tLaRfK1hUiymMQ==,type:str] - darkkirb: ENC[AES256_GCM,data:JET4w76wXmv043EpL95Ubz2qa7eOaQQ0HaKrW8sqQyL6/UvFJQUSlzM39+l+hPW5ptlFm5DcUtas5k3vh9lXci876g8VqpJK/FvIK9rBOZmMCPfc14m0XhG78WiRt7AadjvcrUMDzy3Jag==,iv:wQh5kvsWwAsrFkOidOEgmhwCpjhS+SL3oLxl0PiFpvo=,tag:U7mXO6bsIPbSWIIj1G7cVg==,type:str] -attic: - config.toml: ENC[AES256_GCM,data:nS6AX1C2LLUq9C+q9e8KTfI0XOqdCcHFNOGTAcRWmcVpDZvMR2iYm6rdCBJMdW4rq8BbCN7nKkNhWLeoZ3LAN4qsvjYd6AXNCBFmqCvRHA94k6vst3EnmFP0K5ge4kwyuT1BF1OTU7yjaaX1vegtUJQh3xJBs8sHxLim+AVxFc7pjUCdSO3yVUTqvlhfwpSCp85tYobe6W2ugf9H1Q7FcaMhyChE4cOlrR5aTDBNSqlmitr40USwWzw+GSv3FCD58v0yYBepYLlFxh+vcYn0nfWxiHgxHi8x3hstGQdhaSXyj2/R7z+MDOCr92GalX2fIarVOBtCRxMjv8xxkWCGZLcV6cTH05GEcDctFPcqy2FU3965GrKjEp4n/DXsMfGN+QFVgG3h5owvAvElxt7rRc27l9kfzU+CNoUGd5Hgb7977byV1w==,iv:ct1spmycQwJcIuTEcGWZn9NDCJUtrz2ArTIkA2edq+Y=,tag:OIW1Y9o/ZMeMAr0mBXqtkg==,type:str] -caroline: - yiffstash: - bot-token: ENC[AES256_GCM,data:IQ03KoI6dmuZWUX96XbnatrMXOunpNPY24VghR1RtWOhez05739fJCX80vKVmA==,iv:uBH4JJYBJfO34xS7N7+CcsCjzJ5afn2lKM5BrzGVf0g=,tag:z4BChakq2lZShbSb3ayF9Q==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1c7y687sxh428wk34s8ws6kemu62mggafpt40rmanevgkuj5xa59q6f7tlc - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqNHlDdHdqQUZuVU9rbnZi - SXdtSG5pRkdldHdHZGE5OWloSW1mR2RVcHlvCnBuam9TUUNEcjdqa0Y3M1JsdThs - cGJlbkxmNy9nZHNkZHFkNDg4diszQU0KLS0tIGw4bklDaDJ5NllHSGJUS1QyNkJw - bzNsZmtFeEJKV1B0SzFVNWExYzN2YXMKkBkI3QZUSwptkLtwpwDfVxvNSk0cXF30 - QpwIEMQYuUfuuNJkJ4AAUwTeEzItP5MIUXeYatc4/9oH+LFf8zdk+g== - -----END AGE ENCRYPTED FILE----- - - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnd1hCYkV5WU9DYnRYNFFa - WHBUK013OFA2TmN2Y2RlakJQUXBWdUNMc2hvCktVMzkrWUczN29YZGNyNldNamxR - T01qZWJQTWRzNldjaGxycFhaOVh1ODgKLS0tIHMveGEvcHRBWUp4Z0ZzZTV3Rkwz - Kytvc1lyRHRrRXRjaEV0V3ZDcUgzVVkKkqr0FcWUCkTYLIXJKuY5/LJX1odVaF4s - P2BLyjXj81078QjKwTyXskFV36uWM70LoVfkxBRTMZO/4O+BCwRpkg== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-10-25T07:51:51Z" - mac: ENC[AES256_GCM,data:yM11dF3tWfSApuwyE0tMYKJAHDlcKpaCoh+VyEKGA1dem3839mkoC9g3qrqMI1Y86IyMEdc34v+oXE5B0tOoFQvjJzCrY9RsKFu2xToIZ4IM3WbafBZoyIa7YCePGyEJyR5PWKtWRyAsHcWOOkQMWX4FwC1oPVUW1i426/YsTqs=,iv:GIrQ0ojdezf9QQz+1QLdvcQL3xtPXUgoEfLyCDfG8sY=,tag:F1oUq6QUWakQENQRBcvf4Q==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.9.1 diff --git a/secrets/nixos-8gb-fsn1-1.yaml b/secrets/nixos-8gb-fsn1-1.yaml deleted file mode 100644 index 6b4be012..00000000 --- a/secrets/nixos-8gb-fsn1-1.yaml +++ /dev/null @@ -1,88 +0,0 @@ -network: - wireguard: - privkey: ENC[AES256_GCM,data:LubdznXFCz6i8jNFuTEIo8T0Qyue0CzxyIhuP1Ggk6aXWOsNOJ9pbh4nDDo=,iv:1/vRAlJxPZZpSXPVS+te6mFIf98iLUS71Z3zHOZq69g=,tag:iHhCTgEBeIaIEgpOjpKg2w==,type:str] -security: - acme: - dns: ENC[AES256_GCM,data:bdQH1NFzW/0g3AT/JiUPN7wbiIxRQsjrEZ+IWZx6eQoAtffZ4ElHNMUb9DNnQ4Tz5fVJ4O8QbpKoYrqJiuXr7kfNmOLWiGZkFPj09kBwHClM5Nk8j4A8w8StUHIoYdSGQ8J00vyoTtjYRq1dvpYHRAKCrGUmxJ0g1iKU1rT861quU5fWR6SIXiBrO7VcvQtnYig9+72+gTetxte0jhLyMsEv4jzj87/jRp3a3FRgX5+9DJ9MXQdDlxj5c3H21MchHjeBQsoid1mSBgHyaqqgxZ0z7RBL,iv:vVLzaEgu93SOe72innWITZiMcSu/P90xqYcprHdQVn8=,tag:wvb14tAQLKqaAORwU4YKlw==,type:str] - cloudflare: ENC[AES256_GCM,data:1AvLQXxzoDFsHdABzk4D4svszmYLNCALSQnkQh3givY2YysoS129Vlwd3STU1btgQckN18wBgLtMlMf+xJ3SyNEObGGeFvdvwz/SodNwtywEEcbDtwj0kcvJqIrtGWRG5zb6+zT2aKhbLET27cejgdp2pd1Mks8YRB/yyMQu9g8V/9neG+BFKcPaCiVRpEVWSsj/3ixm0mzSlmvvav+WI4g5+unzrUEseVVHH4YZEzKTGb8BfXhG/XQ=,iv:WRLSMWXTFXbEfaR0hwMqWXKHdiNIV8m8Y6mmJecazUM=,tag:V+xI/6Jhm6apsVb3KXHRPQ==,type:str] - gcloud.json: ENC[AES256_GCM,data:lcnuYInaMdyzOxfpFhmJNSqhqNJBs5NvhTdQxvlOmCnn/MIDVH7IOapU3cHAomGYttnrICNzXsPPCl+d6RkFZy+RBm5/PMyfjFUHFKUwKPyWf21XRA5kywILFnVutyQrzj1bt0A6BbpC6Sx8ZSknd1pQ2qcyS7pHrfE2+KCZxw2uS2HUaHuF74yl7qcft+/E3ZZUZwVnVxoK9jJT4U4Sc6U7+5yn9yxxR4GTRUgYwI7auoBTo/2jS2dwc69crddq9XwaBAVPrTNDnW/61cAPqbJaFUjzEmCTC7+g4x2MZNfmM5BSvzpBnh+j7EMe9SPKZAeyMhSMTQAhnTCwYn5MX54L+Ti5a83mhXjy+JkwUCbthuLoapF2veBOHJMj95KnaEvWC2TA7GDtc001KIESr2j3jxz8rO981z9a0EfheeM9O7TIskLtpZmVlqtvUyszBPWvJpfdVNfA73aBpQM/rp+CVanJ00FpNU/bRwFbAtzUY3TCKOETGl5w2VYfZRjr6ly8iN3/MB+sp1WJdnrZmV0HlkU28mFcgMihEDf18av9Ld5fnxq/WnXqNcUpKxVPvDgF1R4SJ5+KzBsFtdldoYrPDLk5HX8VxtKUMn28wr1iqrOdyExYxrVsdooF+OxFKIXi0MG0zczcCARLSswON5/DkDRkjj0N28KZptoCok2skALUqUw9G8a0XzqvQ7cXMBBTg9h3ZSdFS3b4ZC4iGMoNuc7GsNDY0nGkxxcBSIUwKLGCaUJZdab99QHM+zPv7wmlrTU17tyWCWt5hV6Cr0smjKkkSZwjfafS/0TDxrkdqyCQGbPm8tOSU46tu1RlByAZY3ZSiGOCjgU4UwAeyae/q6vlDzONRa6rjHLgr7zQrjPd/CKif2035f1q0kLWomgww3IA+e3Ik/fVji+jVPPXfm3ZE8STwkMfg2JP60S0KATB3w+3p8R4ZD7FXgFSLR5Gyji05ODKSI3Mdd02SQSNfo02wlp7gxVI6lLYWjJQ6g3UHl6XwCR43mmQSHxHW27bLUpdbwoeUc5NBQS3s7yCuSO5imBf+WJ+dyPb0XA8luFYOtKCXvVlg4x+6v9QTP0CMOS5L395SxBQ8cIFPyC0gC1gC1rLWb5hH3oMC0wZ5fTfUF81VYi2PB+2TLr5Y642OOhrmfBzhwwVOU5Bnsxl7+9b6Nr1wbd8lSNWb7GgqNIP/X+OWQrhEzH5+ufgLUlbvyJXcj7jWJkU63Lb0lHD1RXo6ITOG1STqCVKPwSlru5Ius/cZgBTRgCU1B83lTuppojesOdDtyN+yGX0QkMeaTMMqmCuk1tU/lUp/fb5LPoxg7ySGZeeAg+kB0RDZFiISZ8ou6rpqespVuEGxRzgijHFzzLgcALMAO8C7Ya3hsqS3BOaYuvCt6fJuzsSc+8UM2jSA90YhYwIiHxlOIm71fdlLh6HQ4Jh0n64vyBcQJOYn3SUlgl2jGA7pRctxXst0VU3trKCmY/n9q/NB3PMNyxJZT0DyVrfMCeyatAdV4ahNqTS5d0Y+iKzlSxw3LMkUmOtUlHwDEtumsmcy/Bh79leqB39qRM4UeZBxGlzr2eB67H+e02LZwHV9nB67rw9s5YA+BFo6822D6zmRyqPGUtllrrnCsxQQRVGJWAA/b8CXXmoIVLhAM4eWt2WJ675EzKyN8ouQKFoIbQpFVnnDXlJK6JjSCoiSGfGzxKZTseW/f2LsYhi2Mv4CkyhtRBTvqzuTD5Cw85V1UYoi/toS2H2wQmrvgF9sbEwfxhG+r8xkPEcca+Y3omjcV3beQPUSQH5SpJoQUUFmFPmHMSxGtQnTlxoz+CnlouCyvzB6yjfILE3fziYfL6vadq0akEktgUS9DzCMw8lWBz895Zj4TQ9lA1iYCoJpRlcL9d+4WthzBiieU//GTtqZ+8bmdmpJfek/Ab6TR7/JlF11+QOs50fClgqh78+8ECiWTJ+uLEjVIf8DUQrszBX1juWTTBqqyHJdLKDNGi7437MreQGfhTe80XIRx/Hw4+mTIuoo9aUxroR5VeKjtvmbu99Gkw0qCCuxMMwzTLhMzthO3XVOYvuo2LW43VmFR7drPwnF268gyKek0ZhZ0/29V8fZ2Y1tLUZISs/H8P6OBZh5g8NxpDf/yozjrcJP574aXR2AC8NpwUFwhFkHQM+5Om9Su6gLHRLGnM3j15SAHxsqLL8VGALOqsvFON09Ei/Q5RQ2LrJA1cdxFQyk28x4Voi8e5RB/3hsHjdABbhprbREJ6Rohr8N/rRy5t0qi0kQ8boo2P+KZR2SCgvLkrIOWRHNMBxWJK6siqbjFvTT8ybb8EVxeACUzzUbFaGlKRYB/eWDFLnAIAIFcaq8yBAD8EGA0hosIDmrxf7TY9qvLUbyUaWSAOn+OdgUVbokaUGlvwwM6bmmQ4VmqIm+haP3leGHDiXb6NT9yRvpbVBTAIytuAnJM1/8irosr2Bls9ix8CfS8zNaUj7WzTmp0fIq/onnRuDIzlxZIcPGPO3PphfiLQkmULJN1U3yGJQVvNvPzg41LFdilnlikkI1jjPgflhKs8ODI7oX7zZSyMDKcmJTyiMuau1UgJsTGYnFOURDETDjNaWYfDkJHNIKObM0Fg6WKxBI/WMk0AcPbw2S8vk8yBE1vv0N9OpNfkix1Q0uCfuLEYLukRGR8ox/myKVu+t1H0c+Govv6155QfIBXVNmPlr7qEk2pAjw3Zocv0GBtUKThDnTN9uOdiignYfa+/B3la9kvFdOrvkxzM6xQa1LuOP6GhGl+hdAmxnTeVFv100LUja57WnUnHUvnpBf1u/5XvUwQM22Roa2xr4DL45EGSL+0KjRJAWALppDCVZqsHzYfZdhqCe/aXDao4dGb5FcSFmDxMKLEIwbVacj2A0GrdvKAaxf6Rzt90Mk9pAbwiKwoEmpZYpzHbOH5hLRONPDbBuwLVzjAVpeIAX793LWl52kzJtZ+VtT5LBN0e2j+D4sgpPnBZAYFcGSQI+rV3KGLGc35FZgPbj1T8sTzWnlCAs7e6b/9BHA02aLcPwIFTuzARwu85PW8PSEYdzEQTN/h5CecKihPjAYwgSa0DVf1Trsh+9dmX9ZyeqyvFVL4wpAti2CTs=,iv:rKPXmjy66aaI87E5pjN0pZ4YGiadgjH1FBnrXBi7LsY=,tag:VTdZraYCN9xNgNfY/VXm6w==,type:str] - gcloud: ENC[AES256_GCM,data:2xOvGVvf3PMOSt0zmIa4hlnErX23Zw8DDW0wr2IHHQwZsbzMvNcn5MCNRKO5SK9G5ztFi2Yy4XWxwTY7BNTGZg==,iv:PA1vWKMHCFPXJLE7Lc3XTnV+znLskPiee5r1/TUTTYo=,tag:IYjCdut+raQLr190At19ew==,type:str] -services: - chir-rs: - database-password: ENC[AES256_GCM,data:6c8Ey39Lh/MoCJakEGpNFyueH+RAs//HXPKExrsiXiU=,iv:YmajjfpoaTHlbv5VhCk36jgfDetCKOTMqrmMGzXvitc=,tag:eQq7P92TR0txNk161gUUKA==,type:str] - signup-secret: ENC[AES256_GCM,data:rLpC7HdhTSkDNeRau5iOvicDxeHJC9R3aRIVe65xysQ=,iv:Pm/+ZXWJCtN4Bq87hPaXco78C/cwD7cdCJmApDpS6iA=,tag:NL4T35lL+xauva72f8C+EQ==,type:str] - rspamd: - dkim: - darkkirb.de: ENC[AES256_GCM,data:2Af4PsmTI07QzY/++VrrENe8wovHrUNElisfufyNt4RaiAB0Uq9Bp6BnpIEqLzfDs0z4mY5D05ncVa+K6oZWnAkhTBwIwO/iD6a4v5aOSdMp1BjbAQnJ9OD41+lLw1KZe98qAbjoO0yjtr4ySo5UzQUJ2wm2i7ZHtEBH06Gc1ZIPD64u2rC3/x9m65Xf+NFe7uSn0hBlaVTnuLkA0RwcopvtFXe63PXq93cHc+YCu9O6beppp7p0K5EkOW54l0UuGVbNtHKm+AKbsjzLWBnS3w0tP6mi1GkbBB0DMJrasA+cd8SbQ02kh5t8cvisviDaroeWTGElovqNOiSYZ9PkBAaADBYuR6bDJ9riIH8RrFfmS+lT0XW6OPPGdz9b5AI5A+Xze+36u2sv/Mys+Y+/G2C+uZYgDj1EKYX3DGKAl0ytNlSw7QRa1WoobvcIOfgN5cvmVV56QkSNteEdHGGod0aoiWTgGFwuKyjZL4UBjoDXcXxiCAKeQJ9Kkk0u9IG5JEhsa6W21s1Ea3hJdCaNPXk/vF7d3gM/jzrYNiioic4S/PckYf4u/4NNJhP5QS9ys68uPXZpSxZ7cZnB7ZS1uzvY4Hq/nNBBXmSjGz/G8EaeAfcXtBeRwLnv6HgeDfz03lu+JoZJH4UKUkU0emoP8du1RpMU8lMxuOsOirwVAU2SljZn/P2+reeFsV2hca6/AmXNO8Ez663AcQsxww/xY9tady3ch6k/rixLIYZuhURzFilEwqQAye0KvcnQrwhix/i1ujGv5G2SKHTlpYiQPDDwnF/gYHC4H1kqzRCcRP0CcYeZ3hhBC/fwgkXSxhrKjRmPU9hGsB4LfNnzdbezi4K4XGiOzEy6DD6r+KqHK782U95eaBxDPaD5PTY/jcy4mn5jtalmznPiZ3C68EVTcZQJf/o84fQWPG6I9BIy5PITacqzm8EQC93ZPPB+gdLaUWv56U2ruT/3RgC4eusgBtngydbRP7MaVojasX/NWEV4uhQ6zH7ErEFQDpqwaTNBDhXQUS2DJznQH+xk9M+VxInN1tUvc7UXQ1SBdARFLPzNubRvnyhd05bx1TEGHIqKNaJN6khYOt0ES+wZPjYtx3ctdhzNjajMIjv8rjmEmNoRyyH66GMHEfDbuCkv+VoBkPPWhl5QGbF8NRmN6LxR/GokQgCitfDqBAvuCYhRahurVZmGelcXh3X/eV+aFWnC9TC8aA==,iv:LhtgzfLhkBUsZcEF5oBrUQJLeMkdSN97H9rp8fRdG2g=,tag:vTyG6L9n9LwNe94UNkLyhA==,type:str] - miifox.net: ENC[AES256_GCM,data:VIZ5rYug4uARdPtb2EqsifsMPWoEmBTSY+L2wrf/pAF7PTsE4qIbOxLJG5s8339TLd9YHkPdDXM4HUQA5Mp4eH+Wwp/PD5NnGZFcVhd/eE1/JILTs2HolSZDVU6SFo9ONs34qNBwktsJGm+cl8TKH3694lUaQdLPhGuVNSoO4xJOJnKW5TqzxQvPEYYdyRRN4yK6UhwVjA39c0iALSKT3FmCeriKJ5ElU9gYAO8fdXBD4e4Q0Wgy8e9PZ2OzQgQWrp4qGWPg4lfxoduggImgsQlk0J4VqSuibIIS8BOGqNYpSEa9nhRK6ux8MBcqzASK6aE8vCVhqjULtfY2qfjNB6g+GtmABgQwp62YborkeqcCa/WFvGzLFeR/ZydEmLSs5kZXGfkTGae2tk9I9KbmAY3QaveXDRC4YsXiQ2uf1u8DES4tvozNyQIiG0niFOslbM1+6e4Z+aabBv3oamCob4hbZ2hmdQLeg4UAvtsQHR8AamcLRvq7HThEV/ZKS3mm7wUQ6o26cxi0+y2bqbw+GP4rYg/QOZMpURycU3xlisWpfU7+5q2STXH50jBah0Hr8zH8vGWY5RMrW68uYqEDQ3o3z9EXcnSheUISVms8YJJO7AKFuT9qJrfWwVAjIKEVWaJb0BniT86rmu5Q2B3si8YKMkRvnKXNMsdX7vrsBCtWt1BBidnYKrxSXnRs4fJMM4yoX6gVu7u2Y9gXDS2VIxAfWVhvIVwlhyWUHQD5pJ7F2R9hzI3A3wYQ+YSQAu3bK3yOwzuZhH7bToq05OKt/wPrn9eaxT5KsTSWFg9F2v9fiW5pn9SsubyulZhSR0otq7RMqqVsGUmDNThx6ppiQIX1/0i1gV6p982aTlnVLc2P2UxgnuNojLUeg6zjTDRvtn8P5skiT22YCU3CalI1yN3JbpVWI5jUztccya07Izs8NIxl1HBdir4PCT99/YqgUNdYG7e7GVWs1EKMFWV3KtJ2jS32OGBggfq86M/NRLOmx6lF6Yo3pdiSZEKZ0nI0YM2pjjjEcCxX++Mo1MyUrHAsGlmsjA0vfbeIHg/bb3UeavWuSDBXvj/MAwca3c5hUmFZi/mvbCiOyTfqPmo5tesj1QG/2EmxJfL2U7j0WhrUIRVWp3rV7ull0jsq+gDaYMNpyJGf72dr2YmskT0FtB2C9UlBTyAAuY9l0vaOG1IDsmDhQqHPn+6Kxj0IMA6ASpEGvg==,iv:hrAOB8UHIMJRZob6iAXYIeXFGq5htRh4QfbsuF77ZVs=,tag:X1lrm9LkR2lfG5L670kNuA==,type:str] - chir.rs: ENC[AES256_GCM,data:ipSzyN8gBIPXEIJu8HopA9UwpIK4EsGRNc3OXWoePRCvErr5/9Ct1oAAtFYrsBHxuD6y/8ogTWOy7OKJbYfYMaGeE1drJiFFXaEQEU+QnWshhQon0xKG1ZCVyBz7t6PSyD7Vmzj3SefUtNIYmvmgRP3WCpSF9r+FjC1vo9evV5BrVkTrGLLhHh2OlcN3c2lbRB+p2Ozg0elRZ5R13kisAdWC5fClxoenT+Lo6LF2+zR4ty5455QS6tu5vx15u5EU4yYrWjCTlnnzAS1Kn1fbiFyGlEQbN2MyOKxYUzOtLpWQhBB1JYYCseurjtQgYP1pDlzSwLBI2DkbhQ7+g0EpjlTuBJj787n7u5w4GHKMCl+HeqMwUvRcm8TcInJPDgiW8Ml3PK4lMLLjQMJx6oDzbjF5PRCuOle0FZ0d/0UNdVPm8f4NCbelkOR9LkMDHY+4jxbxhu8Mc225szAa+MSPU9IWe1FH7XVRoI0wiDIhetmCHZoiujKvsZNP87Zau4KdpZ+AzsQ/vQaqTAWoj4C3Lmm5cMCwSYQlxwNnpXQcEXVtcuq8THRq0QzAHN0B9w+orpovpXQhKa1fBlOwD9FC/Lg4xQY8lDDrKg+altZ50qZzssiaZkSjmpKJx5iQ8yUWtkv13nJ8WlKQQ3w0j7RxwSAAPOavND6+QAbVvKl692o8uZkUxp84qqocfiWZrZAyChIYIZZaRjVxLoI72Q8QSY7ORp9hx570VhvLTQWieFwQyxzITBYpa8Du1WxTE7HyccIQLstHthegVWRLHRIFAayNLxwijONWKiYrOVRAUyL83KReyAfxsbWgGYyTvQc0J9LUHD70INLwSeux6gmHNwRYn0p3ObjJzQ2SFELsYtMJVXM9SmBdNDt5O1l3ED/ecMX5o8BS9qGTOurGRO4edUCDa5nbDGsmO3I1fNysk+GoiqjjWWwGg2OWSci1uK20n++QOwMrbqvwj2I1X4PIcEhJBsliOfBHX07kJVpC1ok9bxma6pzIh6eVJ2ndHj2rlBEo4Hr+uPUlm2QO+KSWQZnkbUuXIp3WkqH9BzkEJLOIgDw8SRRbPLzvNGTFx0IG2DXa0eB+4jY2xREEPzYAnMOutFcrNTOH7l3uKnPtI3KAZcPYJVYBAP4N8YyQvWUdgkg4s1WqVviPuyBAhzz6iYSGKjkiUF0Lp6YAKN2FMO/2WakzUHqXtflJQ+XYMMSsggITYQ==,iv:PBnB389V7rPFywusRERo2kQtnLnAFZthBmSLrvVa73k=,tag:6OpE8443frmwEwc6Ln5r9A==,type:str] - bunny-key: ENC[AES256_GCM,data:oWjgmP8sxjEWFbi2gte3MEkLe3ojuAvOO6hPtUCltbzSrfV1bBSPD+GpWxxa/Fkv1Dd1U1vc2qmqNhykA4No59K3C9YoW4b9,iv:5R7aTzxtj1PRQxwRAI5KeVjvTRcjFGJHpR6Sl7vVQH0=,tag:OqXO/GN9gswAe5bzJQS+9A==,type:str] - peertube: - env: ENC[AES256_GCM,data:KNAAgM3vV33A5tC0h0+0lQ87JDik2dVUMDVeMTQGwXKLh5GCwe41bwZuzi6Xv0sTi4jEXAEgjb6nNlTE6HcSPBydKg06jPLn8V+lbkCWsS4C/sxyX4ARufmoBifznThwSrSzbjrUes8CvQM3kxVGGtjraShxgta+x+PxH77V2GzM6Au0fRGt+/A=,iv:iCCIjRl1dppC1CjLPCjhfelndfTVOrTJMY41CYM+uwI=,tag:2++FMbHxc7AkoDkbr/PQMQ==,type:str] - secret: ENC[AES256_GCM,data:XnIZS4J22KGcfSCu1MwKuSDEgk2ZD+8/30AlAtcuGDR9Q6SFQqCDM2m45QAm/Bo2cHo93YuJFcLLNND2nfQffQ==,iv:qQxheM4NOQO/0YEu99s3X0xOk9IrMGNyUUutOP4vwvE=,tag:29oF1CC0sxXLdaujphIgNg==,type:str] - akkoma.exs: ENC[AES256_GCM,data:Q4ONL/eZCO7OEIh88cq5+mcYMj3JTyG1QylcWFjT/PqTvXtGTD8dg5R08ETA9LTvDjB1dlyoPJx5GVE/bVpltO/s0jn++u+O+KQ2p8BREUdR6C7ieT3fBB3wuyORjBFPIu6I2cxUI/rLf80aW2Orq3N35I3H+zWXILZXSW7WbPIAQyePEjp7ewDqRJeatz0nhbBfj07PuKoskKAw4iVFELxP5f3kFlRb9yJSQj0nUjpb0McwthZ2ZPoW3W3JRp9UT1jQVTeyH5ksd6XgAHMyE1GngE7zLIwT5oft3JT0TBfYiSpB82kN6QVfpu5g8eUM/AIXkzIUPSF2rd9PuWy4YdltWxzL8jw4E6TMBR1Y4sPrX74obAkrt/rv8hsg2zUok+qnnIemgySOStL5ngvPMxzl0RDRMvyq6PMMkq8DtsUQXR4ZtFm25ZAdhh8+zeTK8Y+WXV7dg7lOPGASMnGKQ8H7rhdsv/EvMJWFZIFD/A96W+PdWd+VD32FQ5nUiOyJIiYYTR+vpwMZRgtvRkt8XBpuHTGRO20dD2hBD7k6tC7Gb8QwuXelOQwXcz4b66KfKt67xDZ8yS8WQIADGcnJHNXo4ZtOIasihMqwU4Ew5laf4mZlmTjOZNeaaCw3Ge2PE9zA4WGlrXR0YqcsOi6DRc/9xhjtyPCc/Iy9ycL+j4pj6I6aqttbwkNcgrwiCyek3tdzV2VlqFYdOZMKKJ+OkF9KZ65RhVYuSMRj9GmGDcTFICfzLAtvvJmqy3AKNcpsA1FJ1YfjouNooYqIBNSZ6zVacoPHSBFwK82Sf+Giwlz5zfwuf5dAG5S4pf4q7GCy1neV+cpxt6ywNPsyOV7vEfqtTSJZWL7ooJLwUuD0avTOaPDKgl498cqdV//0lHG9H4OfZ0u7CsHFgDBa9mwCtrjnIbztMWuhAg+bRJUHrH4GaEXPz0WmuEzayOUOwwIAAXXJ13/VCe8TggFcN4muFD9jW95cCVL6ABFtBGP+07rxei96PXC1jg6w9OXq0bfz2g2aIC4pUQh8rTB6ONzjKnvWY4mNAjyYubeV5tyLHWLq6xcLGtWP,iv:laLN8O2+CHChjt/SV7aK84y/4wHIK8YD5lCct9ybgYk=,tag:J2nTUo9oAFzjOdUNjsrHtA==,type:str] - matrix-media-repo: - access-key-id: ENC[AES256_GCM,data:qFc3bua0z3cCydNwoM0hA9T3zbI=,iv:zox8zBO7p+CpyHUbXt1WIbsXVtJd16L5UHRS2HAGLpU=,tag:Rv/F8TmcLm9gIz8YMrZlCQ==,type:str] - secret-access-key: ENC[AES256_GCM,data:DiQmiDXGkSe1oFUrv1oDAAp0P5keo84BXMusSIGaRmeMNw2/cKy0tA==,iv:nEhRuPBgYY7/mHJwB86qzuZ9bgJBX3f5PJU+VdIRAuk=,tag:laAam0N7/0e8I7J/BiiNpg==,type:str] - signing.key: ENC[AES256_GCM,data:9T89UI3fHxuxVoMhM0AEp6MIZIYHSdvEWHUFvXamnLtzKakEIkYatl0VeoZP/nQGTwoHZWwVaCbBCyc3V87ZV/Q4cFH8e7vKbWSYCzCm6f6N8YtzJtrB2XX3MQWFX5iacvoYntGKG5bdITREUcvyxNwB5w3KE0Lnd4OVpY0pyQh9PE8Vl9bqEIkbr9P8jQ==,iv:UdOGxGFKjqoLPn4Kiexgp16Civ9w00dXj1CFOthCaRQ=,tag:Os3TVbEfdyUpahZuuSWoYg==,type:str] - dovecot: - rspamd_password: ENC[AES256_GCM,data:E19GJ7zE3FMFVAd7P7rvcmxRMYs=,iv:Nn6VdFq0UIs3Oh9JUKyiDvnk1rkNeqLIhjFSxdOPtmU=,tag:oGE3Ht/d0jlheMKunhwEsQ==,type:str] - dovecot-sql.conf.ext: ENC[AES256_GCM,data:1Uhyz+X9zDgBuO/CHnr4Ms+fK5gzNfjXb+LShLmtk087Pdr2F4CYZR4Bs3ZRlfEj6KRUx21grlLQ4zCbF6R/iA7I6ujvvpjicAd3/TCnxRBOvQif2kAiNjkLBIG4yaI6JMlQMPbH/EPFdnSE1lrNXi5duULzE66IdW0vEMG7ZJR3IXpJY162X75jNt1ufCTOMxe6f6wzuw+LlE4sbIvSU88HclST2ukIq/sUPTfalplKNFFJeBrfmiN+3KsxcFfqxvtuIazm8+4+fE6jPPtOdkBIcKjumDgof8KYgZqHIJDHyU0Tt3X8c+moAgCGf4gZtfeMmpy/l3Q9vvGzKMo/Tg/FWPW/+WnvsbO7TBv0P7qDKjGROdNXCKbHtdJ7jxIjZzk6hdWhN+sZqz9/m005CT52tEAGoY+MkQhzrKwrKkjItvU99YRGj9O1d7P256vpYOwAzgbz1HHPmmEjG/yLX/Fy9GSZfPOGu3j1kJtL/vfZh35jx3jx+bud8gAaDjke5XqKKE4M3mme8S31D3nmSC1vmRHSknGg4jg61dZ+awOgafWnB4Sxu0NHtw3f1EEcrmLW0H/G7pldMIbzextowlx+PlqvQU4s45EQLpSAB+lIYFrsGA/EofrILqA+R64bIsy0AqNxxsnnya9j60LL+vngCpY+3njsRn5u1yFobU5Tcdk2i0bjPYy8Ea8LFyXpDjRGtOKMLYwdDQ4qZG7Sg1bK7bkbbN213y1EApwwNKBo2ujAGbIOXsO/SveBfX6+z/CrvEiZWDib0IFbUN0PxRy2gnp2EsEMcD1KK2cS5t31fgTsGitSRL4rTV3I0bPDP/bBbzjlDQUFqm9OVN5tFsiJbxy+zFEBWGnReZkPk08jmL20Cu2SMDN0cvszDdJs5jndX9Rfahw=,iv:TMvVt1zakr5NupbYwszn+fB+Tckrfj/UHfZOI2lSKDc=,tag:8bVDCjAlQk9hQQalLhHWhw==,type:str] - postfix: - virtual_alias_domains.cf: ENC[AES256_GCM,data:rHsEjcR1mjS3cGyJmvNmTEaD4D26Xy9A0uoHs3nW5SZLU4MXxFptNMeh3CTar8HaJGjaANSe1sMs47ZJWmUjzkmsDPkhoNniZ196UfNIh6Hn2R0OR22CoVrtnMBvMd40wXG0BYSmZaBHkGyxfotMDlEycOx/UKe4hQp1G9zGPFnApO1XNUvbI8PewuTuJJxNrS6G3i4zzgg=,iv:rGueUVq7gIQuvYPU8szbP/XrmdXUHWCHCthJL3oyNaQ=,tag:x5XhCd0sW5BSA3vF67BVXg==,type:str] - virtual_alias_maps.cf: ENC[AES256_GCM,data:HgoFV/lc1IY33UT5HS37xsOOYgYiNsSds2KQWIlJI8odtNV0ZGiyXdths4F7o6ja3XpPF8aP8UE4xe6i1lVFcnkQHN+N3vrgH3g+j2mWndZlOw6vVFG7UyvZMotD6LCsECgvLWe4yRK6HSRKDWIro090SK6msWZrjRBah8FmIiuq,iv:QybUYI0STKCDAWsTP5+7ORxBGN84A7RPVivOuyocMd0=,tag:sjZepYwiEgFmKQq9dCBUig==,type:str] - virtual_mailbox_domains.cf: ENC[AES256_GCM,data:lg2wIYxXOWEtNcBtywxS//SoYg6VAwIwi6tAbkMC7FcwRBHSU30KhZgQKkbbX/C45iQUMKhz6rRCDLLcEW58k2QjkNxE48CLNH56E693oCu4X90S1OYRELXx0p7obt3bxI08C9Msrswmr2MmXn7HzHd6RxG94wzwzNYff+i7cHqtreKtSA==,iv:zjsnhqvXvQ04mMhM6OXrLitStrnuj0T8YDLU3nDwQ7w=,tag:qmFhkrTl/F8jNbWmDRsPjg==,type:str] - dns: - named-keys: ENC[AES256_GCM,data:cawOXZyi/mV5yO83oodajeeNbuHOTw/MO+iQYIfecXWdEW98BR2hdXVBLbxPD44yvUGZarUfF/iTc/jJq7kmkdEfXLrXg1B/eeDpuSSHK8nza4BlN55P+0itxHKys22RWMLJSjz61DwOr8Cqv7reJgcBepE2m4JPWyiyNI3Xv6B4KUi+cY5A6xvekHjCHE0jogtXhrD7,iv:qSWOH10V1slrzX6AsXJ1gM0QBUFN5uY5quYn4mqmLrQ=,tag:vpU+OQKVsKTfiH1FMaUGKQ==,type:str] - de: - darkkirb: - 53136.key: ENC[AES256_GCM,data:8nebUZ+47UywTFHo/R5+6X65dTJJS7bf83F57IktjtOvb4jnL8FgqJ4Igl6zMdN+9ZDKfMO0fXwXoTkyZ40q2S8l1e7I34D6CN4bYWDo2N/+pPIFjUqRne1rzF01nXOF+QL6Dw9TT8H9efGfGVs6+Sxw1XGdj8gOTNYO6A7nS9gKIrn1Hg14dtjfoqmGtLwgDcdbxf0dEYbcfDZuxVcx9zHUiw7hDpU4rDQONnYoj/G6f11TkhyDzifFT6h8hL+oIPLyKSD0Nt78HdshWl17h/vFeKVQzsStggmyc0RSTV3X91rAdiRe1tzGjFzY8ojXmIWm4Br0i2NuDg40EHeFnm4Y89BbxSMXMZxA3MnDoOJP+pfZ8PZnzXSR8LLgXfrYpalIR0ZqBs9t3eLfwnw+meRHmSivXxG47//OIg8y2a+beE9GQG4K/24W0kTBYJT8KKtKRu8=,iv:PnhGaDmU8Uu9GXHbx/8yOGYn0uzsxi56jDuipdV6vpQ=,tag:r93od3UZ71WkmnfE41tCuQ==,type:str] - 53136.private: ENC[AES256_GCM,data:k0wfGeepnJu/aowlpwPfwwmjMjdvZoGvk8pMxB4Vmy9LtFdtXKX+OouECQkgfe5xjEXQ68l2cCAU94u1vEvPfabshTEKIqGMkqix8k3tKhOvu23N7TjrDuemKkYjsNs10do/b0kXhKkqZuXeb8CngVzzuBQFjIYHF/CrCJqvdadASXmqoC1Q5341aa66UcX89QEprLkZqqjndaDAwFGmJPIrvn7s33nmecmct1StjIqqW2oah8hSWi2EQA==,iv:qaFFHlCSXhFuYZRdm43iGaZlRllgBg1kIJvzPkUQiwM=,tag:Krqs0bLlKfckXsooLOykmw==,type:str] - 61825.key: ENC[AES256_GCM,data:Tas3pU51KMmM0TLxD8i+BHc46xa6fZKR/b1htqJEVWq4IYNvp/SLK86pgvN2zwID3ufWRn1NtCLiwmrGTVfHmvHK359Mu+dyOL2GFTyu8l/eNN889RYLL2gtRd2tFlquC9pyjBD3mfMWvN3kmJAvgPwFy8um8A60DWZSlv7gEryF4MHD2Ef8gakLQrzycDI5YsTcDjc/yGAxmRjrt7njosFoN4o5DeAGgW/zvSwLeFWjYx90qq6nzClNhY+AB4qP3zVOHlIJzFWgtGd0hrKudYyrVVYKbQZ+SCvPuXZV7EyzYkJvVUWunhFXcJn5Yv5vR9cccWBqBrUrfN5c+lsJq4REN1gUpr7d+vSxjd3fDI5NoFJ7KQvaYC8KJphkM4OvzIF1bKGb5AHdl6mjRg4muwQzusEOJnPhurATioN6Q4jfzMfe1wO9wGQbDlSapZnZMpl1WBFl,iv:SOfbO9Vq4dKUSNzRavKbqEOBGMaEKbJrnmZjW/WMCtU=,tag:YLrW5Pgs1ridVM1XrWuqHA==,type:str] - 61825.private: ENC[AES256_GCM,data:yOHYfy30WQHy3chAJ/zdybhLn2Y4nz4emo0K1hBqx20BQRPObRhidjp3VyIYAespVvQXvdx4AO5mzX50JHf8JNXF4JhQLwF5dtG+anRmEFf6jai9QTcD/o+X5r/PzhlsQFdw7/rgyaCIgj2eSgLnBe6eQhE3A2FweZ07A4/VsAgaKKX6aSRUFSew/iSmPNlnEejvNzkQMD+vrVbb2K+3UTECuNHl6F2OT2hlYVYASkcWhoTtY5aiJPPs2g==,iv:CBpZrTB/9fVi0RoD0QqpCdlNgpfvKwoPWYWqfRoMFcE=,tag:GXYp2TD6nh6rh8ev5ZP97w==,type:str] - rs: - chir: - 32969.key: ENC[AES256_GCM,data:sRG8xUZvYQ2XOyPtYdHWTlC7GbzsDTmzMtV4FQvS3wbghBmV3TLMItEjZ91F3MrJkD0qzeFzXLXlNffkkzxN/LPB9vihK5+jH4EFBhgYRCdOBDmBfypkUU85q1GwJnztehr7nr7Qc4/0e0CLiiI04hov6s+YLZ5NMxAiy+jBBD+AeobmN6FxAaG/WXtzTrzhjCAsu6q72HkYI1VQA8PtaRKiylNssN1DP4jGnX0ZORjCBpFy661rRkZSt1RP47Zj1mJvVzZak/UZKfTSne3ndDLgEwam5XzN4ALECgFSirFCpcnalrtAvNXZdZB0EzZOwL6PXLdZwc4HIx0zBPcAl8xVula3UKUjNHtg3m+rX+gVyd+H/6N7o2H2oBNBrZnWusEOG+zLXISKgr6Veh0zP8/1nruPtGAq1WhzEmTqawk1R43ky8x9QMfSkNAu,iv:v9CfVZc98ZdqYpEsMLovl15gijVp8hl34NYT/mHz1xU=,tag:fzNY9fA3YjldeAcv0CZg1Q==,type:str] - 32969.private: ENC[AES256_GCM,data:y4WOUYXZuez+Qtk4ppYMpWuYMFt/cXVg4oq9k3gQLfgqgIyHn3i8ESuusZSvi6tZcr5qAeVVkGWxpVgKcYMmyvRr45VdK8Rxjlei2HWlY4fnG0N89bT/J+92MpcmBrHUr65d4I60gX5XF97E7VRvBEb+ORw++tiqg0Ylk/Z6CpDHXriUwUFc3Wd/OJp1+24zHwdyoVBwYXRslmSIoTkdBlzpxDolyfS+c1brbrYr89cLRevls4BPWuySpg==,iv:E0BSqRpS3/LRO11UPdLCCyx6NZQau/ju1HhkdyhqdNU=,tag:6b2RkIA6d1EbJ4rKbFsYqQ==,type:str] - 51207.key: ENC[AES256_GCM,data:ygiUx9Rox74eEarmdacnp1ELFKQdEwTl+qioUlUUaZ35bEa7q5g2qLrFgi7MZmT59rEKwYJ49AmdOacCYdBYKJvBEqDSXOEecqlPxtelSsMh+Z556Il33AHiZT8Oc1qR9p7/QyHKgmWijC8TvTHFKv+bbhQUy+4KIliVAVOo2+CaZFg+9AATHb2r0Ozx2rBUsqppiiUtTif84dDgsuSR9Zm/MYDNUS4v3Zwxhy9tJUKcH/GNoWs8wGBBofSecGr2p1DFpKIKxBMbUgDki1XCynCQTYBKpJYMJg+fJIEjvoyMB5zs01RoJA4ZTV0acAWRxGgyNh28llHvxk5G52y/YXnMeJ3fCDhcgvGxPcHKDA4RuE8kbpDUS2iLGJGaRARzS/zziFe5WSMZ086BE/177+ZybCeXVLNN+p13ynF45I13ejyLlQv7yUgl/dGLKg==,iv:Kj+GN0JYCYULQN1x+zelXud0Z3X8yf2oS2JV8xXrpTk=,tag:4RFm2q3TtClEoUE9dUDjSA==,type:str] - 51207.private: ENC[AES256_GCM,data:I/9Uo3dkTnyUJiV68XshNnvV6VfxNX60aFLdvRRx/+a8uIpKPkEJr/AH5lsRkMoyXhSxdld06I/6uYoeieyOz9atCuv6SDrGkfHw8qyCSpsBHoDi8Uq9y6A1a0rWGeHIjVcUw8NtgDRKGmdN+lnfbkcjIplXLeyocfAwLIFGiLPZdR5QF4fqAJwdx4dE5DTikhkLPMpo4P1ZL/gsdoakPAeawyboWcYHTPwH43pg7Z8vggcxlDAOkJ7lVw==,iv:yq+KsIXYqUUPf+1g6sCJ0hkI5OuKHXwgLmKfmmi8+oY=,tag:WXoskbdgo+AhA77P+2iN4Q==,type:str] - int: - 19631.key: ENC[AES256_GCM,data:O3egofjoOSGmrqvx6Sdr/6ZDboPIkw4r/LnAbMaLzUhBMai2BayBQTg633zz/oTNSJcecaysoErrQs/lIT9kHJCmFnQlhqdPiuozHbp0WkxKH+nTdPvpjJs+dZjgVqCmnov7S7fe0woEiMopS3HUsZ2AlcBPsIW6IPdZPvHf+y5udsV98hPABf4RObEx6t1tkEVvD14Ui12/sAJhadynhS84huut9tOCmCwZYP5oO/716jN3D2BVtY+HwtMixBMnmLZG9iLqqCrVr1yyAer9CgX9SDPy0iFFwmlDmloVJvhfu+zHp1gF1tOCLGIPHCmFRUKm8n8YMui0xb/nLRtqs2c9tQICk/vI7FmiKKQ+15nyieBf/lsABqs3Q14m+mH5Lbz1NDz+KTpaC4zHJg7uaAwSTW793ebLwTcFNZxMZfUkom/PLD0tjUpo6E2kEaMQfRjQF1zz,iv:4IsurFymwGv/gRnY6xKOhJE2ZvG4TlsXlZsCcxuK/Gk=,tag:KBTPZXOTdG8QJOdxQQwbbQ==,type:str] - 19631.private: ENC[AES256_GCM,data:852YGBUQkp5ObgLSRGif4wQz7TbJPwIgHh5fdtVvDtecqM6+TCGEImo+o59fxWPir+ASxMybJcClfiuloEU6QtetdN5gX4CEgLmmha2cZNVYOmakVNO/1krTl6ENg9FwhoFWmgTbftBvNOr2BcU6gWcms+EeCn/aGItet/MKJh+O3idBg1hj+PVrSJToDKRcIv0sdT3VRocw6xLpo/Bpmr79Llhn5FCsMEgL10QFd8Erm5+S1tugOt2tuA==,iv:tLzNRq9LZg4lvPXKVkwBSFTHkCoqLJYhgfjxaM9vmis=,tag:d26CmjCGAPab8yYmO494Qg==,type:str] - 35133.key: ENC[AES256_GCM,data:4U2fGJ4+ILMymW2MxdpvnjlZplsEFJluqiXBTwZR4khfTKeMlWfbwj3lLMBi0J4rJdM93rV1ZUMipCToeP7uxp9MDok7fbO8XuKK41P6Qj0ajMfzDCLnSUDeJnjpsbyBzhkmCCa7PsYdngM5kKw141PY8zCnd0p71TBHt0JVAN0AHfFquYPmnUxJkZ+EjtVyPFBOl+W4fRfULS9QnWpJlFHEEg1LRYoSkGMkWzo8eD7h8TE4lDoGrF/upbxtevNFkFNwfINUendQcVR1ROw6WGZ/kGbxDk/MfQJuMdiD7W85eIYM92oIFrmPVTuRmc56/yrD9PiGuWHhNrnGI3MpN5CMCXwbqRgl7vKo7vPP29zQFY+FE6in5/UsnWCiOhad+42o9dHmCyKv0cqBl3wJt3+fgAFHPhnH5notXV6pjzKJug1nFC1COz2IAhL1BG5IBw83NGY=,iv:u/vjohVqGcildR7jqKatC6szqO2ObS8bwbqRxciLcTA=,tag:ExXvj1HXVby7GqscKOmOWQ==,type:str] - 35133.private: ENC[AES256_GCM,data:4HuLiLYCBKbmOJnyrHAd8nWNs0HwUpQNaQZqWuS9FDknIYfcn8yDgkmGyNYeK5+j7jRgyTvtBC4Svjk5/mfMtXx06iRCH6+Nq2aOZvyTA5Evx7nbvdO8c03ukS5YOpekP4m1/5IMO1g8pk2lAOjrWCSwV374xK/WBmNc6iUgOs41Wo6AqMjbhM5MXOEGS8+ToSyzKUdYwGJk3aD1NPQQowi3A6022pNJFYjApV6vQETdGXMEyFZVsET67Q==,iv:JKBtXwoM+7q8T6k9Z6M755h5IMa6WF+Qgvth95b0EcA=,tag:yupHvAlytst+XnOjGoT9mA==,type:str] -email: - lotte@chir.rs: ENC[AES256_GCM,data:8tY2Gkz0DbAWqReDs3UZdC2s4w==,iv:YNojIAsSSmDkjwa1gAFyys57qSTi/R8TszJqif6VF+8=,tag:Ad7Uhc+XHfl9d0fYQfEe6Q==,type:str] - mdelenk@hs-mittweida.de: ENC[AES256_GCM,data:vVivB/0NZXsSDgcOjSx2yFonzCmCI/aTdmyX6Q2USuujXAQVoIORnfrv883yaowHKDNm41RRw1NrT+TwUTf8lg==,iv:cVboeh+Cs7VOeofbQ3X/kh6+2hoGhhKgJSKUayxabUw=,tag:6Cqv6tyrftV70+TEIpJhbA==,type:str] -password: - root: ENC[AES256_GCM,data:nqIDSOSswAL+yruaDv7nNzlDKRj8ZHdNvDHyLy9oKtphQyToeBVEdo4u776tCFv/1g4q6XmXkZsyVeaJ8rW77oidNm4WPMCdQZsbqdlcv7ktLCOAVuH/j9M6ZPOrxAQu+VtJouz33XSVPw==,iv:GXRbXqKLG5R8m/ZHIPHCii9j2hrxc71+PiqlIyoLUXU=,tag:DN1mlIdmwEGIR1pbOBRzDw==,type:str] - darkkirb: ENC[AES256_GCM,data:JqgEjOwprWkUlK0nxchazG6Iz4N+hCKPDAWJ4aNlK4O7ErfpCQYUVx5aCG9NAedFeOnEjCdYom8cJhQlJc2Uf3H6xyGAfCS8GdF3ilLWDuQ6OQGNJZ9/FjCYvKC7wxOb5UJO3K8xKC4kuA==,iv:OfCBgGuCNOb9S88CGEFUsoJjw4RLBCZYqu6GYV91ud0=,tag:OCcIEuibUlHC+bSanQezBg==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1273ps5thcy70ckdt0270s2nysqgu48t38pq3wq975v3y7mf4eavsw38wsl - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMU2Qvd010MHEvVXF4NlNh - OWNUbHVvaFNZZ1hCNUdNNGczTTAzYlVJR0UwCitublZRNUZydnlybnQ1UzdOQ0Z6 - ZXg4cXNHRnJnY3pDclNnbCsxOWRmTHcKLS0tIDFJc0FBdXpxQnhmZVROc3dhNnN5 - RlVScU1qdkU5YlYrY3psVmtXSDU5YVkKfxaQVuHqyHbfhcBftdsAlAqukVqgfiy4 - jGblACwAgVomcj1FXvtAwAfOyEI+CKWRzSo2VPjrC/uLkUZgGNTn7Q== - -----END AGE ENCRYPTED FILE----- - - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBoWnlDTk5VZmhXb2JkVU1o - dGtnNmJzbzJpRU1nMkpkUkhEWkZpMHN3VFdrCkRQc01PN1lFcmt1S0dyZFRFaVRn - VmpiM1VaNkJrcGNTUnA2TGk3QjBOLzQKLS0tIGMrRXQwajZMM0NtL25ZS1NUVUZB - M0tUV1E2dndCTXRsOVJBU2ZNVHRFS2MKhBezoPFc0mdXassxViUfsmFTQCVbP1Js - bEpByfdW69GUCjR0HmcjF3NX/Cd5N5uivy+yLp3IrincHAz8LBIXyw== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-10-19T06:15:43Z" - mac: ENC[AES256_GCM,data:PVSHek+3yN4/r7r1DdmZ3juA/BUdt6xVXp7KqVvZVfumvrKt96YEse7ByA0rfbhsudvbkEJ27c/SFkq8wr9yTnuoC2G73ityy55mAwXAXoi4P1YlM0WsGam5YI+WEKAD8KFsGt0rhLaPSplJ3KChhaBHSIYBiPDRndFsIsodIr8=,iv:dHFvSrdnOzAw1D+lkHUzuxwphU/z7wiDKhEGrd8ZejU=,tag:957soHIZVrb+xv7JOvBwxg==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.9.0 diff --git a/secrets/nixos.yaml b/secrets/nixos.yaml deleted file mode 100644 index af6a60f6..00000000 --- a/secrets/nixos.yaml +++ /dev/null @@ -1,39 +0,0 @@ -network: - wireguard: - privkey: ENC[AES256_GCM,data:OlJjO2rg3Em9XrCwG9F2rMIHWpTgtSGjZ2hKeLgg8Su7+4PNIJPEvnc69no=,iv:WgKxnMmkebp4cFj+m5GjBuBIIZgXuW8xZzv3WvqYgFE=,tag:nwNQn0CmbRtrXdpcMZ2GVg==,type:str] -security: - acme: - dns: ENC[AES256_GCM,data:3o7posdGe1kSZ7c/EhuFcz1xTTK92WcPBFyYElNVRc6MqvZT2bR0HBbjqbtvptWJFvyIqO35Ho4Kfmjn/nxsKukaZvLGgp5+U+++1LkMqOUWsQYJont+Kv/3YWXruPgYTf3+rwfBLwNwhz16ra64uq8SiOwDyZvd9rJGRbCQffBrVHSWP2coMdbP/aXytOwlDOFNQ0pKba4dklY27o4HVBtDPAdKyWObdQslmqGH9acsgrKWlbWSfi1zQr0IU9eKBMFgrAVZgyNK+GRLXDvje6+6K7kQ,iv:vNe7e8kY7GSfc3gioI37N+UNe+eSNasys4Q0BrSnLUs=,tag:TAaXUiGsCqKfe2eNt77uNg==,type:str] - cloudflare: ENC[AES256_GCM,data:/e4V47kr+hfoeh7veQ5vj6mkb+3nVuDZx5j+CnAE/G7yTPWYgLrACGDwl36xJynumMMcDkvwlFYcTxxbiD2s83m6IxzukUB+61z8WC79SQwDGxxTL1gBfAdyXavD2hXh2c3zuFQOm1yjUQjvbHgdn+zPWfwCbUjipQX/dYAt4fvRwfXHhW32FupDgobgQq5SIZ1mMxZrIZjuZzDczDlaumUMADHsH8nasJP6gn/8RQ5Y1n16VJzJRjU=,iv:KCEhh7V5ydFEp1E/GbxrmvLBDibHIJKrJWDbCvJD17k=,tag:N0tEXUrjbrTq2ooubq9iCg==,type:str] - gcloud.json: ENC[AES256_GCM,data:mBtcYN0dHXaW7XFni+GM20v3DITREtsmR0onEBrIv7u1eG9Eom8kK9qUTWqOQkVGu65Lap9FvWu62GSkE+fOylN95Y0lhjrbFy5uAvRutOT8auwMVVwTECFmCFHGQXK+4cOaRbpcdQlPlEtL9mmiQ9VC/xSTIs3o67icAc4D6JgsP95YXotIakdOyf3mMB2IiyFmuSKtrDDsbR88M5s9hq669qNjXYW4k0euLieDgsSCc5sRaD8c+AH10993vqIsc1wfNBGOzLKB6Ok+ajtDdDxUqyBM3oCYxOeL055r1lhmZA3x7gFlhyRk+6mihx5hJreWeqzwFlQJiD4RM5HvAYYmlO1NybkuHB8UlZ0lYXwtq1Mwlh4VyaFvqg2X5sLGdH6aBWJRSf+a51PXykZLaBR4sH5mVK1gfNgMopRZCPmoBhmVZQ6eIPJQPaU36AHRzzMXk5q4i2CVcFAJFgYoegGrCAazjN7ldpVkSkrM1H+0Jn4sDB6KzriGoCtv0vSn6Ojn0LbuCGusIPKk3dBvcmc0KCGzOT4S99qNeQVGlopXWod5V5dKNyq1OEpaOl9L45/crYGLcJQaNAmn9sDp89EPiSeCR0QfJQ2J0qKUNeZtkTCD/1ieLBPYK8OSfkZEiQ/MN5sHHm4nzFDhgYhOu0HJHljZs+FuzsDMNcZNWnL3a2wXaJ1nP+lH9qFy7uSOYXpFQAE/ISwNNx1qkkRTpaAglCvArupZgfx3u3uETkalolLpZBApdaD2g7aN0/T4PRhKdufQoBn7fa4/aeRBRSXFsEenRAuNoq/KpeIzpP+fSg5eHwo31aIWIW+oVuK4bnr5GWClTJS5bHgmUashWG3zCVPVqGRDrUOdazplMRQbP/X1DRujY3sLppykPtSGVZiBS4ja4W5gI20E7aXVUjAU1gXPot86uRyxR0YWTLW8Pah43qeyhdkWQGYpj9EQDGYytGjDTkzKTkm9qUMBbtw9yrMTG4Oh0NPj5Itz6yv6l3nPmo3UxtvKdH6BLy+oH0tTeE19b+AkiOgILZNX1z30vzxVzfQflrCSJ1sanbBAWuIfTv8cmmjBZD8mnGQROmMQOpIDe7SdXjupnPqSJ1WUT/YioiEXyZmw96j/pM00SwHBHaP4U8VByzy4ogPaN75eggWVUvtInYFO9FHI6ZIRpS/n/JZ/bjjtwYhu37ndmNuu8e1Q0KlvdEDW26aJ9QXlqGP45ve/LJ+nJkNP+ns5M3WXUBd92xPKYqrwesLn5DHLLjPBldJB7jrWx5g5+eI1SmooWuY7WEPQeY8AV8SNqABXbEbEr7L0o237j6WsP4fLX8+sgOeOlxTniPTZztyludFjAJIJlaGBZ+zZ2pJ5RJo2KLj3ozNj0vPtP7RJKRgVENTfa+TUVMZjoSyam3/5AZFx7VR9YskKILk5F8oBLbIVoYuVCdpNRR98d7pAO/OBjE1E0Kt6qFiZGLiDIqdO5ugkhOgMmt06uNRDtKtG0Ph878/I9lYvZfKTjJlwJZwFRMB74N1E8/hMzPrYB9bfoG0Yt6gFovfohPRgQedjk4ijWTWwRrPMZa/4tNTWSptJcCdeUVzZSUG7H+ph33PZDInFr8C5ewrMhkCJkfUH+lXM15PhaGpHmnaIwFogs/yubGtiGAu/djs9VJxD5KuAtoxMbEXXLGsFYdZGUanSmG1kTQO5UG7N4axOFHOolX5dES2cxZHlwbxhJ0YjAWF8IKh3PY5yR3tscWsBjAwN0jvewemV4aqRNXg1HuaR/1GINPOKQ89iCVhMMZdot9U+i23HsxmyN5D0KDWwhqtt5aXtxSfvrPIBLOHjBwp1LM9scvFVerpWivTDqe2MmrkKQBWVEoh7+ZqDrAM1veoOEkova1ono+HtUhLGhRsmMgDHREyWV0Am1q+ufrfoll0FnaxD0+irl3k+Kwze2rmwDpNfKCi2DevW12o/glrzpgtcZCjMZmHnkTv5vSwOgTujIcYmMaQLMaA+Jy442/26td32chsIW5tJEHwDTKLHh/qNK2pUuo/c7PqeiBNEQxNMYsZ747LkDEOh3gmdiBeLoN1fjJsEiCteQ+RYychqVTRtC1PwjyHqyHli5R8UA6rYGdcxT8aXjK0/sXdfRMiyQRRKvgAcbjz1JGPYPA14AXj2COAoUkOwRAOvvHkK8IhPzXfL/FmPiFcC6m/I1pbdUM7yUdwh3V3kd3VJ0oOZ4iByIP75PCG6xhnWgzcBNE6mHvVDOg/Ky8oZjms23qne8efw5YG/nx9Njj8e0RJha+SVybIL6389OP4CVjasdMddLUAxhQWUl849sDqUSSt+jisBjeXs6+cVZNT6nEeVYrzPX5dxJ0p/grTmoCshIMGmrBPvuw27TU+QgcWIG9APCuLs99QvLhdIYrKsX+PZKImTyWaYjNmbPg0Qa6c5iOmAoaK1sSQGw5xIutbzgWmQxlU4RGjHuoBsiMNXYEaTlPHJbl1xfZl3BQ4qZvdqu3DBVcFiTKaRsM+msqSIRWUYij4C/5GsfELCkScWprJVaBuX15jAq3KT/9wcB+VKVUURxAGw6zrDWJ0rmrq/l8jokDzl21BUjOIZF7Oj5DrfY3babAHM4brm1P5HazytLkw93MlcFdqDwV465aYDiTWgFAfUAiJMhi8UxPmIAPemcbT7AdohcUyIf9Ad5yluvFS0YJmGaHpt0RDfLrOpXRmbPLCx6qbaLM1gggwygBtK11LsmfXsyUwzVbZwDECdBKun2ajq4BlTcI8EDchlvhPh6IKop9Yh87zApXxXjuSWKDfvuY9shMCDwrXfQwEU5+0si1fxpIbuvffpw7TofQ4rBaSV8fLWTgryaAZnzUUvNkPm420+GtmuLKrXHx80jeVn9RvKBU50YQB7rfE/M30u10JvkskupeHHd+2E5taT14aWDz3YAiUrrGFij39iwVVxNRay+gCOmsoldHRdRdia+gya7MsegHbKzeIvnabf4NsTliMNe7dcWKt2v9BiST7ird15MJ6hbI0Divh2ARaZWLOfLmP6b9LgnYY681KnaC7BSOM1OQUxiCjkKeatFyNTvdlpuar4JhP2EjMbju2fCp7CXi8GG6ZAa/u95TdtbtkFPW8=,iv:R1bKE0Ut9TA5TybQspc9abn7A2pwxgKMIgcgH8FjO9c=,tag:8NZ1WhQR2Ei4btAvelAhsA==,type:str] - gcloud: ENC[AES256_GCM,data:eccihBFLjubmTfvLdUzZpqcCt6TtAM1VuZg0XAk0dAG8tbBMh1YQNMxaw5bMx0MvXD+N1iMmiQoni/u2466MWQ==,iv:z/8uiK0050wUoimem6ap+sc9XRucgKS2ymr8+7CnhZ0=,tag:BeOGyBHeyAkFEqQRPnT2mQ==,type:str] - restic: - password: ENC[AES256_GCM,data:Ff4m8C2YizgEh3wNIfO/DgxG1jE=,iv:eDAUMKF974iq7bHnep97XGtj8wcJSa7HRXtUR2t8v8A=,tag:+OZQ8zUxzQHStGGajItDQg==,type:str] -email: - lotte@chir.rs: ENC[AES256_GCM,data:7zI3LyB1z6algjFkafyXParw8g==,iv:19Cm4ZUGtf2p2MhHeA9pOJrPF/8pdTrAfM+TivD1Plw=,tag:+TapAwXxsgVHD68hSIXR0Q==,type:str] - mdelenk@hs-mittweida.de: ENC[AES256_GCM,data:emTRqT64eQIGj4q8Jhep3I6yAm1k8smtRJm226WQM4GXfk1biWIhyi7u9/0KHErzf+sCIMohu/jFAx6gH5BF/w==,iv:e4gjNZGHWoCKEQZRkVwhaUfBKeDj4oCjDMS4yA3ONUQ=,tag:62Um+yjThSagoIHdUGVsbA==,type:str] -password: - darkkirb: "" - root: "" -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: [] - lastmodified: "2023-12-31T09:44:02Z" - mac: ENC[AES256_GCM,data:kvfXBecfH1xhmKrlEdI65elSnbVAAHHl7LOKf7LpxzZPU7lp/5Nu2QgZ1hkbK39tFt6Ba1fBgE9o0Mri02vSdKpRXOlZEvr8VgQjPN5jGXabpEJr9TJcC8KngDaEJpr3wRnDZWLRD9+C0AXbLBZNvQ0PKo6SvacX5m/4nBGFFYc=,iv:kXPhW3rNKoZnDxmn3be0hsr/A5xcvghpAH36NDXgG50=,tag:3ZhEiX+IaH6y2HSvhKYkPw==,type:str] - pgp: - - created_at: "2022-03-22T08:12:00Z" - enc: | - -----BEGIN PGP MESSAGE----- - - hF4DAAAAAAAAAAASAQdAX+CN8NKjVArrirF1PI+Jmd3X7AQsfoMN0Lc3FtGpHgQw - z/rxy+QzHIxxcQn/Rg3Il21o7M9eq5+VSqZPj0mDxoleNZBmb3VN2tRxM9IbH+tw - 0lwBe5s8MmkkFyOb/0y0vCkFttgzY82w4dYAbyCqBt5F+G4a4R5hGp5u4otLY0PF - W1g4A6+5sDNYY6HNKYo1ZyJVNPEGXFj4S+A0IkjJ/ZmPJSP8+UCgjPR2C/8RBw== - =5jOA - -----END PGP MESSAGE----- - fp: 46C6A7E14BC7812E86C2700737FE303AAC2D06CD - unencrypted_suffix: _unencrypted - version: 3.8.1 diff --git a/secrets/rainbow-resort.yaml b/secrets/rainbow-resort.yaml deleted file mode 100644 index 0b902da9..00000000 --- a/secrets/rainbow-resort.yaml +++ /dev/null @@ -1,38 +0,0 @@ -email: - lotte@chir.rs: ENC[AES256_GCM,data:5mwX4V/e1A12VCaYhTpmYs2f+Q==,iv:AhCmjzZDDB3n9H2PKxnyLJU8nu1zmDLWne3nedYNgkQ=,tag:L9nBbJqj0G5Lm5wYgNw5pA==,type:str] - mdelenk@hs-mittweida.de: ENC[AES256_GCM,data:q/ay3nCIiobmyoZf9gyV1lEm/YAjJLWkw9yeesCxVHRJ6/isBHIBpBj5Y+Z6qQ32zDVCO4EYa2oPNWSiessOsQ==,iv:Hux4GbI0DLuo5tKg5o47ob+zlLjJwsPe0N5MpD85kqc=,tag:olARO7mLklXHqtxdetXwUg==,type:str] -password: - root: ENC[AES256_GCM,data:NLyFpKA2YgH/lfX7rdxjV7JckSaQ9vUutf7BcTXBskMRoi3oDGoMHnaLT9hhSfrp0xM3qDZWKyuVRq2bYf1JKrFnQe2btoZQj3NPxgIojNF9Eys5BFTp78eBxsB+AqqUg1LLzhIi47EDow==,iv:xtj6j7SyguvUqKhqvqFTyTQ6XpcLVpIGOJBt6N4CrL8=,tag:7A0DTcGZim4+IjIW5XO3Mg==,type:str] - darkkirb: ENC[AES256_GCM,data:d82Q/Ew17WJK/qafVt8R1517ECOuGf1XaVzH7IqmyivZSVyXSTi2Wr43kV0P66FaponFN/ZvUL8YsghiepKxNVen/vqqJuI2R7aYApHH3RkbawCVperoj4rQlPeiHThuQEXTQDUX9W0ZlA==,iv:XuRk2NPyBEMZ9vaudLI6kQum0GM2PkVjWWovoabAnaw=,tag:F5iM9TeqV8/qlyMTkeJgfQ==,type:str] -services: - forgejo-runner: ENC[AES256_GCM,data:8g0kIbBbK559/O21ydk0MlM2M0OND4Ldr1ofw6z3A32CcVJQlmDASwA/00gNLw==,iv:gfrgMh7F6B3m6gRgPsm2XKeugDC4r7DcygUVgAL25oE=,tag:tAb8C5lbt3HyIhhOhwzNIA==,type:str] - forgejo-runner-darkkirb: ENC[AES256_GCM,data:tp8MRgmMuiIRzw9D+Am/fBR/fujqpIZztI9hzWBBrOUqmBh1yk8ALUaaWX1Ebg==,iv:z6V0fdt6X2nKF8CCKTuoKW/AfXAHDL9K0kJq/P+2HM0=,tag:sy5Zxpwdksv+EAw4QRVRNQ==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age19vzypddhexvvsf8xylstxc9znnkd8rxmamhjlt7elvz4j3zaf5tqqura6f - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrcEFLRVlCazhDL1VXem5T - ZGN4TjBYV1NQaDlaUFRFUFRVcHBnQUhrbFdZClA5YXNaQ3oxcFBsNVN0bk1hQVFh - WTE2L1dSbFdNMXZkVzlMUHFmVXIrWU0KLS0tIFUrR2hMSjRwYWtTNWNjVjVOL0VN - ZG9SRFFwZWJ3R3ViV05iV2kxeFJhRzgKxyUDqPLHkasbc16QfqLaCnwUdqMON290 - U8giIthb9HCcfOeAAzResXIlcEuAErilm1rwOqv9qYk5XByXBiiUGA== - -----END AGE ENCRYPTED FILE----- - - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBON1l5a05VdjVub1h1ZDlJ - N1JYUlM1RFJSdmx3L3FwWTlzSG9oRHJIeWdRCnMvaDFTQjVUZ1dBMmpKSHRaOXd2 - Vnp2dzA3UDNKQWg4UktJWmtpdDFhL0EKLS0tIHlvbmVlK0NNSE5IYkhqU0F0aHJ4 - L1VEMnRsUmI5WGF6Vi9pZk42TmoyZlkKbG8GdQ0Dj5QWxw4qseVIa3vvFnnpH3tz - T/F3/KnytQIApgAO07I/9wpHXE8IvrFjv/v37zmcNit5JHBYxtGlkQ== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-10-13T08:47:20Z" - mac: ENC[AES256_GCM,data:6W8qt+aWcmQTCy9Vvy+0qjO2ylg8Yal8SunvYJ4nl09kXnEhR5rd49cTSLgY6QnD7LPrkIO1Qew0LLP3PY+4d7xyMV1RIZxN6lAlmVOZJpJMFC7AGKV/6zOYNkg2O0ETgeKo443ZDoBsgJaYkMu099PlSX1tyP8N9yhirQzw8ok=,iv:VuoCV3YEVrZdblqD/Qa9R3RgRvpFzxZmvF68MpiSJ+s=,tag:vcBh79ntKC6wR+z4VonLaw==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.9.1 diff --git a/secrets/shared.yaml b/secrets/shared.yaml deleted file mode 100644 index abbe71b2..00000000 --- a/secrets/shared.yaml +++ /dev/null @@ -1,92 +0,0 @@ -aws: - credentials: ENC[AES256_GCM,data:0WIbOiAsbSsunqvrQ5yj4TPQn9OYhlLaEUgTxCVNM41qVfYdY4PaA8Fe+K5XxY1Bj3HntBxh6THO/kptaQ/tPBA/v8qhsh4W58A1qP50c40XnuPIQ3000zL18bzCa1lJODaUpuZtE5XkrRXw9qag6A==,iv:AkmymudhWe2cEH3K4fcQULRZR4623qx6Qzqxh8RpZjw=,tag:5FM11uD6YJMT0kFANpdVmQ==,type:str] -ssh: - builder_id_ed25519: ENC[AES256_GCM,data:RLRS/BGrfl2BfcyV+o+rbHR5YPw4ImkOsGluFA9InKuI6yjH4JMVwIB4BNJ/cDlbkgkPe5qe1PylQlxFxKOX98ilDIwH4rQYiWEgJadMH0MjALp5Vfs6T0n9qMXCT6DS0ZleI6IaoaHwv9oXSKlsPp+TTZJ7g2nNVzL5+K2QYRZDS9WHr4vxxZK9kZk777/WGbCz2aQU5cO4DZwNa9pdKx06UGDpq9inFZ1/Fbf3otqpeILC+ZYEm7L+JhjWTGE4zk41JXU/bun/pnnvcpdklhHwQA8BycpyZJzmUaUCYyGPKGsvDytOKLJZj77HMY1azKcwodoaulzs9ivdU5S1sTJ3/SiaOwBjxzZSQKBZt7gncE62zGvYRBzFWp6ZRR+9i6JtYfyM33SCgdq6XuqZc+cT5R2EmQy17APHIwY8SsD4UhOMvSrQ3URzaPKY57Y3RmjqXld8jSkah+NoxXUm0kX2aCqVSXlXZk1gVHLdgsS0umwjIvHSEzBN0PRByIqS9eYPSfoQF+ONSLmh0u/xVmqdZy5Tmfh+SqRe,iv:VdyPX+tE7dKzINo5YWsCtyGrgB1aqK68ta18+xrlO3Q=,tag:SS99x35079rPWyJAbiIiFQ==,type:str] -tailscale: ENC[AES256_GCM,data:B1NUQc5UZ7+9FNNkIqEA2/Fs0/2pcRZE/VY85sDjizWBpuXkdmf0cBsaO7C9Kl1sff7bC8BQCtDWW5UUcw==,iv:bap3sG2et1L617jsPKlA2/w0PnsEAHlbN2CbzwWvKw8=,tag:WvFFKAbcH9OQtTswT3xDGQ==,type:str] -security: - restic: - env: ENC[AES256_GCM,data:dSmBm0lTFIPIHWTHmRv93DLytpK9lnmfCY6/AG9jbmzEIi5l0ATqpofLYcgL6cEHtVcA40R7TmlWfsYY3nqBLkai5zdJT4byWYxjLo/RZF/IlrB8vNAXOO8fo7mYV2E9cG7znkQfxlTg/H3xYxGoCC1t//gpvR8wKyVBzl3sYNHJ9dHUtlcetXggh0vNm6U96RBnR9Snp5Uhk47hhng8Wi91,iv:xvQNyjXrxfR0SBpFYp/2Q/cmSWZ0Ht4q1E0i/Y81iUs=,tag:9w/RhY0S4rzNnnCOY/8I/A==,type:str] - password: ENC[AES256_GCM,data:r7yyopCUB6VWkX/tzvM/4F/N0L0=,iv:i8C8ZhD9JlcUYwKL6hQklp06vjOusbwm9UaYFq/orMk=,tag:AfXy/aDDezC8uV3ob7HPLA==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1273ps5thcy70ckdt0270s2nysqgu48t38pq3wq975v3y7mf4eavsw38wsl - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLb2tncFhTZ01DbXYrSVhQ - b3dhYUxyaGNpa083aklWVmY5MmxSTTlJUGwwCmZDY2tFRW9JWjZPMHFtc2RpZXdQ - OERoL0tKOUZpSzM2MExvS1NhWVYzbDAKLS0tIHJ6NnpiMTZMaFBXVWp2TXduQVF3 - NWRvVlQ4aXBFMEtPci8wREh1ajl0SlEKQUdwD3R5erechijWL1hMQYUxG8MzMo+I - J4KJpMWF20Tloj6f24zChk7yVAq8R3r+qZnHr25WDxPHhPheYfEA3Q== - -----END AGE ENCRYPTED FILE----- - - recipient: age1p400545a482fma40yfgytu40p6wr5a75v4f8yeudvgf7eh5erufqxhgynr - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBoVmxGbE43aWtZYlVOdStB - MGdIM0tFdVJKRlNLM3EyaFJlblBCQUtHUFRBCmw3YmxmOFROWHdjUXNuZGxMSHA0 - cm9TYXo0bm9kNlNIc3VlUmNjU0E0OWcKLS0tIDFScTlNeStyYjlOU1lDcmg4YmNV - RGxBVEkyOFNjeGhyNU8vVDJ0WEx6ZnMKkbFzC4qNHM6beQPdAAGLGlQkWhC8gvUE - zQlWgvd/tUq4LBPGtsxIyBgeXcywamfghcTMoKKLH2ZOnpIPhbcetg== - -----END AGE ENCRYPTED FILE----- - - recipient: age1c7y687sxh428wk34s8ws6kemu62mggafpt40rmanevgkuj5xa59q6f7tlc - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUcHA2UzM4OWtTU1dXeHFX - amhNNXJGR0FzSlBwL09VSWlHMlpwVVdWTHdNCkwwNTkvRFFSUE1rYkovbVRmZzJy - K2NNWEE5RndYaDY5b2loa3FnMldGdlkKLS0tIDFGejEzUEtFSnlxbHNwQTRPOG52 - UGI5V2dQQWRUazBKZXZFckpjYnlOS1EKZBWTKR6AXdjf/ekOegXFMN4Ys45IEz7q - 9+cvNDhTz2KoUrGGk7lI8OaXYmhky/zPXx/LExOr57ivl8rTY/qhhA== - -----END AGE ENCRYPTED FILE----- - - recipient: age1elra3uklw8rmwkevqms2l4tsd06d5utqda9d2w4qvqpz898uzuesugxkhc - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmdzNRSlZEb0ZoWVZUZnBX - VjFGQVdiY3RtYnVLWisvUTcxdmpjSGIvR0RRCjVqaVE0N0RwMWRkeHd3SVRkZThI - T3pXOFpSaHIyMURCbjY3UFd2U1BtczAKLS0tIGJlaXVxTnhiS3FWK09kRTVlYktO - Mm1EZ212cXlwaGJ3QVpWTS81NG5EbkkKTKGDsNBQkeYkPj0Tcl1PM8c9m36O2Rp2 - FMPhOMJjdLjlQGZGc2nliDsIAkCkvJaKBw5Miw83w/2SAExotbqYMA== - -----END AGE ENCRYPTED FILE----- - - recipient: age1emv3kzvwgl36hgllrv7rlekqy3y3c6eztadl3lv09ks3z9vv6vdqw06yqa - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBta0t3bmRwS0ltMW5ERDE1 - U21oNW9jbTN5OThUWFk5aHhhdDNnckwzM0NrCmNZVFY5NmxRV3RFQldYS3V5REY0 - TWczUENCeGVwaGk5NklnclNCNHlmUUkKLS0tIGlmbHVzTFJYcjJOTGMySjR6NUNY - akFTYlJBZlRSR2p0YUdSN1J0MmlJVzQK/ifkaaTldmlcrXkgSnqgwgSn8BACq++V - V+oYS8TeLAjooEvRzOdHgkXNsUwQUMHvSjCVc4rwZQNF5h5kcQj5+A== - -----END AGE ENCRYPTED FILE----- - - recipient: age19vzypddhexvvsf8xylstxc9znnkd8rxmamhjlt7elvz4j3zaf5tqqura6f - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3RnVyOURXOW9OaTBkV3c3 - SCtkQUg2eTdkRXhSWTl0YmNPdmNiNm5URzNJCm11ajQ1V2ZJbTUxVmRNR0h6blFR - ZHQ1eGVvUnExdHNLSk1Wa3ZrSkZLYjQKLS0tIHNnbUY3WkY4VDM2TjM4ZW54bGF6 - akRzcXJlejlRK1pqdkxhbTdjWmtKbjQKyhehQno51yoVB/qnNZqD5p+ZHfKsvZS+ - UNzrUqpB43Odigb0tYBsyoTwgel+gEuHMwmEOUbvyHqYKMGYQMEgsg== - -----END AGE ENCRYPTED FILE----- - - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDWVJhbklsTFFNektEd0NC - QzQ5Y3B1bVVIUGwza1REMWxDdGFCNzFZSFM0CkVVaXRFdW8vd1ppWGsyclhKc1ZJ - SWVRd2ZvUWV6Rm9tTVI2c2hLV2xjTlUKLS0tIGNiT01WMlBGTXp4MEtCcnlhbnA1 - bmRQM1JGZGFZdHlvM2ZBTjFnYWpPVlkKLNAZyxI8/cLJIjBzZSyRMP3oplakUxqY - dEmmVnicrc8L95s9/F5jEX7ncna/e8E6271EU2MYicJo6Z5AG7ko/A== - -----END AGE ENCRYPTED FILE----- - - recipient: age1sqvl2cwvzeztuelpwppaestqufzeap8uf0vgy7t5mzr9rwc3dpxqhx8ly9 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxME5HYUoveWRscTcwdjlv - QklMc3hOOCs5Z1Z0amg1d2NGb3YvdFAyQkZZCmVRQ0xZYXFXbVVWY2Y1ZExESmg5 - ZTVkTmYwM3hJNXZmVFlBT0tHQWZCQ2MKLS0tIFdtQmY2cWs4MjlXd25HZmZnb0h3 - c3RUNzRscU16aU5KRGNlYnRqRGo5eDQKAtBjpzhJwhWFOfRCjbW86e63MlYAGDu+ - kGtYRWZdwfoqmNVCxAIGDvQxdUzX8OUyHNySHBuixTFAXVRNKWWxsw== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-06-26T18:06:02Z" - mac: ENC[AES256_GCM,data:yj0dpoNLC3O64uhLmWCCouUwbPZzGMQ2kReSNAc9tYxhu+xRjwxJxI3OSRdqZg4ganE3CCCLXnFp9MdQirmysPuP7Fr8t9AHY+nBafV9G6Qb8ZvfVHvrcNSStNCng8XPoGBs7Hp+I7EAOlQ27sLCKKML4Gca0qoD7DNz8L2xmGk=,iv:ESlvozOaYpqjEig9wCF1RRG/0N7VHCpwrNW7JMoJvCg=,tag:TnbKUfJrr8uc6O7Y6T6cQg==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.8.1 diff --git a/secrets/thinkrac.yaml b/secrets/thinkrac.yaml deleted file mode 100644 index 9a04b77d..00000000 --- a/secrets/thinkrac.yaml +++ /dev/null @@ -1,35 +0,0 @@ -email: - lotte@chir.rs: ENC[AES256_GCM,data:DPoDDQbm5pNgvBtSQcgiK/mMgA==,iv:kJ9ORC2g8cB4lcsiK1e9ayg1VqZu1fyyY8OQTqtgrDA=,tag:lGNUIc+SGlln5pyFL+8qew==,type:str] - mdelenk@hs-mittweida.de: ENC[AES256_GCM,data:UvZ9DhNpuug7I5iuzCbxNI2h2XONgFB+tiPDb/r66yUdIih+KoXVFxwCNo657qOpx7ZTVRICmYBCqr4Ss1hT2g==,iv:mFyT1sO1XDhihl5PCKFAvYc0MAAGdOOsY3ymOQAPMTU=,tag:76Adl9u/F+GjwBrqx/2a5A==,type:str] -password: - root: ENC[AES256_GCM,data:SVE6rKw9K8bqcrQ8UkeNyEIlQ+Gux8E+HCKwzEzChru+Vu63o7QuX7KnNQU2lsbkj71qSImWe1C8VfIA5p0aCji+/qmTsgoCoMRBD8WhSitUPPfX/lf+pMSi4ELE6BcT7qABGapbVMq5qA==,iv:js3Y3hf9PaU3YcB4SWpJTVHSCvY22iWK2VJG/r7AYVo=,tag:ahyFsIqKqT4oyMqUW0FNiA==,type:str] - darkkirb: ENC[AES256_GCM,data:qAIu2guIVloiuUR1WcIlzHgPZEfr5dGNZ4d8+0HJ5+XJpsoY0MHZC6djqhNhUREU3bYtmWg5vgR1HJzGUvTbYsswV6Nbrj9k02O4/uLsNV5S/QONgJBRvysbR/a2cfSzX8yCLoaFGqjUpA==,iv:pZEu7FSjCftASGRrXLRouTKkSNy5sOEbI7S2IOHLyn8=,tag:smk+1iamN0QN/MW4VmHGCQ==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1p400545a482fma40yfgytu40p6wr5a75v4f8yeudvgf7eh5erufqxhgynr - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYaDgwOHRTcjhEUWQzL2h2 - TFBZQWJuSUU5NC9lb0gvQXB3dDZndDFqSGxnCjJtT0t6V2Y0OFdESlBXZVlYdTVR - b2plbTBPTVVXVUNMWDEvOFJZWlpPSGcKLS0tIE15Yk5vQ21kajNqdkNXdmNUYWNM - UHFkYVR2ZitXdjBicThsMDVBOVY4Z3cKcfG3loFo3r9Al/1Yj/ap8gQ/M6/g+rzf - meTmOIOi4ijVgGsYSD/e2RqyiOiK6b6DcgDeg8biIh357RGUW2sT+Q== - -----END AGE ENCRYPTED FILE----- - - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBudmp2ejNwSm44cHNFcXUv - WUtPZFBiZUoxMmk0bzhxSkNxbDltVDM2MjNrCit6dUorZnBBK3FWRVNzclBIMXdn - OGtYNHZqUGhXem5NdDdKSi93SHF0SnMKLS0tIEFDbjdUNVFIMCtPN0dDcGRFWTlU - UjN1ZVlFUm1EU1dQMThHcXRybDhjOGcK47koE2OkHi83cIUFNwlhQPWUnUTsFnjk - Y4qNPZtp09TDqgGPqEqFfCvuf2JYSWXmTwXgcWDTbmfJJ72RXJpdZg== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-07-02T12:29:39Z" - mac: ENC[AES256_GCM,data:4uthXeFJm7aucUPlVOC9aUJ4R9efNMz83PDMDcJcW/qYO5FmX9MAFg7f2koos84e/QQcEUvozfYiLDKNTFBFAaGCfSkwu5X3MRVqhgsNufOvSSxJn1o18NX9GMjCFt5PRNlsshrh0xUrfryQ/LvKdkNrWT40sH4E/shn4j/WMjk=,iv:r+EPqNWjTOlPX2QBSi8RcUz4GI6yFHl9QTzZuVPDSEQ=,tag:kPKYM5GE8NP4TUBkqmygjg==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.8.1 diff --git a/secrets/vf2.yaml b/secrets/vf2.yaml deleted file mode 100644 index 7cb13b4d..00000000 --- a/secrets/vf2.yaml +++ /dev/null @@ -1,43 +0,0 @@ -email: - lotte@chir.rs: ENC[AES256_GCM,data:jWobs2R/SHBOrv31uw9PpDujxQ==,iv:sBrd1V0o3J4J0FbhSTB4A+MTMFG3tPAYhjwOC8FLeLA=,tag:jpxgLAXgr93azDsV3Nlruw==,type:str] - mdelenk@hs-mittweida.de: ENC[AES256_GCM,data:H1bgLSnDYjiDWWCThKlN0ZKa9ut2V4qBMBnxSuKGUWYLTvf4z0evTuKyzwHcEX+fuJb6wpIvLCYtrCyFvZR5Dg==,iv:lAdASXv44/RfmIA0091Y84pkWBbl/3R5yFtXX1je5Xo=,tag:m8j6oVwi5lT4dTCqUrrnLQ==,type:str] -password: - root: ENC[AES256_GCM,data:X+nbtXzxgs4d6EvJnx32MJGFaiSbr39Nu7lS5p2duwqCMqviSMeGkfag6YIT+13ZDZPdQ1xoFEUPou9MWz2SLXztoUEKoEfnLoY/ysske7c+BKdjts+XmHwyum/EXk6D26utkLosOkrcHw==,iv:MZFv+boy5CwfaYOVL7BIJplMyeV1TtGlJ98DMuMaqL4=,tag:ZQBHX/RVkGALSRdwwQa12w==,type:str] - darkkirb: ENC[AES256_GCM,data:73zvBfMv+v5dMBK0zrBhkTrdVyhoePdzHBbMVTo8AWZO6V9mnKuSmItJW6wmOi8+OZsVqujzLB4h1ozhsGG1E2lnQ0IJIWTXsOJduThSpT14wm3xAF8rKCnHCLLv9iSqFSYpkVCODtK6aA==,iv:yeLUnYSPCSzy6wtX/JqDnErmZxBvBy1/IBbmYJlQ6kU=,tag:Jcg2i1DgmA+ZiZtmYY2oOQ==,type:str] -security: - restic: - password: ENC[AES256_GCM,data:SQEvYRlqnPTxpf2s0IIZpny6bZy3gmFYFGvTHdydjL1fjigiFgdJXeRY6GJaj2j+C0+NKcqXqYTWKmprz6DO4i1w6TR6zWyWr4bFLkHgzL68jCg40XrJnbimPKtGIB8XNAOHO4xvRZb/vRNm1AyPZjApFgcXz+7xOi8COH0wguvbYOSOKje4,iv:CKRZKq+mk52CrYftDvixff4RWTE6aOCrHjcXCbOB9hE=,tag:ssi2IghjpG7l8NtwrfRVdQ==,type:str] - acme: - dns: ENC[AES256_GCM,data:EepP/fwlvrUVFT2LuxFM+gLXjUXd+lAoGPZvGzG0MYXAlKYBD0l9pszjdNEQq+H6NcypiEJy8gAmBkVwS80LVDk5BEVLd39oqr2v3jzoqjzScSDH6I5EcCoZYprTXlKmWTAO3QlbuNW8uOQyJpS/eDSaOm5dZ1CP8kP8mSkgph7qr1lmQ1yNwwXIcTsZLtVeqm6bfRWfHuj9MyU+AB1auWzJtFySg/Kkind/YgCAABa4ISzJlc8j/B7QGK799E1x634PIGdJda74gj602entbsxagUvJ,iv:Lg/ixyAdXPC8SYy5Wsriv9hQPDwArSg4dDjde5YBBFg=,tag:XCQa5nrdUsU7nRBBm1/SMA==,type:str] - cloudflare: ENC[AES256_GCM,data:qMP4N7W8MqGjxI7G4VeMH+IF3Pz8oB1CyFDjmqF3Bj2fImMpnXDf9dSumo8z5/5tUGpw27BgXqp22q0jaxNVZsIb/LZQUrxCoc0Z+rg8Ruc8GFxKPdzIp5qdKR+WJnaZIkdgDJ6az63dYYBfq8KNergYIbiEDrpHkvto/BPpyUAjjK7vf/q04HKG1/iOo5XxzT51ppIAsJxUufHQyhiCjSlohBMbvGOlL7sx+qayIDZEyo+IP1VG0t8=,iv:EYoB0aZw07YTY9r8YwLfAyEQKaaFtEDI3Rj5NlmhXyQ=,tag:FwwYzx0LI0GjerPUm0XIJw==,type:str] - gcloud.json: ENC[AES256_GCM,data:HYATRwW7qzB5b5caLjROFYLKgkSJreLHIkDUKOkXCkH+/CxN4A4ZKxsEg4WdwKVEUqXXOl33D4/HtMgLWRbp2NPMstKsKinNRl7EEzpyOnuup2GMXDfNcbruDzJroF1ucIOe3Q6VkXbOG9E3dhcX/QDY+FhgcE0D/Uckh7062LiRYTWvrcvBU3ewoiwTbt8zSW4XtSHow2RO9Dx7OgxIQbmEQDL+L/xD9dVw5ryPCg7xo9q1Mgeolnv4K+m0E/TTHeU1VWoK3j69TPd+fReEbQwpM/LqV2HUhaq2rgrewp4sfZhpyE/P+7kHcoKutZqWQDJ+j6dp+rI0ZrfDG0ULOHqRuUERQujtbayJt3rEkkG9fbnR139bgOwsEJsf2n/tYn8GD9ZeKgMSEyGl2tcPnsEn1aPrN+uGew1kF0iZn0Qk9Rf9ufsJyqpkPDNgr0v2OU4UeYpQ3TbLlNSLZmy5c+2mt8Bw/VdUPttdjbSAt2ZRtAX1x41gSDluaNKBMgZRhPnXB9LxoRj6yoTjvK8r3GWxnhp7FQJfc2dED3LHplGs/PRj2SRsCSumnahYrGYe6FO0zTIQABRQjcTb2hVUy/FJCT5o9P8TY7IKOqOSIlPZRSxRWfmOGLbU0ml/msqhylBFh52dEzQXzsrLOdabM6dRMXgg1qs02LLcVKJYD0M9Def9WRUlJxs3py4IEOTofAHSIN/EcgH7XlWAxFqQjRsq2m525oen0T0FPGrAGLk1MVDd3XwQlIsgoxIFhGrQAa5GFMpMkQIrDTUADvdwA8+TXUFeGIrRx2PGIRAX+vD43SFtJDiIAd6D/gehZhSl8aL5105hw7GPHN7R/EKaAFnQZuAMHaDEPOeoGQ3lIgsi9bFPRPyTLvhxH23srTCnLp+jLqms4lYK+6E/W/2UGjXwWo1RILQ9pkPkFQIjNN+VSK5mhOnZhXBb2ibAzGrfG8lxye0KMmx5FCs47HpMe0gEwXnrhCfCbj66d1OqZsEFvQoypXnlPqUJqSIG31jUkQYThblfOL4b+DuZsxGqXo3tJtMrmRGJ1d/q6HimR31KAm2NaYuDD0LlZFaf01A01lNuHHNNc6nKlXnnUAaLY0XD6PjzfRywjoIDpL1myhGKJXeLMdNDgAHZSBPAEsh5HUW06Io+JLWE0KM1VzG7slh3tl3vzno2lzMpgpn6ce34vuhVpg1Ca08f1ZVIHDj8HyZ3UooUV/9r6uSKiUY2EspNeKUGZzbxSb4lXHyxXRskxUtDW4ImTHIlhKtbvi32VxT2w/y3ngKmVBdnBbpsJ0Axbje5neS6wEpxSMMMwqusLLREC1o/lr2tFFAGOIeeCe3R77zpknDhAnnQvrX6OEEe391qUyT8XgSIo2pee/TZUewkArBCesub6okHuKf2fmHgktPE3eXXkJeq/FV67lhdEhQ3PeU/owXHmstQKzxW9qgka0i9vryMXCx53KQO2ECwBs3SEZ5R6MKnEs34p4nT86fE7U0frd5z+jpQ1eiwjwfmLfWnmW9e7zctW3nNbmNFJKjezImPtxFOrYr7DS3vJ2yxldndhsXGVt9gp/WnYs90woGDR/1J49g1GSvoJiF+G6qChIv+tNN1LlERH1Pg3pQoAVV3IxrCKkqadmn62Mc+btAxnUQPDPlzvXlMKSIhA3V5/tgheX+SR74gIPu0CEj8MnJrSpsF3rHsP8Oz7tFpd5fhGIkoAMXT5HXulzqJBy52iYXjsy+ih9Aj/+zAWjnWv6OnTiYVrqpy8AnA1Go81sSQ3qvxjTMb/VWnyzzOzgS+dab9vyZGh/PBYUE48LBgAhrk/T7rk2NuLL8diodkDr+0xYyTKOi6vW0YyfOdJZFUB8PU6UbSFOnSkOgzxXOcJ90yPbl+ukMBafNwKomKbdrzR7nrIhiFG+JfNKyB0di9CcmyZfpqbL0PtBlSxrYZCpZXzyCDcie8UF8UETkQyjXYkvs6yqrv6ksMS3rBVLW5Kfmh6H5xF/ZJzGRotjfGcprF64wolaSvan5LvDOeUlN9zll83QfNIoMFp0cpgje4EuJav53Nl++b5o9F4gJi2QgKMKaNlVrHyRTTba5VRAaQ6XgSvshedScY5sh9xYa/+6mpfez20/YtHTJVMyPM5mJGTPN7X4rvUfc+eJPyiD9YuZi20YCOWzeeYxw6N4vPs7xNSA2qNokackRP1i6czVKRA3wwIIj01Fh6ZHfaG35ELlAc51/vjvqq5wJZbF3H1u63JKoloEqA/bAry9J8cyG6B3ptfYJ7mIpjaGGPS/HsyqEal9ymtQYSCrrBWfOP5lAztfoYyQdPQVsaQzLb8oesxcFt28xC96ithWTgVlmqFo45yCbReSbwUj5Pb0qzTvLz3pGOUlL8+vZ3skLhqWt/AEo60NCUQ2okI9jqDUfSQCHXpnVbHQA1zrwo9VPZFukgtN0yBMqfBfWvNubvx0qfQOU6GbggbVLxJdTq54XqFzm4MQj1rEtUcqS4Ryg/bfZFvRoP9u0aeXKwDJIO70kghuDCdX+kskcC3RZG+Ml0Md0L1KJfXlMohpPq23F7HsqdKeLkFeOIUR4H4UJzBF/ZaM8kYy4ejNz7q9UOuuEiskiCuCm/A817MjAM0MzMOeYFgSRIryMs51e6xzuBQbYFWYcB+tNF2Y5OZOnBFTXNL9IdgjFvmdklo6Nrj1DRC5RD2b/vs3Mk/8x82yytS1YB5SjVw8b5gcpujijKTx67KRHJYxGvidwNbYibXFTlYy3/l/WKmB7EbB/visFjVsXYgPZYgwjxM06nUQbvR48Osvn/nCSXKLyNemA7bCN/QFUQHUtxrDSwle4oG+RmrGWAzsIVWbFj/5aWDOdGFebqrVHeUdbQVuIkpYQxYADpDIoyobtDTbnHD3e/ZDKZPoZiPT8zj72tWvdsCIFurZorW/TVai+S4oKOcwN/D96bWDHwEnwP0ZoFrub46n6WU5KIX0rVdA0E0B7JZFVmVjljo6/z8gNUyG8b5sxrcG8ryogym9q49tTQVNqZ6+Tt3EpwtY0VIgOHxQY9Zl3PPkUWBk1KZQ+AJyv1vGlEbt8f1xBXLiPeVSiSv24S29g1fLrxFxZ5yPjiKH9CYERuSUo=,iv:CVPtTIwuCKByPDqblYZypJcjhivZnkdyPppaICPSxqw=,tag:32DGIKm9nACw2FZXrFZuJw==,type:str] - gcloud: ENC[AES256_GCM,data:iIu4JXd/FHzbbZ0lmDNooY5AMJVicbnbQGIuzOORYqRg4azwrrzTCGgiNTWrsbKvNzlFq5yUVWuxAHjadvR1,iv:/YDkECalGREPYdN1noP25jH6fEb12Bbx4Y9tgSiF4vc=,tag:Ae2PDbU1q0aElFcpr/c49A==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1emv3kzvwgl36hgllrv7rlekqy3y3c6eztadl3lv09ks3z9vv6vdqw06yqa - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwQTEwWGdtRWV1em54NmRp - eWhxdnlUU2dyQ1RtVHg1eDBmQWdheFVWdFJrCmVvVFBQbWhLZlQ0VHVzcWxBYS9F - NW12ZENTZDVpbE9vK2tJcnFXTDFXRTAKLS0tIG9RbUJtY3V4VHVXZ2Y2eHFCMGlP - RDB5eFMrTEVCajRKZzBvUW9QTlNMRm8Ka1oD6nlKG3xEbilN5BFqsIAne7AOLMSh - RRiZavoergIKKisnM0eUv6QFZA+pF2J3vExceqLdbiWj4wJ15WQb/w== - -----END AGE ENCRYPTED FILE----- - - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2Nkl3c3RlaDlDOWRXVSt3 - REZuUmhVMS8rdXl3RmZsd3l4eC9Fa25Ba21jCmNRV1U2eDcvc3A3aW5KVmtBV0JQ - V3hxc0luSVV3aVBSVEpQWmhQL0g3NnMKLS0tIC9maGdTSkMrYVpVTkdCTDRqL2tz - N2RGNnRGZjFCRkZqcEhqSnhvaTdlYjAKyrcRs5y2k1QvUzhF2EpiNBBeBxLWOzlP - Z+lRmfe8p58vB+czvQFdIS1nuWRNDOZnqH85eZ3OioCPgTtlXuGyvA== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-07-02T13:52:37Z" - mac: ENC[AES256_GCM,data:5ynmIyDk60DaH5iTqDWiD33CYO8O9AS5YSxio1uqpfNxhF4vNCkpYaxZaz5CjVP/zOUTmbHEWa+ZFgj0XAugj3pTwpXDHhOX+nAS9f6038/12yvbNCGYi/CVDnGHzRusVW8fXhCw1A3/sJTrZDj1S2odTLV8o/W2D5OKzI/CY0A=,iv:VbY6Vqyh3yv702xdXn58ufy2hVxpABX23QwCah0bYNk=,tag:W6BFAkLGX/ekNDdIfH6u9A==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.8.1 diff --git a/services/desktop/default.nix b/services/desktop/default.nix new file mode 100644 index 00000000..f78362a9 --- /dev/null +++ b/services/desktop/default.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + imports = [ + ./kdeconnect.nix + ./gpg + ./waypipe.nix + ]; +} diff --git a/services/desktop/gpg/default.nix b/services/desktop/gpg/default.nix new file mode 100644 index 00000000..8855a59b --- /dev/null +++ b/services/desktop/gpg/default.nix @@ -0,0 +1,60 @@ +{ + config, + pkgs, + lib, + ... +}: +{ + programs.gpg = { + enable = true; + homedir = "${config.xdg.dataHome}/gnupg"; + mutableKeys = false; + mutableTrust = false; + scdaemonSettings.disable-ccid = true; + publicKeys = [ + { + source = ./keys/0xB4E3D4801C49EC5E.asc; + trust = "ultimate"; + } + ]; + }; + services.gpg-agent = { + enable = true; + enableSshSupport = true; + pinentryPackage = pkgs.pinentry-qt; + enableExtraSocket = true; + }; + sops.secrets."pgp/0xB4E3D4801C49EC5E.asc".sopsFile = ./privkey.yaml; + systemd.user.services.import-gpg-privkey = { + Unit = { + Description = "Imports the GPG private key"; + Wants = [ "sops-nix.service" ]; + After = [ "sops-nix.service" ]; + }; + Service = { + Type = "oneshot"; + Environment = "GNUPGHOME=${config.programs.gpg.homedir}"; + ExecStart = pkgs.writeScript "import-gpg-privkey" '' + #!${pkgs.bash}/bin/bash + ${config.programs.gpg.package}/bin/gpg --import ${ + config.sops.secrets."pgp/0xB4E3D4801C49EC5E.asc".path + } + ${config.programs.gpg.package}/bin/gpg --card-status + ''; + }; + Install.WantedBy = [ "graphical-session-pre.target" ]; + }; + programs.fish.loginShellInit = "gpgconf --launch gpg-agent"; + systemd.user.services.link-gnupg-sockets = { + Unit = { + Description = "link gnupg sockets from /run to /home"; + }; + Service = { + Type = "oneshot"; + ExecStart = "${pkgs.coreutils}/bin/ln -Tfs /run/user/%U/gnupg %h/.local/state/gnupg"; + ExecStop = "${pkgs.coreutils}/bin/rm $HOME/.local/state/gnupg"; + RemainAfterExit = true; + }; + Install.WantedBy = [ "default.target" ]; + }; +} diff --git a/services/desktop/gpg/keys/0xB4E3D4801C49EC5E.asc b/services/desktop/gpg/keys/0xB4E3D4801C49EC5E.asc new file mode 100644 index 00000000..13389d6a --- /dev/null +++ b/services/desktop/gpg/keys/0xB4E3D4801C49EC5E.asc @@ -0,0 +1,48 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEYfph3hYJKwYBBAHaRw8BAQdAWYTcPt/iW5HydB1kBRgUk9yDIvp6iwYu8zVB +yRsLPEi0JUNoYXJsb3R0ZSDwn6adIERlbGVuayA8bG90dGVAY2hpci5ycz6IzwQT +FgoAdwIbAQQLCQgHBBUKCQgFFgIDAQACHgUCF4ACGQEWIQTvXzZ6leC/pjkC2Gq0 +49SAHEnsXgUCZElLLz0UgAAAAAAQACRwcm9vZkBhcmlhZG5lLmlkaHR0cHM6Ly9h +a2tvLmNoaXIucnMvdXNlcnMvY2hhcmxvdHRlAAoJELTj1IAcSexexHYA/2t1Rgmb +NXXBO+pmwII+EDIsOe1ZGI5lY1i6fXgq5c5iAQC2HqBXBv/E0ZJkQwaXLM3s+axP +o38TImzETJKT3Ja/D4kCMwQQAQoAHRYhBCBtpeHaCQS27kkWujzvXdqRWuywBQJh ++mNQAAoJEDzvXdqRWuywotIP/3jCrxmP1q65BSx305uHGpt0Yn9X01xq0OBCCbBg +8GRfdCYCFi1QzNcZwcrNZm71TR4gr5r0ZdZECHtm8AQe3nMtD9MJhsnku8qrMIwl +Y/HFgtZcQToMQgd3tDciMnBLLQhsNsW2gePN/REgHbq0VRNQX4UvwN9u+4Odp+W6 +aOuG4mx/t0SHPvftsLn7DTP0/tIHQT6iWtIqfqtWtuxL7SLrzKzRWuNmYGKwgx7g +cmg4aBEBBpTQxx8aokPtcV90GTx6oU4gKaZsDuHkHERKggJZqZJNpuiJio45yvOC +Ht/7UwpSJI/WL4bvN8S9ecSRGiweillZlk/fQe9Rmok7NOsn2lA0Jpvj5UngqiSe +dqKfcDcgNRPXoc6aZYZV97Vddttploa93MG50DGjEUERX9vxwU0YcxmmvfNoH07M +Exp2eGlNImCGnlTyP7CLHnhfb9GeH63dKCkmYNNzP9p0f/HDPzSWCCFCGXz915nn +ZiJag/4bu4j+iDkXb0qYWCE8YQnCyDJjFbno7mzmyZdzRxdAt1UtLs0JjV6r3M5r +biH59aOgLjG1Co7ZbWj6tcQsgT+40GceiyMEva1eOm+lYjJnB2GQBCyeFhipnZTa +3yUeA86gKNjGwRGhqeQHpkuJeQkbwuYpY2p7scn5wAmn6tuJbup/7hBYjRXcTcat +/G/ziJEEExYKADkCGwEECwkIBwQVCgkIBRYCAwEAAh4FAheAFiEE7182epXgv6Y5 +AthqtOPUgBxJ7F4FAmH6ZEgCGQEACgkQtOPUgBxJ7F7MbQEA28gNr8W5c2qiAEp1 +gd7MWXU7/XDA1T7KB0gT4zikePwA/irn7tpqLyZC4d+N8gF2950qMt9h+t6kamc+ +GtEyF6UDtCxDaGFybG90dGUg8J+mnSBEZWxlbmsgPGRhcmtraXJiQGRhcmtraXJi +LmRlPojMBBMWCgB0AhsBBAsJCAcEFQoJCAUWAgMBAAIeBQIXgBYhBO9fNnqV4L+m +OQLYarTj1IAcSexeBQJkSUsvPRSAAAAAABAAJHByb29mQGFyaWFkbmUuaWRodHRw +czovL2Fra28uY2hpci5ycy91c2Vycy9jaGFybG90dGUACgkQtOPUgBxJ7F6llAD/ +U6oyWWt+QXgnlfivMe2EprjR3XlNDTkA7qYwEHsFmJIA/AyWeaRoJWQKc/U7BaO2 +cCAOm8cZc0ANLuPX8Mz5FZ4OiI4EExYKADYWIQTvXzZ6leC/pjkC2Gq049SAHEns +XgUCYfpkLQIbAQQLCQgHBBUKCQgFFgIDAQACHgUCF4AACgkQtOPUgBxJ7F6SCwD/ +S4pvjaU3c6Ov9LiETafcQnGOoyo1ATknphL5H2agh0UBAOPmX3T7NrWepQVJt4Nc +Qp3Nuggqqw3xPjqjrOpPnHAOuDMEYfpjyRYJKwYBBAHaRw8BAQdAPNDxa/Ee1Ovc +aJiFJb3HNGKjVZBepXDN0gX9CTYEVj+I9QQYFgoAJgIbAhYhBO9fNnqV4L+mOQLY +arTj1IAcSexeBQJnPutvBQkHJbsmAIF2IAQZFgoAHRYhBC79cu8hxFgw7HriU6sr +2Nry43EiBQJh+mPJAAoJEKsr2Nry43Ei4NYA/AsOyJgBZq6MET81FjAa16fZWlAC +dGxqNMEv2XVtsp7PAQCTNdttTShA84S/ZY5znPZQMxGtdDpVnXI+oQm8fkgRDwkQ +tOPUgBxJ7F7bkQEA/LYsodtgoK47nrJtPSTESMnQcyO+9U8f9bLgffs+MVMBAP5m +X19Mmq6x++GuMsTNk9SHZccuIZwodfLuHYV2fVIFuDgEYfpj6hIKKwYBBAGXVQEF +AQEHQMcqCbS7zlaE56jD3Dwk+/ty58wLxolO9Uw6j31UsnoOAwEIB4h+BBgWCgAm +AhsMFiEE7182epXgv6Y5AthqtOPUgBxJ7F4FAmc+628FCQcluwUACgkQtOPUgBxJ +7F4PkwD/QwITag2hM3yL9YuOjCD7/mWIVt/i39RgTgb7czN/OeEA/3v2NVVHwfBu +UQkC4h07SFLAysIiosQaEGamnyLim2QPuDMEYfpkABYJKwYBBAHaRw8BAQdAUWJh +OMgwfpjMCtNYyNPyviKMsN5N1EB6R6NET9b+cseIfgQYFgoAJgIbIBYhBO9fNnqV +4L+mOQLYarTj1IAcSexeBQJnPutvBQkHJbrvAAoJELTj1IAcSexereMBALbxvn97 +a1RA7bU0g2C05CTkcArsm63ugmBq/fztsEnUAP9xmlZgD4TUuxQfEhPnzE8Zdw++ +3a97jNjZSnYc0NxGBA== +=VnTl +-----END PGP PUBLIC KEY BLOCK----- \ No newline at end of file diff --git a/services/desktop/gpg/privkey.yaml b/services/desktop/gpg/privkey.yaml new file mode 100644 index 00000000..954d7ac9 --- /dev/null +++ b/services/desktop/gpg/privkey.yaml @@ -0,0 +1,31 @@ +pgp: + 0xB4E3D4801C49EC5E.asc: ENC[AES256_GCM,data:eGvKzysZy46FNrjfuDHUXidvAsAnyAszGMSlk2KVu8T9UjjT/KMta1Ys9wgfGn3MVm8SUhohprdR31R83l2+2FqNaRVcYNRhvsfrGUtmsPEC1346D0D3nxIcu33Pv7eROnIc7AaAcf+j2rHeqCyaSDS3Uwdx8oyl/ceiTaAzlohoDfPo43b5uetaCWH4KSdK2LKmrisOymrD4qrhgtFgpaIV6c3GfjrRG0uHczpoMOEje19IyenfF6uaIVSuXEjZqfi9dazFF3RtEpeNA4+oS29iKoY1zF2zj5uX10HlKrC+caiiJ7vO+yLt47jjYu2TbbbRgNR4AkMsxoW78EwBIHWKWp59q1mJV6uNL7Xjrxhq9qKxfcv08RHlk5jhM7Fy6/3pgAmhv/DuiIF3zWpaD1h4JJA+WMeoYb0N2npaW6mVUn61dIArbTxlxUxhtIPbxCa7cRqCe/YWrnFbca4aeSIgId8T46sN+Iv2O5yI9BZJabC8rfgQcESNUOJMbeCoQZR2+XCYnB1mo6Elh1mAeqIsaXRtSHzuWboIb9D6f9yY2KEousx6dskXor++LEQL4+z0POOIdjeS3m1F8SJBJ46aFIis57rls7sQs7bjeIrSjI8aWGCPwoSLIUe8Yv9leOnkijy3mzq75SAQ984nmuhByNXs9rfQZ038ZtK9RaafASZwuURErD2+h2ZHElU5BieI6Zd6r1efOe2NG4BD2bI0nghF7CG30A0KeiS3Gh+Xb65LooMZ/BKkYLiMEGvT9fJeCVLCMyDK+dUGSZgjdkG9nyosYyWxqSGo8eTSQWTnS2bwoBI2sHyd7/NvJ0rQeq6VhUa/S9jygNfp60/W6GN+kmLFv1yhkhjhvyXM7iyqabaZqf9DJnD7UpDg1h4faMEvWSS2sEjrUvZm4FGEn/k3yS0WiXzCqj6/TeuSjQbjsgC102Si2ULSwIy2wGYfPZLFRO/I55nGK/Vxx+/KePWBif0wJ7r5PdICiR6LVcDhF+ZXjPLvg4HsxhuPaBl1hHDuB6/0ZMX2b+3EWPzw2kwvBdzte1lr01cRq/tj1Xx1aecPNr+/l+yACrDyf3X2Mshuk+ad8eP1BvaIcNT5pFADXqcY5okavUHrhIU0lGf6WytFDa/aOX9z5IZG2CPmZ7ACyrJMDl+ESCC5WWinSBq83vHmxQYlqyRs0lPYQObbqGvT91GCDhqB/T86CMiJf/z1BlqDIIsTjBJE6328KAEv364d1fjAJG1Cws98lRqcaTNgnhfYJ7LLVY4GPXVrOhoUumH7NaeSWhDEYehproEIcu/SmOWWzG4o1UGePf2rH3l7zdWtVImIXN7g8G4YwY/zAfoUtn0KBpJVp0ZcnklpwZs4nfpvN0DBtAPn0toozEF4fyXjzbTK8bU7UZ/zpKvmea/5WaV9SyESb/A9AJPq9teui0A9u/DxKQx7SHtR1a5w8ysTsBAAzWswbgDUHxE3V6leCTjR5GvSofLDIuygyQCZ/IMu52EckDhf0cesfydLzyt0sm89/0s/B0mvAeQR/pQl86vuPMuJdpy7VrGeLpbWAFYNTwxDteaZXRGsJudRnm0UGrchhjU6jBeiIvpOi2I6TucjyNWdMOnHx1zBnJchZ87g1QWIqQ9RHCgVWhaDY76q/yvDlbdwmo7c5XSnIx7pHuCSvR2khi8yE3K2NImgL+S12qU0QtHXd3XPAD/+QpNOprc5y1pY4rHoT5WcOsrMBI4NxixGDJb2Ovzd1NxIXmX0qSuiP/AuyWNg763dBi0KDI0DHZM7QE855VGZKSemaaLs8M4w1cEo3oDzVFO9Pt+UFzxhp10AyeY65IhYmPEpQ1YFgQvqKg4SfWPGE2x0jJ25hRrAqJx26aSVybKEnm3zne+OSZT4E/E7fUvZr/+evxGOTzA92TJjxECRqoAOBTXaVoUcbEOcShT8bgGj0IkTsVYAESUAngzi2/vNLdwxLuDlYbPDF2JEdKZRS4vmcvy7kM9URXF7U1WrphFYmJnHDC7LLyBdzJMg49HDEgmgAiYk9f7zb/9A/NExsxFOq/PoqD3oyQzV+l7xSiBLXRs0uw8JqzF59TNK1XCEsru0U0zyWRN789tun0TNoQR6SyV1jeymsQC4tKUYvXucPsQObokF9OB8VlfIcLZ7omSymOjfWXM2ux2Qcxgmy12rnpFxTBIhB9zRXTBiUPlt+XM5EwEv4ys2q4g7Gs/vYgMT2a9tnI8I4pyCJKItsNbn0mrk6JEojiSn+HnXEbM79DCPpxGUXHMor7BkxHPoBCu6kwde5Igr6126z70dMkxwY2tOI+SghTojbkFRMmVJ8yrgBZB6cu0eSr86yH/uX6UtXfQx809TcQix2seSBqO7r31MLVfhRV+v5e3OT4QXV9EaAOrfGIM0dzkvceq96HgOogxYhr6krQbF61fpebcwNBHaUDs//f34PefykE8RLkza8HcCGsr62YM2yPxXhU0cEaimfhDJ1Qgi6rjnGY8QfxRQPUwmdscWfYnIsAPPoiTQ//up6XEewFqKE9AordPy53fpW6j0xNojyz4FqexgC/zBAxO7j2STSPf3J9A4PJlamEBrbE7XatBAOFhHN1JZUZYSlDc/FHJO/5A/FoELPG3kHzQ/uLG0tGZPqsSP4y5RPz+vmP2CzCl3tzrC7doQJ3kStXzGk8IMc8Ix6XiBrIxNlZacbxUiO65qC5n/7OrSGTQ9SDD7N8IKyfNDHVabtPHLWoR6QvaFyCnyqthOOsAyvPUKu6M4af8wNaSXvHM1jCRYKvaTVLgcIzscV+NVYSMnd+JdGtEWLQs804pa9EKFqK7G7fVJlSkr78jwTpVmkVY2j3JCIjlgXAP0XCxz8KL5XNKlPUZAFwqS17XvgmaLA6FLv8sv0Qare9jtYp9bR70B9G6tzZ6StnR0+nNJI6br8jsaSVD2UycH64V1PaqT5cyNA0K/+fdb5qRWCFUxQuBk5cDq6TLxtVYcN38a1HQzM7Vrsw0XEblKjesAgwN3aKeCpagTKwLA0ruhtUPPoHsmM/b6vNB54lBAbDVkVIJdd7NylUmIJjXjPV9pjH1BH9q7wUIAiXQJwKcuIPnwiywblye2iuqkxX//aLkaMSJqlzIbINbyg1YGxo7KOfX8uSPD2ZTH1C2QzCdU+yQhDY90hSIy0dFQJhHuEujDP09tUZIUJege7BTvUzWtlTStX9rUi3uii9bxv/szlQrhFE2ltoTN0arhLtzcRXkLRjDUkw0tmHP7Ah3kwJfV3mBc156pcFPDt9Ay8VOUqiTn3P2gL23oFL3EV0DrZ/xiPrrP3x8q+ELqM6vDpJkUhEIKPLB+YfmqYH9WGB/fZNtMFhx9HdXXXO1Ylc9adyGnOS3qTqrosfhfEfi3bxQ07VlpDDwtBbd3pXwJGjNj+v8pNCaxccVUdG+q/7z6u4kdG2UDRv09HanC2fvr2ylr0/QIDdMTD+ka81ZK/CuB1D5O0CxOr0sncYmy3xTjppLBGsrF3AdIZ0dQskBfajtfaihbBygFcLtq2GudWNXbhzEy6w36Uq/urQCrCGGjDTpmjDlzUSPm/Uac6WXa02aJ8nj7PAMdX176OYO4zcOk0TWBx6PFB9xaIX37rEm8q1TDM0UCuGXqgqKMlbo7vip8oPxMqNRdNsQiLUQlRRpo4xVDwTIXQE3RRSGXeCfOEbSpRVSw3fuVL/85gL+0nW1e+iTNjZTOMdFwYgKAlVF8or3A0yeGcLuTU0uBRFoEpb9ab1d2uaGiQC3CSyRj8CdJ7SHrNulUzKfK4GKd55MkfFuP6hqZW4LTvX0ZGjAdyhj6dXlKQetFjYZDW5b8UoJYQhFAtjzbJj+9PmpFMPwU7HwrpJskmDGsdLZlBCxPBw/kpkw/GSUMVqRKcajQ71M0UxkmHHXERho3x2Lwieahb9cAmbkySUPSlBiqct/0n0EP5GAkXsrZCVgIxnZ1cutbIFTAjDr5+F/UhzKtqEupbF5WXgyZKi5K8nRA5yjpBybVpKgcfLdm4VF+wKl/h0UkVMdk+3F2E1A14EMB9e2aDKI=,iv:DXDK1KJ5TVIaz43GZEYEQRX/KYhV79hpu9RB6BdqP58=,tag:c2cbvykpswWiuVmtnoQ1Ww==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhQ1Q1YjB6V09UZzNZeE1Z + c2tNZFoyZ0xnWUV4NDVjRC9WS1lPcE8rMDJzCnF1ZFJvZEhLM09XeHZESTFla0ow + c0srSGRtdnBLSytqT1ZQNzh6MjR6MEUKLS0tIHZxdktjMnhDUnpFRFV6TDdHTWtN + QjQzempqdGloNnBIT1gzM0ZHUUwwVHMKzu/dHJ30SM1u8iAcAUFET2R4MImrxXyb + oaysw2RJzhb+THz+bnyeP+eH6kXcvg6tvzdESd/QOXQzbE5iraG5eg== + -----END AGE ENCRYPTED FILE----- + - recipient: age15g6tzvcmcp3ae4hwnn4pwewat6eq9unlhtjrlaka6rf94ej9dd5qqpgt7u + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBncThtZS9Ea0wrek94S1Nq + eWVEbEpvMWpGMW9UUGh6U1JYOGFndDY5NG5JClNPVVlsblFjQXJqcjgwdi91TWxP + UFdCcU5hZE4xbW5aNXYvN3M3bFZ6bGsKLS0tIFE0TGx5azNPYXF2MWdsNHpoMzhM + cnM5SGg1TEkrN1dCOEZWbElaVEFzNlkKzHjTkcZmcqxwfwExMH3fnNIesvy6y8N7 + aSqPXsd2xo6yc2TNTh1ufvpKOwR6HB5q9AT1Dnpyrrmn0MwPdIHQEQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-11-21T08:13:09Z" + mac: ENC[AES256_GCM,data:bn1lA00v4gQqJ5rySjOmNVOGKTuJIsQ7YBiVMhvIwrKI58KjRENYUCGTxqHkfLYFUr7JpP6fCVgw6vOwe6UGc17p4aFAnERBzKZlo9FPQFYuZ0Kgjacv+QRX5Ie9DR1a6yF6mVJ8Fcub9TH9tL6lHd4Z28MSuVHQgnV8ajVYd5c=,iv:KyVVUITsTCeq+slNOtrWY8NrXzDaCPSrF2C6K9AmBzo=,tag:mSGLiTnlTysQKPUL/8JSDg==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.1 diff --git a/services/desktop/kdeconnect.nix b/services/desktop/kdeconnect.nix new file mode 100644 index 00000000..2f3655e3 --- /dev/null +++ b/services/desktop/kdeconnect.nix @@ -0,0 +1,11 @@ +{ pkgs, ... }: +{ + services.kdeconnect = { + enable = true; + indicator = true; + package = pkgs.kdePackages.kdeconnect-kde; + }; + home.persistence.default.directories = [ + ".config/kdeconnect" + ]; +} diff --git a/services/desktop/waypipe.nix b/services/desktop/waypipe.nix new file mode 100644 index 00000000..54ab442e --- /dev/null +++ b/services/desktop/waypipe.nix @@ -0,0 +1,25 @@ +{ pkgs, lib, ... }: +{ + home.packages = [ pkgs.waypipe ]; + systemd.user.services = { + waypipe-client = { + Unit.Description = "Runs waypipe on startup to support SSH forwarding"; + Service = { + ExecStartPre = "${lib.getExe' pkgs.coreutils "mkdir"} %h/.local/state/waypipe -p"; + ExecStart = "${lib.getExe pkgs.waypipe} --socket %h/.local/state/waypipe/client.sock client"; + ExecStopPost = "${lib.getExe' pkgs.coreutils "rm"} -f %h/.local/state/waypipe/client.sock"; + }; + Install.WantedBy = [ "graphical-session.target" ]; + }; + waypipe-server = { + Unit.Description = "Runs waypipe on startup to support SSH forwarding"; + Service = { + Type = "simple"; + ExecStartPre = "${lib.getExe' pkgs.coreutils "mkdir"} %h/.local/state/waypipe -p"; + ExecStart = "${lib.getExe pkgs.waypipe} --socket %h/.local/state/waypipe/server.sock --title-prefix '[%H] ' --login-shell --display wayland-waypipe server -- ${lib.getExe' pkgs.coreutils "sleep"} infinity"; + ExecStopPost = "${lib.getExe' pkgs.coreutils "rm"} -f %h/.local/state/waypipe/server.sock %t/wayland-waypipe"; + }; + Install.WantedBy = [ "default.target" ]; + }; + }; +} diff --git a/services/openssh.nix b/services/openssh.nix new file mode 100644 index 00000000..d21db83c --- /dev/null +++ b/services/openssh.nix @@ -0,0 +1,20 @@ +{ ... }: +{ + services.openssh.enable = true; + services.openssh.settings = { + PermitRootLogin = "yes"; + PasswordAuthentication = false; + StreamLocalBindUnlink = "yes"; + GatewayPorts = "clientspecified"; + AcceptEnv = "WAYLAND_DISPLAY"; + X11Forwarding = true; + }; + programs.ssh.knownHosts = { + "git.chir.rs".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE+GanuiV1I08OP8+nNy24+zagQN08rtJnCoU/ixiQNn"; + "instance-20221213-1915.int.chir.rs".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE+GanuiV1I08OP8+nNy24+zagQN08rtJnCoU/ixiQNn"; + "nas.int.chir.rs".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDhao1I1Kd1gK5bERUdjMxP9yHDrSHYZsTN2TcSk0K/U"; + "not522.tailbab65.ts.net".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILpOcmvVODaja3wDdnocb/k6MK7vsh5uH8gpeHR9+/rY"; + "rainbow-resort.int.chir.rs".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII9MczPuvEh9XaT6e3emfC+WyMYEpyRu2jDUkt3bBk8W"; + }; + networking.firewall.allowedTCPPorts = [ 22 ]; +} diff --git a/services/postgresql/default.nix b/services/postgresql/default.nix new file mode 100644 index 00000000..31f8f15a --- /dev/null +++ b/services/postgresql/default.nix @@ -0,0 +1,30 @@ +{ + config, + pkgs, + lib, + ... +}: +{ + imports = [ + ./pgbouncer.nix + ]; + services.postgresql = { + enable = true; + enableJIT = true; + enableTCPIP = true; + package = pkgs.postgresql_17_jit; + authentication = lib.mkForce '' + local all all trust + host all all 127.0.0.1 scram-sha-256 + ''; + }; + services.postgresqlBackup = { + compression = "zstd"; + compressionLevel = 19; + enable = true; + }; + environment.persistence."/persistent".directories = [ + "${config.postgresql.dataDir}" + "${config.postgresqlLocation.location}" + ]; +} diff --git a/services/postgresql/pgbouncer.nix b/services/postgresql/pgbouncer.nix new file mode 100644 index 00000000..9e20cb68 --- /dev/null +++ b/services/postgresql/pgbouncer.nix @@ -0,0 +1,14 @@ +{ config, ... }: +{ + services.pgbouncer = { + enable = true; + settings = { + pgbouncer = { + listen_addr = "localhost"; + auth_type = "scram-sha-256"; + auth_file = config.sops.secrets."services/pgbouncer/settings/pgbouncer/auth".path; + }; + }; + }; + sops.secrets."services/pgbouncer/settings/pgbouncer/auth".sopsFile = ./${config.networking.hostName}.yaml; +} diff --git a/services/restic.nix b/services/restic.nix new file mode 100644 index 00000000..31e1a6e1 --- /dev/null +++ b/services/restic.nix @@ -0,0 +1,27 @@ +{ config, ... }: +{ + services.restic.backups.sysbackup = { + timerConfig = { + OnCalendar = "06:00"; + RandomizedDelaySec = "12h"; + }; + environmentFile = config.sops.secrets."services/restic/backups/sysbackup/environment".path; + paths = [ + "/persistent" + ]; + extraBackupArgs = [ + "--exclude-caches" + "--compression max" + "--exclude" + "/persistent/var/cache" + "--exclude" + "/persistent/home/root/.cache" + "--exclude" + "/persistent/home/darkkirb/.cache" + ]; + repository = "s3://ams1.vultrobjects.com/backup-chir-rs"; + passwordFile = config.sops.secrets."services/restic/backups/sysbackup/password".path; + }; + sops.secrets."services/restic/backups/sysbackup/environment".sopsFile = ./restic.yaml; + sops.secrets."services/restic/backups/sysbackup/password".sopsFile = ./restic.yaml; +} diff --git a/services/restic.yaml b/services/restic.yaml new file mode 100644 index 00000000..c9dc0235 --- /dev/null +++ b/services/restic.yaml @@ -0,0 +1,53 @@ +services: + restic: + backups: + sysbackup: + environment: ENC[AES256_GCM,data:6doK0jeQ1WgjVspk8gGIfKplvIjI8HfxiTGGuV4U4F4HjjoNqSDvbTaQjw4kllbX3Y/mOMrPorOV+IKswhZWIyFHYkxSoXnEERqOcL4NR0phzS47dob9cmzZRtrk9RMYr8xOjzN+,iv:CceNo1rnhwIZ8YnMqp8Yh/7TTGThnkFo9sMmd6feq3A=,tag:5HOHOxGAQcchyI2jv64eZA==,type:str] + password: ENC[AES256_GCM,data:xfGpi1SHYNVgTpGE4OK78MsPQZI=,iv:Ri3WD0PmMpQ/a5ny3lesR/Z6DzwMShGRzYFbVMuGi9g=,tag:ocTJY5zH5+2Z/C2QGL1TZw==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaWkl0WWx0STFUVHlhaXgy + WjJYcEdJOHd0aW8rN1kwbnVjeHh2a0RUWTBBCjZFRUE1K3RFYmZMcDJMVDVOdnV6 + VDF5bEEwVE4vRTQvNVJLRkhOdXJhMjQKLS0tIG9iVTVOeHRUbVdySjc2T2dkRnhh + bjEwK0ludjR2NHpWYk1LUFUyWkVPaEUK4szqvropJKPnF4exnoJM1x3YSnQB2axH + JoQZkeO4y1wBqh/JDb5Xlw+3lziH6tlwqMYI5Mj0ACbpy/y0gPrG3Q== + -----END AGE ENCRYPTED FILE----- + - recipient: age1emv3kzvwgl36hgllrv7rlekqy3y3c6eztadl3lv09ks3z9vv6vdqw06yqa + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBadndrd0tMNHBYMnExaEpn + Y2dVbWxmVWRDaUdnK1gwVUJ5VlVNNzJ4b20wClBCSkova2dxN0d5d05wUzhIUkc2 + bXJoRXZ5alY3N29KRlEvK0V6MG1PSFkKLS0tIGFVY2xTMVZTZU9VRXViNkQrOHlT + UTJzRWxnWW9wZVo0K0xiaE9PTGhlTWcKpHkPLrMCYcLPDNSMQnPDfOXh3fQdgc/O + VMLhplZ0CcrAbDii0AMqqen+qStGpfFvMpW1fqWy3guNTxZMTKIjrA== + -----END AGE ENCRYPTED FILE----- + - recipient: age19vzypddhexvvsf8xylstxc9znnkd8rxmamhjlt7elvz4j3zaf5tqqura6f + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhSWJUZFNoaEZOTVNvSjRW + aEQrRzNKKzhKM1ROcDFzd2xBS010MkY3a0c0CnlycnJmZHUveUFGUUxacVN4WTdE + VVZSdGw3UjV3RXdhd2ZrWnA0ZUVIczgKLS0tIFV6Mm5rajVFSHh1Z0IydWpGUHBE + TEVvL0pZUXpRcjl4Z3JmQTF3QmNpNmMKMpCHx3vqOBXyvM4gcQctLpmE4ypC/Oqj + 9PqfcAADPzGFZMH1v5chBXpMD/FZ9yr8KfFVz3VD3MTEqQBYqTlZ0A== + -----END AGE ENCRYPTED FILE----- + - recipient: age1p400545a482fma40yfgytu40p6wr5a75v4f8yeudvgf7eh5erufqxhgynr + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBU1FXNXhuWHZJMk02RnQ2 + clRtL3hhd1dTbXlOWHF2bkRFb2hhYUo2bTBNCm1vNWZiU1IzdGI3aEdaZEcvUmdQ + ZXN5SU5ZZ0w4VkEyaGcra1hsQW9BaG8KLS0tIG9ieWF4cG5IVk1XVmxsTkt1bURQ + VXlvWkhVYTY2aWpwOHZUSDFkbHN4cUUKIHdWPdwqb9JjH8K91CaNqxH5qyP7tmdj + HVjFUz5AGE6E5oi8oZcru3m3WviuBsTxT8lYiCPd9xO99/7Zkswtsw== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-11-12T09:14:08Z" + mac: ENC[AES256_GCM,data:g9grCtq75gKHxM4kKzbvg/XcWUtIXkWGHEfvYbseTsXxdR1WuIXonSs/VX/1Oni6kvalnvUGaR0IflPhXYr7bEhyAWPqDRVditt6yeb/UbwWONSlxtnJVTxAJ3RRVjZZaQJnwuu1UIEZRz3JS/EKXqQjma6A5WtN0WNMEJkw8No=,iv:VkKHUFF9s56iu+Tk2qzhu3s7rJs2NGO/08OICwmds0c=,tag:eI89jJCTF7rkRJ/QNyt62g==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.1 diff --git a/services/security-key/default.nix b/services/security-key/default.nix new file mode 100644 index 00000000..b9adab67 --- /dev/null +++ b/services/security-key/default.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + imports = [ + ./pcscd.nix + ./tpm2.nix + ]; +} diff --git a/services/security-key/pcscd.nix b/services/security-key/pcscd.nix new file mode 100644 index 00000000..15f50c79 --- /dev/null +++ b/services/security-key/pcscd.nix @@ -0,0 +1,6 @@ +{ ... }: +{ + services.pcscd = { + enable = true; + }; +} diff --git a/services/security-key/tpm2.nix b/services/security-key/tpm2.nix new file mode 100644 index 00000000..c148e365 --- /dev/null +++ b/services/security-key/tpm2.nix @@ -0,0 +1,10 @@ +{ ... }: +{ + security.tpm2 = { + enable = true; + abrmd.enable = true; + pkcs11.enable = true; + tctiEnvironment.enable = true; + }; + systemd.tpm2.enable = true; +} diff --git a/services/tailscale.nix b/services/tailscale.nix new file mode 100644 index 00000000..6a7c8ef0 --- /dev/null +++ b/services/tailscale.nix @@ -0,0 +1,18 @@ +{ + config, + lib, + ... +}: +with lib; +{ + config = mkIf (!config.isInstaller) { + services.tailscale = { + enable = true; + authKeyFile = config.sops.secrets."services/tailscale/authKey".path; + }; + sops.secrets."services/tailscale/authKey".sopsFile = ./tailscale.yaml; + environment.persistence."/persistent".directories = [ + "/var/lib/tailscale" + ]; + }; +} diff --git a/services/tailscale.yaml b/services/tailscale.yaml new file mode 100644 index 00000000..6a62f409 --- /dev/null +++ b/services/tailscale.yaml @@ -0,0 +1,50 @@ +services: + tailscale: + authKey: ENC[AES256_GCM,data:VCiJpCOcDzX2JZBgljugvALjF5L/diF454RvYbRQCg7iFXj/Zc/qHTUG6j+VYhnyHG9cACFasXE/cHrExxY=,iv:e8bb3BywefCXoArCTBZknkCbxiBTq5UtMuEW00yuXG0=,tag:G3dIyGW+Q7Je0uscRQ7Img==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLTHFBVmhRNitydE9KbmpW + eG5PbE1pWEhjdUdScTUxNjYzSWZMeWplQXlvCnZaczI2a3Y4U1BJWE1ZcXZqcll2 + ZGxNa3RVYjQ4ckF4aXNRUDdOTmVWVlUKLS0tIFdtWDBKbGF6OXFqeXBBRmtkQWEr + cXI3L3c3cnhxbU05eEt2bVNXY3pBZmsKpnglue8/JSiAOrYKeWuqKba1HABfESzP + SNidd/CaEtOHH/WGedI0Rtjjwou/UFmps+L6zA9NYdMu7ubBwMa0uA== + -----END AGE ENCRYPTED FILE----- + - recipient: age1emv3kzvwgl36hgllrv7rlekqy3y3c6eztadl3lv09ks3z9vv6vdqw06yqa + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuY2xIZ0VUUVUxdXgrc2Ju + WEsxc1dkZUx0K2lMUE1kcVcyM3hzdDAvNndjCnZNWkx3dGh1dlB0WDVwRmx5L3VS + S3pkWVE5VjB2TjNhUGs1WkFsLzdrSjQKLS0tIDNqak9kRTMvNVdhZDdOVENXYmk1 + RjM3WVd4MXFISVpoTVpzYm1DdHIyV2sKFNUbIbPAf9s5Q8LaD6QfOZQN9PvqgvRJ + IayLKzrHUZuzHXJ2JugR2iHJnjwr5KpUg6iX0wLFyrlIjXPTxgWLeA== + -----END AGE ENCRYPTED FILE----- + - recipient: age19vzypddhexvvsf8xylstxc9znnkd8rxmamhjlt7elvz4j3zaf5tqqura6f + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByOFpqeEd5aTJQeEdtWVEr + aGpFaHJaa3JIT0drUXUrMVF1ZFpFVUpBWEUwCnFhME1CZnVsZXpwOXJ0RG1ES0Jx + VzA1bmZMbi8rRFZWTFA3UjRQZEpESDAKLS0tIG12Q1lNbCtDRi9DaUkxUDUwdlY0 + TnlUZDFaaVlXWXB1bWFWaG91OStQaVkKJSLJeb+5TlDXcBP54k8bE8wKwgEp8Lc7 + ajaynuSY77K+eDVBDpDNAMTzR9aKH4kT7fJ7vnRhKKzQ6gs19mH+yg== + -----END AGE ENCRYPTED FILE----- + - recipient: age1p400545a482fma40yfgytu40p6wr5a75v4f8yeudvgf7eh5erufqxhgynr + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIU2ZlS2h3Yk8weFBGSnV6 + K01Yc0g3V0JvSUhWbUNLRGNKc253a0pEckg4Cm9jdHRET1orR3dUbnlkWmQrS2h4 + TmV2NW9QVUc2cHo0UmxWVGlGZ0RkL3cKLS0tIGJSWS9jTmtUQTV6c250WW8rMVJy + aEdJZzQ4ME9IR2hwbGNYY1FzVXRlbmsK+eXHdbTQMntejUFCRMUBSTU3psshwvj0 + LzZySqhVq+Kk5fh4aKJO3JoTAyOmp7I2C3I/ueHBlrIr7VTSes4lNQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-10-29T09:11:58Z" + mac: ENC[AES256_GCM,data:0DTvlOMKIRR11bPB5VElyIKb1Xz5gJZuSOpwahnjlnKF/ba+0RENiKdkb60YTuS6+tv/gVxT+Xs4KWDTJw/3JcTIPhaah3x8q90UfmqE91zLy4oUWzRqFXBDEL5dNtN79/EKI4b19102jSOETvmTTGjjrXV1VSdL0ZMse1g07BA=,iv:WeoU6xUka6zMo5wZviU78OofS5+vTHTWD4m/29hHHp0=,tag:6QessEZIGVRr8NkaLydjtw==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.1 diff --git a/update.sh b/update.sh deleted file mode 100755 index cb0d6ad7..00000000 --- a/update.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -rm .git/hooks/* -export NIX_PATH=/etc/nix/inputs -cd packages; -yes '' | ./update.sh \ No newline at end of file diff --git a/users/common/default.nix b/users/common/default.nix new file mode 100644 index 00000000..564e9fde --- /dev/null +++ b/users/common/default.nix @@ -0,0 +1,4 @@ +{ ... }: +{ + home.stateVersion = "24.11"; +} diff --git a/users/darkkirb/default.nix b/users/darkkirb/default.nix new file mode 100644 index 00000000..e5362857 --- /dev/null +++ b/users/darkkirb/default.nix @@ -0,0 +1,32 @@ +{ config, ... }: +{ + users.users.darkkirb = { + createHome = true; + isNormalUser = true; + openssh.authorizedKeys.keys = [ + "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIDXQlfvRUm/z6eP1EjsajIbMibkq9n+ymlbBi7NFiOuaAAAABHNzaDo= ssh:" + ]; + hashedPasswordFile = config.sops.secrets."users/users/darkkirb/hashedPassword".path; + extraGroups = [ "wheel" ]; + description = "Charlotte 🦝 Delenk"; + }; + sops.secrets."users/users/darkkirb/hashedPassword" = { + neededForUsers = true; + sopsFile = ./system.yaml; + }; + sops.secrets."users/users/darkkirb/age-key" = { + owner = "darkkirb"; + sopsFile = ./system.yaml; + }; + home-manager.users.darkkirb.sops.age.keyFile = + config.sops.secrets."users/users/darkkirb/age-key".path; + home-manager.users.darkkirb.home.persistence.default.directories = [ + "sources" + { + directory = "Games"; + method = "symlink"; + } + ]; + home-manager.users.darkkirb.imports = [ ./home-manager ]; + environment.impermanence.users = [ "darkkirb" ]; +} diff --git a/users/darkkirb/home-manager/default.nix b/users/darkkirb/home-manager/default.nix new file mode 100644 index 00000000..9719d114 --- /dev/null +++ b/users/darkkirb/home-manager/default.nix @@ -0,0 +1,24 @@ +{ pkgs, ... }: +{ + imports = [ + ./git.nix + ./sops.nix + ]; + home.file.".face".source = + let + pfp = pkgs.stdenvNoCC.mkDerivation { + pname = "face"; + inherit (pkgs.art-lotte) version; + src = "${pkgs.art-lotte}/2023-10-26-sammythetanuki-babylottepfp-therian.jxl"; + dontUnpack = true; + nativeBuildInputs = [ pkgs.libjxl ]; + buildPhase = '' + djxl $src face.png + ''; + installPhase = '' + cp face.png $out + ''; + }; + in + "${pfp}"; +} diff --git a/config/programs/git.nix b/users/darkkirb/home-manager/git.nix similarity index 63% rename from config/programs/git.nix rename to users/darkkirb/home-manager/git.nix index d7106443..dd67df67 100644 --- a/config/programs/git.nix +++ b/users/darkkirb/home-manager/git.nix @@ -1,10 +1,8 @@ -desktop: {pkgs, ...}: { +{ pkgs, systemConfig, ... }: +{ programs.git = { enable = true; - package = - if desktop - then pkgs.gitAndTools.gitFull - else pkgs.git; + package = if systemConfig.isGraphical then pkgs.gitAndTools.gitFull else pkgs.git; lfs.enable = true; userEmail = "lotte@chir.rs"; userName = "Charlotte 🦝 Delenk"; @@ -13,6 +11,8 @@ desktop: {pkgs, ...}: { merge.conflictstyle = "diff3"; push.autoSetupRemote = true; rerere.enabled = true; + user.signingkey = "B4E3D4801C49EC5E"; + commit.gpgsign = true; }; delta.enable = true; }; diff --git a/users/darkkirb/home-manager/keys.yaml b/users/darkkirb/home-manager/keys.yaml new file mode 100644 index 00000000..dbbf2c07 --- /dev/null +++ b/users/darkkirb/home-manager/keys.yaml @@ -0,0 +1,33 @@ +.config: + sops: + age: + keys.txt: ENC[AES256_GCM,data:kp5zlL9GSm7cmV7g0gv45HFsyVTxqxyhk0VtOKUiVgxB5VDPsd249ZsHcBTIFv3IlzepZUa6KJPVY/ICJC9Y2GvwsHBHUg7zNo3/pgBcoyZ1GjdeORF392j43xoK8VPdY2Tok8HMrjUhLycwp6YlWIrAQbiLXGkoLDLhal/6Id/+6VnKZunH/kq93eNqLYmOuFGd/7nnmN8rYCbznoOYvnG9fqLGS11n2mjmlY9kXZ2BbytuMF9xa60fSqUhtFiXmjKrHpv1uAojVE5D47plN/QPmjfNRZJYxt1/jOCDpsN3DBE3QKnNTM4fEtshuw0rG4o1XZARt8Q1oVyyQVr9zZ2cK63teLH506nkCVsb31pS7R/3fAdtNTAAXSvzSrXzBL+EKCYPDXncBfCx32OAr/z0M2fwYc+HVLmJGJUeCxCckxMtJehHKjaPGlSdrLID67KwcmNmUt+61mq5Fh6V19Y4O7pgB+MuTXWb1TRtz4sGEA6AGRfwRZm9pW6DIRZGupCCZ1m+WJds8Sefw9GMqp+AbvLH560jlnKJvLiod4UC4RAMKkEBDi5eHAefXBhcBOBdEa4iPzk844KQWkeXhIbyKbn0rHmnrJ4/Yeaz+/CNpExwc2U+SluotMbqRe2pP6aNpiXhEXw4cg==,iv:p2Z7ym1g+JFbWSeCysURKcH/9ow6KzPf6WPa19Wf4FU=,tag:lhTalpb2GOV6tRYOatchjw==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4clo0REE3VnVxMUFYWFVa + YzRMcVBGZGNDUFpuT3RRejRTOWFQa2h5dERrCnFhWmpCdk9vNVphV2h4eTJJUTha + MUp2T3A3MWZLclZpNHFOb0huVWFVWWMKLS0tIDlkb1pPVEh0UndYdDBncG56VHNE + YXJ0b0J2b0k4b0lrWWVtWUwzcHlsbVEKdVLrTY5Xaviy+JF2sSqsPvVnkHJ8KK+D + 33QUoCH1awLcZSPZPyvAjEIZ/MKMNa4RYYL2xUhlmwzXW1I+Z8voYQ== + -----END AGE ENCRYPTED FILE----- + - recipient: age15g6tzvcmcp3ae4hwnn4pwewat6eq9unlhtjrlaka6rf94ej9dd5qqpgt7u + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3Ri9zcTZ5M2hDMkpEeXVG + M0R1NmhrbjJTVWVUSkFGa3lIa3FTS2Z5bUU4ClBWT1lEZUlhLzVzTEN0blVqTzRt + emwwK0dkMk10Y2xSenBZSHJqalhGT1kKLS0tIGUxRGRkUTRNNVVoYi9yTUxaQVhC + MTZ4VWZ0MEFaQjZzOSt1VzBDWC9aU0UKHwylHC9EZI2QMb+B+qCxaikRL5MRHBfd + UGr6njNSWIVcg6tpNneXp+bC6k6HLLPTg2b4Lupt+WRnaTFLY8yADQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-11-11T07:45:30Z" + mac: ENC[AES256_GCM,data:XG46XbOQ7hGb8t93WDmr4zCr92KOJTCJnOV9fxGOl0nvD1vnqoVX8oFXwCwq0oBF8bGdecWzmeetVTbYjgn0y4e2nhZt8aULL+5MAV9zmVbfBDzdPtyV4yOdDfMX/0Vaf/nlXJgw0pNK+wqLCRXe1UG23wq1IttYlhWPHaEW2AA=,iv:tGJ8u9BSxyBVx620NC5M1znHur2K2V6I5/qsrtnxxs4=,tag:hPKudVRE/n5Lb5Zg4kFtVg==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.1 diff --git a/users/darkkirb/home-manager/sops.nix b/users/darkkirb/home-manager/sops.nix new file mode 100644 index 00000000..7ae03125 --- /dev/null +++ b/users/darkkirb/home-manager/sops.nix @@ -0,0 +1,7 @@ +{ config, ... }: +{ + sops.secrets.".config/sops/age/keys.txt" = { + sopsFile = ./keys.yaml; + path = "${config.home.homeDirectory}/.config/sops/age/keys.txt"; + }; +} diff --git a/users/darkkirb/system.yaml b/users/darkkirb/system.yaml new file mode 100644 index 00000000..c37bdcfe --- /dev/null +++ b/users/darkkirb/system.yaml @@ -0,0 +1,61 @@ +users: + users: + darkkirb: + hashedPassword: ENC[AES256_GCM,data:mDfXEfKTORaTOKubl1To093Hd4elXfGih69RX8LKsKsVZjQ01gT9vCLZMbdo9k7A7fonQWunxcpla9mMPo6DFeJrF4rzhJfLJgp3/EODtG9RAKKzy3X/E0nsygrvK8BxErryJG026wrL5g==,iv:VyyMIUqv6TDl+Gm7P9gEJbnsxHHcgJsn+Gh7SD2SeT8=,tag:mH4PNVSCv4fc9MLtlvIaVQ==,type:str] + age-key: ENC[AES256_GCM,data:sDT+jQEBKHXzmCOJ/yq7Cn43ILECbvuSfikDlSZUObX7p6n9fNTh+uNfBxzPZfxPxkoR5ex9cKYJPo/faTuSIygkLvdRIihY0jfJmSi/BYTaQ2ReDpB/djVNC7hzqhJoTxMfHkBBdYeqpj3KFD1+eSCA04w+oFUe12zJIrbtEok2H4qm6KAtlsHKH/iWxkJ95bWCouwzKsREM1pJJ/bKOe5pSqquAGQ7VIm1ZAL532Rj2ET0ExFGIonijw9l,iv:K3tJLhgAo3tFKemp56gXcXqjdl1YP2xTzmKJB0JSD6E=,tag:ENEzSIyR8cCAO3utLBORZw==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRTmtJZEhrc3FvNTF0Tm9h + Ly9sT01obmVzRzZRVk9xTUtpRlpyZGZTMjEwCmVub2djcmtoendTUDUrNHo0SVRR + bDVBWm53aW1Rdm5SK1AwOVFOZjNCVWMKLS0tIFRrREs2QWU3Yld1bmFpTTFiQ3BZ + SXlYbFJ1ZktPbkZNbEVWWEFlNGpYcXMK/XZAdHER6ePZ61JINWZ3t9XPrs/Yf+Dm + g/IftLsp2ujMFGlx6nxA2slLoS2gbIHdwPWaMVgFuOWLSvyHokhQdw== + -----END AGE ENCRYPTED FILE----- + - recipient: age1emv3kzvwgl36hgllrv7rlekqy3y3c6eztadl3lv09ks3z9vv6vdqw06yqa + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLWTgwVGxWNUoxaXZ2bTJB + QmtDYVhFdGcwblo4UnBvY0lrNTdzK0ZWUVJrCndHeXh1blI1UTlSbGhOYXlyL1k1 + SnBvSlpZK0xqK2NudE9YWnNGM214cW8KLS0tIGp0T1luQXdYUFdDMEFIanpHSXFD + Nk51eklBbm8rb0d0SGdCYXBKcjFnQlUKlQnkLNghf0UX0doloGbiTqhKRxnSUwrm + u9vC1v/Q6qA8V1pQAKGikHK7uikSZFREgzEFoquUmWnhsqGN8VQhFg== + -----END AGE ENCRYPTED FILE----- + - recipient: age1eh2vd6cdy23qazwg0hzq95pn9e6p8yaqu4g6zyan8gzal4x5ed5qful8kg + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBscmMvUWxaUlM2aDZ0aUxJ + VkQwTms2WisvOTBvV0ppZjdZV3pxd0pHS0dBCnFmM1R5bkEzanZxUTUrcjI3ZWFu + NTRvSTRKU3pMYW1TYWpkQnJET3JVeUEKLS0tIEhDcytRTExDTFN4QzhYeVVvdG84 + U2FXUHJDNElRRFg0MzAyTzg4d2FxY0kKGUEb2VqNUkyNCudb3Bj3xJ9Er07KkkfT + s9P/mgmydrhuaTMWgOfmHSf+pWYMYEHHIg6sQ0KN45Y+yLe5VqePIw== + -----END AGE ENCRYPTED FILE----- + - recipient: age19vzypddhexvvsf8xylstxc9znnkd8rxmamhjlt7elvz4j3zaf5tqqura6f + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwaDhNbTU4SkFkR25kUXFD + NE84aHo2Tjh4dTFNNGM4bmZNNEIzRUJqaEdBCjRJR08zVGRlUnNjWUYwcjJSRnBt + Y0p6QmRWTXcrMmVaUGVGYm1CRm5mR1kKLS0tIGJtYXdkN2NnRXhuTGxzaUtYTEh6 + Smt1ZXRXR04xRWE5TXRPTVJpWEx6RmcK2YEj3wf7ly7a73XG/eweICoog6yYXERU + NHfuJ7PPHHlmuWdPw8Udl9+dm0UVeHp+APW3xprIZc8Rsei1e0LBDA== + -----END AGE ENCRYPTED FILE----- + - recipient: age1p400545a482fma40yfgytu40p6wr5a75v4f8yeudvgf7eh5erufqxhgynr + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOZ2RxU2hqV0ZPS0FPUldT + MFlINnBUNFpsUTJKMS94QjVSai9DTFR6TFIwCk9HbmVsaVNIelc2SDQzQjk4OGNU + SXRNYU9hME9TNUkrTjV4bE9FelYyUzgKLS0tIFcza1psYXViUGJ1VGhHL3lFSWVr + dnRWUEMybkhaSURhdHlLanVGcStnbzAKTZ/H7U4UVilPuMB7h+fVxxNI2X1txTVs + IT8ulxPJtoPsg42G9S7Wvln+nWy88PU7qupUrzrAO+4IGD2GeF/1eA== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-11-06T08:34:00Z" + mac: ENC[AES256_GCM,data:kb6SOv5juzL1GjGye3SHF9BSlsxWEoMwjOGd+g1xz0aRLZAtEkeN7ZS1a6rO1C9PyQOQdWGZ59NU5k7BftgA4+mWnkgyQtxpb8e2KwcDnkSE+kMYxPgufzuS4L46jkmbTHACItVowja0Qd1Z0fUlUkAzego6bmgPd0hM8s4ZSX4=,iv:SBrFNNVpEBhuybtzQpl8hNx+osyCR42OU5E//sAE2gQ=,tag:7ZAGK//NCxcWl0lx5vrLmQ==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.1 diff --git a/users/default.nix b/users/default.nix new file mode 100644 index 00000000..b241f262 --- /dev/null +++ b/users/default.nix @@ -0,0 +1,9 @@ +{ ... }: +{ + imports = [ + ./home-manager.nix + ./root + ./darkkirb + ]; + users.mutableUsers = false; +} diff --git a/users/home-manager.nix b/users/home-manager.nix new file mode 100644 index 00000000..0aead4b3 --- /dev/null +++ b/users/home-manager.nix @@ -0,0 +1,27 @@ +{ + impermanence, + inputs, + inputs', + config, + sops-nix, + self, + nixpkgs, + system, + ... +}: +{ + home-manager = { + useUserPackages = true; + useGlobalPkgs = true; + backupFileExtension = "backup-${self.shortRev or nixpkgs.shortRev}"; + extraSpecialArgs = inputs // { + inherit inputs inputs' system; + systemConfig = config; + }; + sharedModules = [ + ./common + "${impermanence}/home-manager.nix" + sops-nix.homeManagerModules.sops + ]; + }; +} diff --git a/users/root/default.nix b/users/root/default.nix new file mode 100644 index 00000000..f22a8077 --- /dev/null +++ b/users/root/default.nix @@ -0,0 +1,29 @@ +{ + nixos-config, + config, + lib, + ... +}: +{ + users.users.root = { + createHome = true; + openssh.authorizedKeys.keys = [ + "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIDXQlfvRUm/z6eP1EjsajIbMibkq9n+ymlbBi7NFiOuaAAAABHNzaDo= ssh:" + ]; + hashedPasswordFile = config.sops.secrets."users/users/root/hashedPassword".path; + }; + sops.secrets."users/users/root/hashedPassword" = { + neededForUsers = true; + sopsFile = ./system.yaml; + }; + sops.secrets.".ssh/builder_id_ed25519" = { + mode = "600"; + sopsFile = "${nixos-config}/programs/ssh/shared-keys.yaml"; + }; + sops.secrets.".ssh/id_ed25519_sk" = { + mode = "600"; + sopsFile = "${nixos-config}/programs/ssh/shared-keys.yaml"; + }; + home-manager.users.root.sops.secrets = lib.mkForce { }; + environment.impermanence.users = [ "root" ]; +} diff --git a/users/root/system.yaml b/users/root/system.yaml new file mode 100644 index 00000000..13dc8548 --- /dev/null +++ b/users/root/system.yaml @@ -0,0 +1,60 @@ +users: + users: + root: + hashedPassword: ENC[AES256_GCM,data:ptHTZ/MHRId363TlEWNJpOMQ46dISPSQjvrqsxQzq9hmDU3oC0FO9Mtf08I9wcVa0KpIEQfSZp/AgZ7yburK9EpfBccwudRdzpCBynsRYxhbuirSAm4ANaBLyrYx1jsCXFbeNDA4xsrmfw==,iv:WIG8qv7vAIUN8MMPkPKc9sjG1CQMYk03/C2TYSDs9zY=,tag:9Vm8Grn2AtME0O329N60Bw==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1tltjgexkp5fz3rum4j0k66ty5q4u8ptvkgkepumd20zal24g2qfs5xgw76 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLOGlxSU9NK1BjY25BRm9N + Zy9Gd0ZaNnU0MEs0TDlic3BrN2dFSVZlVFY0CkZyUERucjNUNzBldGlZQXozbjZS + WkpIZXdXME5IcWRsYUdROVNRSXkzcEkKLS0tIEROZTNjUzJIeVE1aDlOcCtMV2dC + RGxoKzUweHhsay9YWnVUa3ZtVVR3b28KRrd570e+3voFySXwlYMSL51EHcWDurmt + y/9fGkhMv/lsNsS0XQnP1Q6u9jya+hHh7SIvQAqZm8fFF2iphcHdZA== + -----END AGE ENCRYPTED FILE----- + - recipient: age1emv3kzvwgl36hgllrv7rlekqy3y3c6eztadl3lv09ks3z9vv6vdqw06yqa + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3bThJTDB4V0tUK2ltOWNv + OTh1TVJIY1hZV21lZHpQZG5SaFB5SVdpakVVCjZjTWErMXVKbjJ3YlV5YjFTK093 + RzZKKzFsdmFBdExDVk4rRktYdENWWDQKLS0tICtWRW5BT2kxNjJ5K3AveE9UWVFw + dGVVUW1GRE4xSjN5UG12UHZNbGt0dUEKXOLi3zT3s4Am6VFV21mT36+kbJ7Qv2n2 + g61C2jfbQylQySlKVcK+U8u7USQsko86tAz7sDc1YmHw6VLRJYKLHQ== + -----END AGE ENCRYPTED FILE----- + - recipient: age1eh2vd6cdy23qazwg0hzq95pn9e6p8yaqu4g6zyan8gzal4x5ed5qful8kg + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvdGMwZ3dyKzZzdE5LTWpM + TlNseVpTZmt6Z25BQTBRLzVhVjdSNjhOenhFCllrbzZ0NmdqWW0wYUtoM0tyaVBR + bWcrMWZNeUVpSlRMbGt2by9PU091ZHMKLS0tIElURm9Cc2xINlZRQzkwbTFmSDFO + Kytjcmw1YUxwanBsNlVVb25XZEhyY2MKFwFVFCfLSt+Gim8FTh+Rfv/CGd1Rkwhb + kHcC9h+UfQOwVhz/1Ydng1B9pvHPBHFdJxJPTHwOaxfBhIILjOsQ7w== + -----END AGE ENCRYPTED FILE----- + - recipient: age19vzypddhexvvsf8xylstxc9znnkd8rxmamhjlt7elvz4j3zaf5tqqura6f + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQTjE2ellLREJUOUZhNU80 + eFBLR1ZtL2hMQUt6Z3lvS0E3OHJPNE9qdmhVCkVMdGx0TzVhY0tPaVVQU3lINHh6 + Qmtjck5kTVN4Ly8rS3pPWmxIcDY0WkkKLS0tIHRQdC8xSkw1KzNiM1BiSDVaSVBR + bVB4K3hXRHN3VUtGRHVVbThPcmU2SW8KJFr2ySvEmr+FkzxAq+IeLTZ9MQVQcoHz + 0HtFXe5Uk8sQEphmOgvYWK+uckL4OBovqt+VSDxmTEfq2BIT5ffCog== + -----END AGE ENCRYPTED FILE----- + - recipient: age1p400545a482fma40yfgytu40p6wr5a75v4f8yeudvgf7eh5erufqxhgynr + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFSUlaa2tvNTdDUFZBTklz + SWVmYWFMRUdvR1pZbVUzUElWeUQ4SFVINldBClJNNWExSW1RVDdCNWpNOG43OXJh + QW55NXFyTkpOUlY0YkNmK3kwUWlFYkEKLS0tIGkreDgwbVlRUDJPdi9mR0JwM1ZC + clNBMjZjMlB1a2tXUUVjdklpRW4rcUUKN1xvNT6BmnGOY9Fb8gQztXj/6cVjYhGB + L+SvjadMRuXYjnX2dlqVcCuktJNeKRMSt2MXP7GVjupTuQ/GQyP7Yg== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-11-07T07:35:18Z" + mac: ENC[AES256_GCM,data:fGS1pQBHJ6vausZUbARxt7J/69tcFk1kkzrHLox12J+QQfgZYAm8xoue343Jw2NH+OgeYyOfAz8nKfKmZiibQIGPbV/JPkFvI7KQL7sEy7PLYLFU0cWF5DXwG4Y4z71rfgnNcX7emc2iQWwEcXMU6wM84ltkqf5zPPelvphXz+I=,iv:mVOFo1PtYVqMTvHmrmTO+eOqZ3N57kuc0KP5/XAN1b0=,tag:OJBY9qGxkVVNqJlDmDOJGQ==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.1 diff --git a/utils/link-input.nix b/utils/link-input.nix deleted file mode 100644 index 93d3b8e1..00000000 --- a/utils/link-input.nix +++ /dev/null @@ -1,19 +0,0 @@ -inputs: {lib, ...}: let - # Taken from https://github.com/gytis-ivaskevicius/flake-utils-plus/blob/master/lib/options.nix - inherit (lib) filterAttrs mapAttrs'; - flakes = filterAttrs (name: value: (name != "self") && (value ? outputs)) inputs; - nixRegistry = - builtins.mapAttrs - (name: v: {flake = v;}) - flakes; -in { - nix.registry = nixRegistry; - environment.etc = - mapAttrs' - (name: value: { - name = "nix/inputs/${name}"; - value = {source = value.outPath;}; - }) - flakes; - nix.nixPath = ["/etc/nix/inputs"]; -} diff --git a/zones/chir.rs.nix b/zones/chir.rs.nix deleted file mode 100644 index 06c7bd4c..00000000 --- a/zones/chir.rs.nix +++ /dev/null @@ -1,276 +0,0 @@ -{ - dns ? (import (builtins.fetchTarball "https://github.com/DarkKirb/dns.nix/archive/master.zip")).outputs, - zoneTTL ? 3600, -}: -with dns.lib.combinators; let - inherit (builtins) hasAttr; - merge = a: b: - (a // b) - // ( - if ((hasAttr "subdomains" a) && (hasAttr "subdomains" b)) - then {subdomains = a.subdomains // b.subdomains;} - else {} - ); - oracleBase = { - A = [ - (ttl zoneTTL (a "130.162.60.127")) - ]; - AAAA = [ - (ttl zoneTTL (aaaa "2603:c020:8009:f100:f09a:894d:ef57:a278")) - ]; - SSHFP = [ - { - algorithm = "rsa"; - mode = "sha1"; - fingerprint = "b44a837703b22d8cbc2ca4e7019af4bcb0185348"; - ttl = zoneTTL; - } - { - algorithm = "rsa"; - mode = "sha256"; - fingerprint = "8f276ce01188fdd2bbf2aaa03d477c58c911a6c1f9bee3f8ab35ca4b42aa19a9"; - ttl = zoneTTL; - } - { - algorithm = "ed25519"; - mode = "sha1"; - fingerprint = "8dfd784c5f239822b086dc4fa7c058f260331e5d"; - ttl = zoneTTL; - } - { - algorithm = "ed25519"; - mode = "sha256"; - fingerprint = "82d51bd3ab43af3b94801c6b68812c4f1db013ac5b53a466fbcdbb955de6d3e5"; - ttl = zoneTTL; - } - ]; - HTTPS = [ - { - svcPriority = 1; - targetName = "."; - alpn = ["http/1.1" "h2" "h3"]; - ipv4hint = ["130.162.60.127"]; - ipv6hint = ["2603:c020:8009:f100:f09a:894d:ef57:a278"]; - ttl = zoneTTL; - } - ]; - }; - zoneBase = { - A = [ - (ttl zoneTTL (a "138.201.155.128")) - ]; - AAAA = [ - (ttl zoneTTL (aaaa "2a01:4f8:1c17:d953:b4e1:8ff:e658:6f49")) - ]; - SSHFP = [ - { - algorithm = "rsa"; - mode = "sha1"; - fingerprint = "97b910c37194cd98e7edca2d68104f4531721c22"; - ttl = zoneTTL; - } - { - algorithm = "rsa"; - mode = "sha256"; - fingerprint = "7915470f9275116889d5ca1fdbea20416d8372636c3d63653b272308608cf70f"; - ttl = zoneTTL; - } - { - algorithm = "ed25519"; - mode = "sha1"; - fingerprint = "1aff467e745a8d68ba032dd3d54597e10d31ccf8"; - ttl = zoneTTL; - } - { - algorithm = "ed25519"; - mode = "sha256"; - fingerprint = "e6dcdb73dc381ee2b354528cdaf8552364e75c34316d7e0c9819801daea5c951"; - ttl = zoneTTL; - } - ]; - HTTPS = [ - { - svcPriority = 1; - targetName = "."; - alpn = ["http/1.1" "h2" "h3"]; - ipv4hint = ["138.201.155.128"]; - ipv6hint = ["2a01:4f8:1c17:d953:b4e1:8ff:e658:6f49"]; - ttl = zoneTTL; - } - ]; - CAA = [ - { - issuerCritical = false; - tag = "issue"; - value = "letsencrypt.org"; - ttl = zoneTTL; - } - { - issuerCritical = false; - tag = "issuewild"; - value = "letsencrypt.org"; - ttl = zoneTTL; - } - { - issuerCritical = false; - tag = "iodef"; - value = "mailto:lotte@chir.rs"; - ttl = zoneTTL; - } - ]; - }; - createZone = merge zoneBase; - createFullZone = merge (createZone { - A = [ - (ttl zoneTTL (a "130.162.60.127")) - (ttl zoneTTL (a "138.201.155.128")) - ]; - AAAA = [ - (ttl zoneTTL (aaaa "2603:c020:8009:f100:f09a:894d:ef57:a278")) - (ttl zoneTTL (aaaa "2a01:4f8:1c17:d953:b4e1:8ff:e658:6f49")) - ]; - HTTPS = [ - { - svcPriority = 1; - targetName = "."; - alpn = ["http/1.1" "h2" "h3"]; - ipv4hint = ["138.201.155.128" "130.162.60.127"]; - ipv6hint = ["2a01:4f8:1c17:d953:b4e1:8ff:e658:6f49" "2603:c020:8009:f100:f09a:894d:ef57:a278"]; - ttl = zoneTTL; - } - ]; - }); - zone = createZone { - SOA = { - nameServer = "ns1.chir.rs."; - adminEmail = "lotte@chir.rs"; - serial = 56; - }; - NS = [ - "ns1.chir.rs." - "ns2.chir.rs." - "ns3.chir.rs." - "ns4.chir.rs." - ]; - MX = [ - (ttl zoneTTL (mx.mx 10 "mx.zoho.eu.")) - (ttl zoneTTL (mx.mx 20 "mx2.zoho.eu.")) - (ttl zoneTTL (mx.mx 50 "mx3.zoho.eu.")) - ]; - SRV = [ - { - service = "submission"; - proto = "tcp"; - port = 587; - target = "mail.chir.rs."; - } - { - service = "imap"; - proto = "tcp"; - port = 143; - target = "mail.chir.rs."; - } - { - service = "imaps"; - proto = "tcp"; - port = 993; - target = "mail.chir.rs."; - } - { - service = "pop3"; - proto = "tcp"; - port = 110; - target = "mail.chir.rs."; - } - { - service = "pop3s"; - proto = "tcp"; - port = 995; - target = "mail.chir.rs."; - } - ]; - TXT = [ - (ttl zoneTTL (txt "v=spf1 include:zoho.eu ~all")) - (ttl zoneTTL (txt "google-site-verification=qXjyR8La2S_BMayWYxan-9PB16aChjgKMRI2NGSTAds")) - (ttl zoneTTL (txt "zoho-verification=zb25156608.zmverify.zoho.eu")) - ]; - DNSKEY = [ - { - flags.zoneSigningKey = true; - flags.secureEntryPoint = true; - algorithm = "ecdsap256sha256"; - publicKey = "5biiUR5bWhxr+PzyniLJp+FKln03EvQTWw+fg88NxwThgvSDL56zEhqkHqh8mObDkEqQ3LdM5LaOxwdDhWVJ9A=="; - ttl = zoneTTL; - } - { - flags.zoneSigningKey = true; - algorithm = "ecdsap256sha256"; - publicKey = "EuNM0AynEfbLZf5Hn5eMi31X0jW/NxpayoSQpnRuoko9JWQRBg3nPbqTWSPKHaCKrfs6zVRMoHtSq2Hql1Z+dw=="; - } - ]; - subdomains = { - _dmarc.TXT = [ - (ttl zoneTTL (txt "v=DMARC1; p=reject; rua=mailto:dmarc@chir.rs; ruf=mailto:dmarc@chir.rs; sp=reject; adkim=s; aspf=s")) - ]; - _domainkey.subdomains.mail.TXT = [ - (ttl zoneTTL (txt "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTZvuDWFmZOOMr9pogMK5lFBjV3nRAjUpFv3o0d4KhbRW/zVrOOdfdt83F6zSLzUqrxSOG3uKVG+J0KR4kX4BbYflSLZ++y91C0Uu5d+o3A8Y/z2vUSe5YVt44IaDQoPCCpuWEYyqKIEaKGXNFPvlsO6y551biM3raNjq5kEpb3wIDAQAB")) - ]; - _domainkey.subdomains.zmail.TXT = [ - (ttl zoneTTL (txt "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYVA1GcJ+JSl/Qv3hHtnge+FwAMn0+4KXWH3Ut4Ma6li3jT3ibO3d7sk7D4jmqwSQH+vCh/HC7+0PI8PYM9TQIecVwdwBF/29yMpiyVDyEc8ppRfU5KeYJsPxSAS/quFHy3M24qfckXb5aor6aI0mOtq8Bvh+v+69CpJUGSkNLUQIDAQAB")) - ]; - _keybase.TXT = [ - (ttl zoneTTL (txt "keybase-site-verification=r044cwg0wOTW-ws35BA5MMRLNwjdTNJ4uOu6kgdTopI")) - ]; - - www = createZone {}; - api = createZone {}; - git = createZone oracleBase; - mail = createZone {}; - mc = createZone oracleBase; - ns1 = createZone {}; - ns2 = createZone {}; - ns3 = createZone oracleBase; - ns4 = createZone oracleBase; - hydra = createZone {}; - mastodon = createZone {}; - mastodon-assets.CNAME = [ - "assets-chir-rs.b-cdn.net." - ]; - matrix = createZone {}; - akko = createZone {}; - peertube = createZone {}; - mediaproxy.CNAME = ["mediaproxy-chir-rs.b-cdn.net."]; - cache.CNAME = ["cache-chir-rs.b-cdn.net."]; - attic = createZone oracleBase; - lotte.CNAME = ["lotte-chir-rs.b-cdn.net."]; - lotte-test = createZone oracleBase; - status = createZone oracleBase; - weblate = createFullZone {}; - - int = - delegateTo [ - "ns1.chir.rs." - "ns2.chir.rs." - "ns3.chir.rs." - "ns4.chir.rs." - "ns1.darkkirb.de." - "ns2.darkkirb.de." - ] - // { - DS = [ - { - keyTag = 35133; - algorithm = "ecdsap256sha256"; - digestType = "sha-256"; - digest = "668D4621260ADD9CE5B272A84ADE20E92FC43CBC59893A5843FA8ED8A356DB2B"; - } - ]; - }; - _acme-challenge = delegateTo [ - "ns1.chir.rs." - "ns2.chir.rs." - ]; - }; - }; -in - zone diff --git a/zones/int.chir.rs.nix b/zones/int.chir.rs.nix deleted file mode 100644 index 8b5ec2eb..00000000 --- a/zones/int.chir.rs.nix +++ /dev/null @@ -1,245 +0,0 @@ -{ - dns, - zoneTTL ? 3600, -}: -with dns.lib.combinators; let - inherit (builtins) hasAttr; - merge = a: b: - (a // b) - // ( - if ((hasAttr "subdomains" a) && (hasAttr "subdomains" b)) - then {subdomains = a.subdomains // b.subdomains;} - else {} - ); -in { - SOA = { - nameServer = "ns1.chir.rs."; - adminEmail = "lotte@chir.rs"; - serial = 39; - }; - NS = [ - "ns1.chir.rs." - "ns2.chir.rs." - "ns3.chir.rs." - "ns4.chir.rs." - ]; - DNSKEY = [ - { - flags.zoneSigningKey = true; - flags.secureEntryPoint = true; - algorithm = "ecdsap256sha256"; - publicKey = "wB3TYl1UNG1f2p04/ExhCOib2iJD3mNo3F9vrwIBIP0kA94Z5xUVFQUMbSYrUIjA7/oNs/Degpo2RWFwnzFf2A=="; - ttl = zoneTTL; - } - { - flags.zoneSigningKey = true; - algorithm = "ecdsap256sha256"; - publicKey = "KdE0BQY5RqcHSYo9pgpjVAR1FAtaaF9elTzRhSE1dNKtVaMMhF5JA5s/tYVk1eY7JtiYVAOQkJsUduGTBOosDg=="; - ttl = zoneTTL; - } - ]; - subdomains = { - gateway = { - A = [ - (ttl zoneTTL (a "10.0.0.1")) - ]; - AAAA = [ - (ttl zoneTTL (aaaa "fd00:e621:e621::1")) - ]; - }; - nixos-8gb-fsn1-1 = { - A = [ - (ttl zoneTTL (a "100.119.226.33")) - ]; - AAAA = [ - (ttl zoneTTL (aaaa "fd7a:115c:a1e0:ab12:4843:cd96:6277:e221")) - ]; - SSHFP = [ - { - algorithm = "rsa"; - mode = "sha1"; - fingerprint = "97b910c37194cd98e7edca2d68104f4531721c22"; - ttl = zoneTTL; - } - { - algorithm = "rsa"; - mode = "sha256"; - fingerprint = "7915470f9275116889d5ca1fdbea20416d8372636c3d63653b272308608cf70f"; - ttl = zoneTTL; - } - { - algorithm = "ed25519"; - mode = "sha1"; - fingerprint = "1aff467e745a8d68ba032dd3d54597e10d31ccf8"; - ttl = zoneTTL; - } - { - algorithm = "ed25519"; - mode = "sha256"; - fingerprint = "e6dcdb73dc381ee2b354528cdaf8552364e75c34316d7e0c9819801daea5c951"; - ttl = zoneTTL; - } - ]; - /* - subdomains = { - _tcp.subdomains."*".TLSA = [ - { - certUsage = "dane-ee"; - selector = "spki"; - match = "sha256"; - certificate = "0b85bd8fd152ed8b29a25e7fd69c083138a7bd35d79aea62c111efcf17ede23f"; - ttl = zoneTTL; - } - ]; - _udp.subdomains."*".TLSA = [ - { - certUsage = "dane-ee"; - selector = "spki"; - match = "sha256"; - certificate = "0b85bd8fd152ed8b29a25e7fd69c083138a7bd35d79aea62c111efcf17ede23f"; - ttl = zoneTTL; - } - ]; - }; - */ - HTTPS = [ - { - svcPriority = 1; - targetName = "."; - alpn = ["http/1.1" "h2" "h3"]; - ipv4hint = ["100.119.226.33"]; - ipv6hint = ["fd7a:115c:a1e0:ab12:4843:cd96:6277:e221"]; - ttl = zoneTTL; - } - ]; - CAA = [ - { - issuerCritical = false; - tag = "issue"; - value = "letsencrypt.org"; - ttl = zoneTTL; - } - { - issuerCritical = false; - tag = "issuewild"; - value = "letsencrypt.org"; - ttl = zoneTTL; - } - { - issuerCritical = false; - tag = "iodef"; - value = "mailto:lotte@chir.rs"; - ttl = zoneTTL; - } - ]; - }; - thinkrac = { - A = [(ttl zoneTTL (a "100.95.136.81"))]; - AAAA = [ - (ttl zoneTTL (aaaa "fd7a:115c:a1e0::63df:8851")) - ]; - }; - nas = { - A = [(ttl zoneTTL (a "100.97.198.107"))]; - AAAA = [ - (ttl zoneTTL (aaaa "fd7a:115c:a1e0::2401:c66b")) - ]; - SSHFP = [ - { - algorithm = "rsa"; - mode = "sha1"; - fingerprint = "13e1173d96b822c98a7b3cd47be2e830f7758671"; - ttl = zoneTTL; - } - { - algorithm = "rsa"; - mode = "sha256"; - fingerprint = "2e87a3fd00918e4f1e47d3b14b59e846ee016a0d3269cb2524c8d28b121e130e"; - ttl = zoneTTL; - } - { - algorithm = "ed25519"; - mode = "sha1"; - fingerprint = "d1df2d244980a5e4dde37eed678b59a2239ca2ac"; - ttl = zoneTTL; - } - { - algorithm = "ed25519"; - mode = "sha256"; - fingerprint = "33d6c993ee3789fb6a2e60c243da7095eb79ce8e522b087f8a31ea400d7b034e"; - ttl = zoneTTL; - } - ]; - # TODO: add TLSA - HTTPS = [ - { - svcPriority = 1; - targetName = "."; - alpn = ["http/1.1" "h2" "h3"]; - ipv4hint = ["100.99.129.7"]; - ipv6hint = ["fd7a:115c:a1e0:ab12:4843:cd96:6263:8107"]; - ttl = zoneTTL; - } - ]; - CAA = [ - { - issuerCritical = false; - tag = "issue"; - value = "letsencrypt.org"; - ttl = zoneTTL; - } - { - issuerCritical = false; - tag = "issuewild"; - value = "letsencrypt.org"; - ttl = zoneTTL; - } - { - issuerCritical = false; - tag = "iodef"; - value = "mailto:lotte@chir.rs"; - ttl = zoneTTL; - } - ]; - }; - instance-20221213-1915 = { - A = [(ttl zoneTTL (a "100.99.173.107"))]; - AAAA = [ - (ttl zoneTTL (aaaa "fd7a:115c:a1e0:ab12:4843:cd96:6263:ad6b")) - ]; - }; - vf2 = { - A = [(ttl zoneTTL (a "100.80.150.39"))]; - AAAA = [ - (ttl zoneTTL (aaaa "fd7a:115c:a1e0::5a01:9627")) - ]; - }; - rainbow-resort = { - A = [(ttl zoneTTL (a "100.115.217.35"))]; - AAAA = [ - (ttl zoneTTL (aaaa "fd7a:115c:a1e0::4601:d923")) - ]; - }; - - grafana.CNAME = [(ttl zoneTTL (cname "nixos-8gb-fsn1-1"))]; - minio.CNAME = [(ttl zoneTTL (cname "nixos-8gb-fsn1-1"))]; - minio-console.CNAME = [(ttl zoneTTL (cname "nixos-8gb-fsn1-1"))]; - backup.CNAME = [(ttl zoneTTL (cname "nas"))]; - hydra.CNAME = [(ttl zoneTTL (cname "nas"))]; - mastodon.CNAME = [(ttl zoneTTL (cname "nas"))]; - matrix.CNAME = [(ttl zoneTTL (cname "nas"))]; - rspamd.CNAME = [(ttl zoneTTL (cname "nixos-8gb-fsn1-1"))]; - moa.CNAME = [(ttl zoneTTL (cname "nas"))]; - matrix-admin.CNAME = [(ttl zoneTTL (cname "nas"))]; - mautrix-discord.CNAME = [(ttl zoneTTL (cname "nas"))]; - mautrix-signal.CNAME = [(ttl zoneTTL (cname "nas"))]; - mautrix-telegram.CNAME = [(ttl zoneTTL (cname "nas"))]; - mautrix-whatsapp.CNAME = [(ttl zoneTTL (cname "nas"))]; - weblate.CNAME = [(ttl zoneTTL (cname "nas"))]; - jellyfin.CNAME = [(ttl zoneTTL (cname "nas"))]; - _acme-challenge = delegateTo [ - "ns1.chir.rs." - "ns2.chir.rs." - ]; - }; -} diff --git a/zones/signzone.nix b/zones/signzone.nix deleted file mode 100644 index 761fb776..00000000 --- a/zones/signzone.nix +++ /dev/null @@ -1,44 +0,0 @@ -{ - dns, - ksk, - zsk, - zone, - zonename, - ... -}: { - pkgs, - system, - ... -}: let - inherit (dns.util.${system}) writeZone; - zoneFile = writeZone zonename zone; -in { - systemd.services."zonesign@${zonename}" = { - description = "Signing the DNS zone '${zonename}'"; - wantedBy = ["bind.service"]; - before = ["bind.service"]; - script = '' - set -ex - - # Create the named directory if it doesn’t exist - ${pkgs.coreutils}/bin/mkdir -pv /var/lib/named - - # Sign the zone and write it to /var/lib/named - ${pkgs.bind}/bin/dnssec-signzone -o ${zonename} -k /run/secrets/${ksk} -a -3 $(${pkgs.coreutils}/bin/head -c 16 /dev/urandom | ${pkgs.coreutils}/bin/sha256sum | ${pkgs.coreutils}/bin/cut -b 1-32) -f /var/lib/named/${zonename} ${zoneFile} /run/secrets/${zsk} - ${pkgs.systemd}/bin/systemctl reload bind || true - ''; - }; - systemd.timers."zonesign@${zonename}" = { - description = "Resign the DNS zone '${zonename}'"; - timerConfig = { - Unit = "zonesign@${zonename}.service"; - OnUnitInactiveSec = 86400; - RandomizedDelaySec = 3600; - }; - wantedBy = ["bind.service"]; - }; - sops.secrets."${ksk}.key" = {}; - sops.secrets."${ksk}.private" = {}; - sops.secrets."${zsk}.key" = {}; - sops.secrets."${zsk}.private" = {}; -}

: "Ṗ" - : "ṙ" - : "Ṙ" - : "ṥ" - : "Ṥ" - : "ṧ" - : "Ṧ" - : "˙" - : "ṡ" - : "Ṡ" - : "ṫ" - : "Ṫ" - : "ẛ" - : "ͼ" - : "Ͼ" - : "Ṩ" - : "ṩ" - : "ͽ" - : "Ͽ" - : "Ͽ" - : "ͽ" - : "Ͽ" - : "⫃" - : "⫄" - : "ẇ" - : "Ẇ" - : "ẋ" - : "Ẋ" - : "ẏ" - : "Ẏ" - : "ż" - : "Ż" - <2> : "∯" - <3> : "∰" - : "å" - : "Å" - : "ǻ" - : "Ǻ" - : "ɕ" - : "ȡ" - : "̊" - : "ǻ" - : "Ǻ" - : "⦲" - : "≗" - : "∮" - : "∯" - : "∰" - : "↫" - : "ȴ" - : "ȵ" - : "˚" - : "⨢" - : "↬" - : "°" - : "ȶ" - : "↫" - : "ů" - : "Ů" - : "ẘ" - : "ẙ" - : "ʑ" - : "á" - : "Á" - : "ắ" - : "Ắ" - : "ấ" - : "Ấ" - : "ǽ" - : "Ǽ" - : "ǻ" - : "Ǻ" - : "ć" - : "Ć" - : "ḉ" - : "Ḉ" - : "а́" - : "А́" - : "р́" - : "Р́" - : "э́" - : "Э́" - : "ѓ" - : "Ѓ" - : "е́" - : "Е́" - : "и́" - : "И́" - : "ќ" - : "Ќ" - : "о́" - : "О́" - : "у́" - : "У́" - : "я́" - : "Я́" - : "ы́" - : "Ы́" - : "ю́" - : "Ю́́" - : "ṥ" - : "Ṥ" - : "ǻ" - : "Ǻ" - : "́" - : "ắ" - : "Ắ" - : "ḉ" - : "Ḉ" - : "ᾅ" - : "ᾕ" - : "ᾥ" - : "ᾭ" - : "ᾝ" - : "ᾝ" - : "ᾍ" - : "ᾍ" - : "ᾝ" - : "ᾝ" - : "ᾄ" - : "ᾔ" - : "ᾤ" - : "ᾬ" - : "ᾜ" - : "ᾜ" - : "ᾌ" - : "ᾌ" - : "ᾜ" - : "ᾜ" - : "ᾴ" - : "ῄ" - : "ῴ" - : "ấ" - : "Ấ" - : "ế" - : "Ế" - : "ố" - : "Ố" - : "ᾅ" - : "ᾕ" - : "ᾥ" - : "ᾭ" - : "ᾝ" - : "ᾝ" - : "ᾍ" - : "ᾍ" - : "ᾝ" - : "ᾝ" - : "ἅ" - : "Ἅ" - : "ἕ" - : "Ἕ" - : "ἥ" - : "Ἥ" - : "ἵ" - : "Ἵ" - : "ὥ" - : "Ὥ" - : "ὅ" - : "Ὅ" - : "ὕ" - : "Ὕ" - : "Ἥ" - : "Ἅ" - : "Ἕ" - : "Ἥ" - : "Ἵ" - : "Ὅ" - : "Ὕ" - : "ΐ" - : "ΰ" - : "ḯ" - : "Ḯ" - : "΅" - : "ǘ" - : "Ǘ" - : "ớ" - : "Ớ" - : "ứ" - : "Ứ" - : "ḗ" - : "Ḗ" - : "ṓ" - : "Ṓ" - : "ᾄ" - : "ᾔ" - : "ᾤ" - : "ᾬ" - : "ᾜ" - : "ᾜ" - : "ᾌ" - : "ᾌ" - : "ᾜ" - : "ᾜ" - : "ἄ" - : "Ἄ" - : "ἔ" - : "Ἔ" - : "ἤ" - : "Ἤ" - : "ἴ" - : "Ἴ" - : "ὤ" - : "Ὤ" - : "ὄ" - : "Ὄ" - : "ὔ" - : "Ἤ" - : "Ἄ" - : "Ἔ" - : "Ἤ" - : "Ἴ" - : "Ὄ" - : "ǿ" - : "Ǿ" - : "ã́" - : "Ã́" - : "ẽ́" - : "Ẽ́" - : "ĩ́" - : "Ĩ́" - : "ṍ" - : "Ṍ" - : "Ɔ̃́" - : "Ǝ̃́" - : "Ɛ̃́" - : "ǝ̃́" - : "ɔ̃́" - : "ɛ̃́" - : "ṹ" - : "Ṹ" - : "⇂" - : "ế" - : "Ế" - : "é" - : "É" - : "ḗ" - : "Ḗ" - : "ŋ́" - : "Ŋ́" - : "ǵ" - : "Ǵ" - : "ά" - : "Ά" - : "έ" - : "Έ" - : "ή" - : "Ή" - : "ΐ" - : "ί" - : "Ί" - : "ώ" - : "Ώ" - : "ό" - : "Ό" - : "ΰ" - : "ύ" - : "Ύ" - : "ḯ" - : "Ḯ" - : "í" - : "Í" - : "j́" - : "J́" - : "ḱ" - : "Ḱ" - : "↼" - : "ĺ" - : "Ĺ" - : "ḿ" - : "Ḿ" - : "ǽ" - : "Ǽ" - : "ấ" - : "Ấ" - : "ế" - : "Ế" - : "ố" - : "Ố" - : "ṍ" - : "Ṍ" - : "ṹ" - : "Ṹ" - : "ắ" - : "Ắ" - : "ḉ" - : "Ḉ" - : "ḉ" - : "Ḉ" - : "Ή" - : "Ή" - : "Ά" - : "Ά" - : "Έ" - : "Έ" - : "Ή" - : "Ή" - : "Ί" - : "Ί" - : "Ό" - : "Ό" - : "Ύ" - : "Ύ" - : "ǿ" - : "Ǿ" - : "ḗ" - : "Ḗ" - : "ṓ" - : "Ṓ" - : "ǻ" - : "Ǻ" - : "ἅ" - : "Ἅ" - : "ἕ" - : "Ἕ" - : "ἥ" - : "Ἥ" - : "ἵ" - : "Ἵ" - : "ὥ" - : "Ὥ" - : "ὅ" - : "Ὅ" - : "ὕ" - : "Ὕ" - : "ἄ" - : "Ἄ" - : "ἔ" - : "Ἔ" - : "ἤ" - : "Ἤ" - : "ἴ" - : "Ἴ" - : "ὤ" - : "Ὤ" - : "ὄ" - : "Ὄ" - : "ὔ" - : "ớ" - : "Ớ" - : "ứ" - : "Ứ" - : "ΐ" - : "ΰ" - : "ḯ" - : "Ḯ" - : "ǘ" - : "Ǘ" - : "ǿ" - : "Ǿ" - : "ắ" - : "Ắ" - : "ḗ" - : "Ḗ" - : "ṓ" - : "Ṓ" - : "ń" - : "Ń" - : "´" - : "ố" - : "Ố" - : "ớ" - : "Ớ" - : "ṓ" - : "Ṓ" - : "ó" - : "Ó" - : "Ǿ" - : "ǿ" - : "ṍ" - : "Ṍ" -