From fa80faefdccab7538c926ccd696120b0f8434c94 Mon Sep 17 00:00:00 2001 From: Daniel Siepmann Date: Mon, 10 Jun 2024 21:29:17 +0200 Subject: [PATCH] Add hikari3 --- .gitattributes | 1 + .../typo3-configuration/SystemSettings.php | 4 + home/home.nix | 5 +- home/packages.nix | 8 +- home/packages/custom/project/default.nix | 4 +- .../packages/custom/zcat-progress/default.nix | 4 + home/windowManager/i3.nix | 17 +- home/xsession.nix | 10 +- systems/hikari/web-development/default.nix | 1 - systems/hikari3/cachix.nix | 13 ++ systems/hikari3/cachix/fossar.nix | 13 ++ systems/hikari3/configuration.nix | 146 ++++++++++++++++++ systems/hikari3/files/hosts | Bin 0 -> 53 bytes systems/hikari3/hardware-configuration.nix | 48 ++++++ systems/hikari3/readme.rst | 35 +++++ systems/hikari3/web-development/default.nix | 134 ++++++++++++++++ .../web-development/lib/create-static.nix | 30 ++++ .../web-development/lib/create-typo3.nix | 129 ++++++++++++++++ .../hikari3/web-development/lib/mkcert.nix | 53 +++++++ .../web-development/projects/customer.nix | Bin .../projects/customer/reu-reu.nix | Bin 0 -> 564 bytes .../projects/customer/sa-sa.nix | Bin 0 -> 6710 bytes .../projects/customer/wm-interdaf.nix | Bin 0 -> 366 bytes .../projects/customer/wm-sozio.nix | Bin 0 -> 330 bytes .../web-development/projects/private.nix | 13 ++ .../projects/service-wrapper.nix | 28 ++++ .../web-development/projects/typo3.nix | 8 + 27 files changed, 686 insertions(+), 18 deletions(-) create mode 100644 systems/hikari3/cachix.nix create mode 100644 systems/hikari3/cachix/fossar.nix create mode 100644 systems/hikari3/configuration.nix create mode 100644 systems/hikari3/files/hosts create mode 100644 systems/hikari3/hardware-configuration.nix create mode 100644 systems/hikari3/readme.rst create mode 100644 systems/hikari3/web-development/default.nix create mode 100644 systems/hikari3/web-development/lib/create-static.nix create mode 100644 systems/hikari3/web-development/lib/create-typo3.nix create mode 100644 systems/hikari3/web-development/lib/mkcert.nix rename systems/{hikari => hikari3}/web-development/projects/customer.nix (100%) create mode 100644 systems/hikari3/web-development/projects/customer/reu-reu.nix create mode 100644 systems/hikari3/web-development/projects/customer/sa-sa.nix create mode 100644 systems/hikari3/web-development/projects/customer/wm-interdaf.nix create mode 100644 systems/hikari3/web-development/projects/customer/wm-sozio.nix create mode 100644 systems/hikari3/web-development/projects/private.nix create mode 100644 systems/hikari3/web-development/projects/service-wrapper.nix create mode 100644 systems/hikari3/web-development/projects/typo3.nix diff --git a/.gitattributes b/.gitattributes index aeda6bf..f18b823 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12,4 +12,5 @@ systems/hikari/files/hosts filter=git-crypt diff=git-crypt systems/hikari/web-development/projects/customer.nix filter=git-crypt diff=git-crypt systems/hikari3/files/hosts filter=git-crypt diff=git-crypt systems/hikari3/web-development/projects/customer.nix filter=git-crypt diff=git-crypt +systems/hikari3/web-development/projects/customer/* filter=git-crypt diff=git-crypt projects/** filter=git-crypt diff=git-crypt diff --git a/home/files/typo3-configuration/SystemSettings.php b/home/files/typo3-configuration/SystemSettings.php index 615a9aa..bb5287f 100644 --- a/home/files/typo3-configuration/SystemSettings.php +++ b/home/files/typo3-configuration/SystemSettings.php @@ -48,6 +48,10 @@ $GLOBALS['TYPO3_CONF_VARS']['BE']['versionNumberInFilename'] = false; $GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword'] = '$1$eItwKedf$13XVDVlAwXXMvO4DKw/YQ0'; +if (getenv('GIT_PATH')) { + $GLOBALS['TYPO3_CONF_VARS']['SYS']['binSetup'] = 'git=' . getenv('GIT_PATH') . '/git'; +} + $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] = '*.localhost DEVELOPMENT'; if (isset($GLOBALS['_SERVER']['HTTP_HOST'])) { $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] = $GLOBALS['_SERVER']['HTTP_HOST'] . ' DEVELOPMENT'; diff --git a/home/home.nix b/home/home.nix index 5bebd66..e34bce7 100644 --- a/home/home.nix +++ b/home/home.nix @@ -1,7 +1,6 @@ { config ,pkgs - ,hostName ,... }: @@ -84,9 +83,7 @@ in { TYPO3_CONTEXT = "Development/dsiepmann"; TYPO3_ADDITIONAL_CONFIGURATION = "${config.xdg.dataHome}/typo3-configuration/AdditionalConfiguration.inc.php"; - } // (if hostName == "hikari" then { - } else { - }); + }; shellAliases = { ll = "ls -laphv --color=auto"; diff --git a/home/packages.nix b/home/packages.nix index 11d9010..0df0067 100644 --- a/home/packages.nix +++ b/home/packages.nix @@ -81,7 +81,7 @@ unzip gtk-engine-murrine - ] ++ (if hostName == "hikari" then [ + ] ++ (if hostName == "hikari2" then [ # hikari acpilight # Used to support xbacklight @@ -91,6 +91,10 @@ # Needs to be installed by ubuntu on ubuntu, therefore only add on hikari sound-juicer + ] else (if hostName == "hikari3" then [ + # hikari 3 + (callPackage ./packages/custom/update-nixos-system { }) + (callPackage ./packages/custom/vpn-reuter-dynamics { }) ] else [ # hikari 2 @@ -98,5 +102,5 @@ # TODO: Right now only for Ubuntu (hikari2) system (callPackage ./packages/custom/backup { }) (callPackage ./packages/custom/vpn-reuter-dynamics { }) - ]); + ])); } diff --git a/home/packages/custom/project/default.nix b/home/packages/custom/project/default.nix index 69ac68b..580d809 100644 --- a/home/packages/custom/project/default.nix +++ b/home/packages/custom/project/default.nix @@ -7,8 +7,8 @@ let - positionOfCustomerName = if hostName == "hikari" then "5" else "7"; - mysqlUser = if hostName == "hikari" then "-u daniels" else ""; + positionOfCustomerName = if hostName == "hikari" then "5" else "6"; + mysqlUser = if hostName == "hikari2" then "" else "-u daniels"; in writeShellApplication { name = "custom-project"; diff --git a/home/packages/custom/zcat-progress/default.nix b/home/packages/custom/zcat-progress/default.nix index fe3b9c1..95af686 100644 --- a/home/packages/custom/zcat-progress/default.nix +++ b/home/packages/custom/zcat-progress/default.nix @@ -12,6 +12,10 @@ writeShellApplication { gzip ]; + # It might be necessary to execute: + # s/utf8mb4_0900_ai_ci/utf8mb4_unicode_520_ci/g + # As MariaDB has other collations as MySQL + text = '' zcat "$1" | pv -s "$(gzip -dc "$1" | wc -c)" ''; diff --git a/home/windowManager/i3.nix b/home/windowManager/i3.nix index c1a51a8..d5d1cc9 100644 --- a/home/windowManager/i3.nix +++ b/home/windowManager/i3.nix @@ -11,11 +11,13 @@ let inherit(config.xsession.windowManager.i3.config) modifier; - soundSwitcherForHikari2 = if hostName == "hikari" then "" else "-D pulse"; + soundSwitcher = if hostName == "hikari2" then "-D pulse" else ""; keyboardBrightnessDevice = if hostName == "hikari" then "--device smc::kbd_backlight" else ""; displayBrightnessDevice = if hostName == "hikari" then "--device acpi_video0" else ""; - displayBuiltInOutput = if hostName == "hikari" then "eDP-1" else "eDP1"; - displayDefaults = if hostName == "hikari" then "--output ${displayBuiltInOutput} --mode 1366x768 --scale 1.25x1.25" else ""; + displayBuiltInOutput = if hostName == "hikari1" then "eDPI" else "eDP-1"; + displayDefaults = if hostName == "hikari" then "--output ${displayBuiltInOutput} --mode 1366x768 --scale 1.25x1.25" else ( + if hostName == "hikari3" then "--output ${displayBuiltInOutput} --scale 0.75x0.75" else "" + ); in { xsession.windowManager.i3 = { enable = true; @@ -300,9 +302,9 @@ in { "XF86AudioPlay" = "exec cmus-remote --pause"; "XF86AudioPrev" = "exec cmus-remote --prev"; "XF86AudioNext" = "exec cmus-remote --next"; - "XF86AudioMute" = "exec \"amixer ${soundSwitcherForHikari2} sset Master 0\""; - "XF86AudioRaiseVolume" = "exec \"amixer ${soundSwitcherForHikari2} sset Master 5%+\""; - "XF86AudioLowerVolume" = "exec \"amixer ${soundSwitcherForHikari2} sset Master 5%-\""; + "XF86AudioMute" = "exec \"amixer ${soundSwitcher} -q set Master toggle\""; + "XF86AudioRaiseVolume" = "exec \"amixer ${soundSwitcher} sset Master 5%+\""; + "XF86AudioLowerVolume" = "exec \"amixer ${soundSwitcher} sset Master 5%-\""; # Switch sound device: # https://askubuntu.com/a/72076/491377 @@ -362,7 +364,8 @@ in { displays = { "a" = "exec xrandr --auto ${displayDefaults} && ${pkgs.brightnessctl}/bin/brightnessctl --device ${displayBrightnessDevice} s 10;"; "e" = "exec xrandr --auto --output ${displayBuiltInOutput} --off"; - "h" = "exec xrandr --output ${displayBuiltInOutput} --off --output DP1 --scale 1x1 --mode 2560x1440"; + + "h" = if hostName == "hikari3" then "exec xrandr --output ${displayBuiltInOutput} --off --output DP-3 --scale 1x1 --mode 2560x1440" else "exec xrandr --output ${displayBuiltInOutput} --off --output DP1 --scale 1x1 --mode 2560x1440"; "o" = "exec xrandr --output DP2 --primary --mode 3840x2160 --scale 0.65x0.65 --output ${displayBuiltInOutput} --off"; # Mirror diff --git a/home/xsession.nix b/home/xsession.nix index 26cc658..aee1171 100644 --- a/home/xsession.nix +++ b/home/xsession.nix @@ -13,7 +13,7 @@ let xinput --set-prop bcm5974 'libinput Natural Scrolling Enabled' 1 ''; initExtraHikari2 = '' - xrandr --auto --brightness 1 + xrandr --auto --output eDP-1 --brightness 1 # Enable tapping instead of phsyical click xinput --set-prop 'DELL07E6:00 06CB:76AF Touchpad' 'libinput Tapping Enabled' 1 @@ -21,13 +21,19 @@ let # Use natural scrolling for trackpad xinput --set-prop 'DELL07E6:00 06CB:76AF Touchpad' 'libinput Natural Scrolling Enabled' 1 ''; + initExtraHikari3 = '' + xrandr --auto --output eDP-1 --brightness 1 + + # Use natural scrolling for trackpad + xinput --set-prop 'PIXA3854:00 093A:0274 Touchpad' 'libinput Natural Scrolling Enabled' 1 + ''; in { xsession = { enable = true; numlock.enable = true; - initExtra = (if hostName == "hikari" then initExtraHikari else initExtraHikari2) + '' + initExtra = (if hostName == "hikari" then initExtraHikari else (if hostName == "hikari3" then initExtraHikari3 else initExtraHikari2)) + '' # Set backlight of output xbacklight -set 25 diff --git a/systems/hikari/web-development/default.nix b/systems/hikari/web-development/default.nix index ef063ca..0d54fa9 100644 --- a/systems/hikari/web-development/default.nix +++ b/systems/hikari/web-development/default.nix @@ -18,7 +18,6 @@ in { ./projects/private.nix ./projects/service-wrapper.nix ./projects/typo3.nix - ./projects/customer.nix ]; diff --git a/systems/hikari3/cachix.nix b/systems/hikari3/cachix.nix new file mode 100644 index 0000000..ecd2d39 --- /dev/null +++ b/systems/hikari3/cachix.nix @@ -0,0 +1,13 @@ + +# WARN: this file will get overwritten by $ cachix use +{ pkgs, lib, ... }: + +let + folder = ./cachix; + toImport = name: value: folder + ("/" + name); + filterCaches = key: value: value == "regular" && lib.hasSuffix ".nix" key; + imports = lib.mapAttrsToList toImport (lib.filterAttrs filterCaches (builtins.readDir folder)); +in { + inherit imports; + nix.settings.substituters = ["https://cache.nixos.org/"]; +} diff --git a/systems/hikari3/cachix/fossar.nix b/systems/hikari3/cachix/fossar.nix new file mode 100644 index 0000000..0e266e4 --- /dev/null +++ b/systems/hikari3/cachix/fossar.nix @@ -0,0 +1,13 @@ + +{ + nix = { + settings = { + substituters = [ + "https://fossar.cachix.org" + ]; + trusted-public-keys = [ + "fossar.cachix.org-1:Zv6FuqIboeHPWQS7ysLCJ7UT7xExb4OE8c4LyGb5AsE=" + ]; + }; + }; +} diff --git a/systems/hikari3/configuration.nix b/systems/hikari3/configuration.nix new file mode 100644 index 0000000..16db28b --- /dev/null +++ b/systems/hikari3/configuration.nix @@ -0,0 +1,146 @@ +# Edit this configuration file to define what should be installed on +# your system. help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, ... }: + +{ + imports = [ + ./hardware-configuration.nix + + ./cachix.nix + + ./web-development + ]; + + # Bootloader. + boot = { + loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + }; + + initrd.luks.devices."luks-ac06ecd4-7548-4807-a9c9-a616f8219e5f".device = "/dev/disk/by-uuid/ac06ecd4-7548-4807-a9c9-a616f8219e5f"; + }; + networking = { + hostName = "hikari3"; + extraHosts = builtins.readFile ./files/hosts; + # wireless.enable = true; # Enables wireless support via wpa_supplicant. + + # Configure network proxy if necessary + # proxy.default = "http://user:password@proxy:port/"; + # proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Enable networking + networkmanager.enable = true; + }; + + # Set your time zone. + time.timeZone = "Europe/Berlin"; + + # Select internationalisation properties. + i18n = { + defaultLocale = "en_US.UTF-8"; + + extraLocaleSettings = { + LC_ADDRESS = "de_DE.UTF-8"; + LC_IDENTIFICATION = "de_DE.UTF-8"; + LC_MEASUREMENT = "de_DE.UTF-8"; + LC_MONETARY = "de_DE.UTF-8"; + LC_NAME = "de_DE.UTF-8"; + LC_NUMERIC = "de_DE.UTF-8"; + LC_PAPER = "de_DE.UTF-8"; + LC_TELEPHONE = "de_DE.UTF-8"; + LC_TIME = "de_DE.UTF-8"; + }; + }; + + documentation = { + dev.enable = false; + doc.enable = false; + info.enable = false; + man.enable = true; + nixos.enable = true; + }; + + programs = { + # Enable network manager applet + nm-applet.enable = true; + dconf.enable = true; + }; + + services = { + # Enable the X11 windowing system. + xserver = { + enable = true; + displayManager.lightdm.enable = true; + desktopManager.lxqt.enable = true; + + # Configure keymap in X11 + xkb = { + layout = "us"; + variant = ""; + }; + }; + + # Enable automatic login for the user. + displayManager.autoLogin = { + enable = true; + user = "daniels"; + }; + }; + + # Enable sound with pipewire. + sound.enable = true; + # sound.mediaKeys.enable = true; + hardware.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.daniels = { + isNormalUser = true; + description = "Daniel Siepmann"; + extraGroups = [ "networkmanager" "wheel" ]; + packages = with pkgs; [ + i3lock + xsel + ]; + }; + + virtualisation.containers = { + enable = true; + }; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + git + xorg.xbacklight + openfortivpn + lxqt.pavucontrol-qt + ]; + + environment.variables = { + EDITOR = "vim"; + }; + + security = { + sudo.execWheelOnly = true; + }; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "23.11"; # Did you read the comment? + +} diff --git a/systems/hikari3/files/hosts b/systems/hikari3/files/hosts new file mode 100644 index 0000000000000000000000000000000000000000..2932c42b687a3d6d2ffa001f04a08d55a5780779 GIT binary patch literal 53 zcmV-50LuRWM@dveQdv+`0O~9cWJAEGgxD^=1u%<}J>r>_!hyV^nTpG#wC>riT^*z7 Lndv=p{8$!iYEBvW literal 0 HcmV?d00001 diff --git a/systems/hikari3/hardware-configuration.nix b/systems/hikari3/hardware-configuration.nix new file mode 100644 index 0000000..0298d08 --- /dev/null +++ b/systems/hikari3/hardware-configuration.nix @@ -0,0 +1,48 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = [ + + (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot = { + initrd = { + availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "uas" "sd_mod" ]; + kernelModules = [ ]; + }; + kernelModules = [ "kvm-amd" ]; + extraModulePackages = [ ]; + }; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/dd7cefcc-8920-4c3d-9559-962a3a584498"; + fsType = "ext4"; + }; + + boot.initrd.luks.devices."luks-ddc87566-6172-4909-987e-8600b96a41c2".device = "/dev/disk/by-uuid/ddc87566-6172-4909-987e-8600b96a41c2"; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/E402-2F77"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + swapDevices = [ + { device = "/dev/disk/by-uuid/877afecd-5cdb-452d-82d2-2fb0823d2879"; } + ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp193s0f3u2.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp1s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/systems/hikari3/readme.rst b/systems/hikari3/readme.rst new file mode 100644 index 0000000..be93e24 --- /dev/null +++ b/systems/hikari3/readme.rst @@ -0,0 +1,35 @@ +nixos for hikari +================ + +Hikari is my old MacBook Air. +It runs NixOS. + +I'm using that machine to migrate my existing Ubuntu Setup to NixOS in order to replace Ubuntu in the future. +And I use this Setup for my personal use. + +Installation +------------ + +Update to nixpkgs unstable via: + + nix-channel --add https://nixos.org/channels/nixos-unstable nixos + nix-channel --update + +See: https://nixos.wiki/wiki/Nix_channels + +I also need older php versions: + + nix-channel --add https://github.com/fossar/nix-phps/archive/master.tar.gz phps + nix-channel --update + +Add hardware channel: + + nix-channel --add https://github.com/NixOS/nixos-hardware/archive/master.tar.gz nixos-hardware + nix-channel --update + +See: https://github.com/NixOS/nixos-hardware + +TODOs +----- + +* Add docker-compose for Elasticsearch, proxy, solr. diff --git a/systems/hikari3/web-development/default.nix b/systems/hikari3/web-development/default.nix new file mode 100644 index 0000000..57709d5 --- /dev/null +++ b/systems/hikari3/web-development/default.nix @@ -0,0 +1,134 @@ +{ pkgs, config, lib, ... }: + +let + + mysqlEnsurePermissionsForDevUser = builtins.listToAttrs ( + map (databaseName: { + name = "${databaseName}.*"; + value = "ALL PRIVILEGES"; + }) + config.custom.web-development.databases + ); + +in { + imports = [ + + ./lib/mkcert.nix + + ./projects/service-wrapper.nix + ./projects/typo3.nix + ./projects/customer/sa-sa.nix + ./projects/customer/reu-reu.nix + ./projects/customer/wm-interdaf.nix + ./projects/customer/wm-sozio.nix + + ]; + + options = { + + custom.web-development = { + rootPath = lib.mkOption { + type = lib.types.path; + default = "/var/projects"; + description = '' + The root folder where web development happens. + All Projects need to be placed within this folder. + ''; + }; + databases = lib.mkOption { + type = lib.types.listOf lib.types.nonEmptyStr; + default = []; + example = lib.literalExpression "[namespace_project namespace2_project1]"; + description = '' + A list of all necessary databases. + Used to create the databases and grant permissions. + ''; + }; + }; + + }; + + config = { + + services = { + httpd = { + enable = true; + + user = "daniels"; + + adminAddr = "apache@hikari.localhost"; + + extraModules = [ + "info" + "rewrite" + "proxy" + "proxy_fcgi" + ]; + + virtualHosts."localhost".locations."/server-info" = { + extraConfig = '' + SetHandler server-info + Require local + ''; + }; + }; + + mysql = { + enable = true; + + package = pkgs.mariadb; + + ensureUsers = [ + { + name = "daniels"; + ensurePermissions = { + "*.*" = "ALL PRIVILEGES"; + }; + } + { + # INITIALLY once change dev user to be identified by password + # alter user dev@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD('dev'); + name = "testing"; + ensurePermissions = { + "*.*" = "ALL PRIVILEGES"; + }; + } + { + # INITIALLY once change dev user to be identified by password + # alter user dev@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD('dev'); + name = "dev"; + ensurePermissions = mysqlEnsurePermissionsForDevUser; + } + ]; + + ensureDatabases = [ + "testing" # Used by TYPO3 functional tests + "testing_at" # Used by TYPO3 Acceptance tests + ] ++ config.custom.web-development.databases; + + settings = { + mysqld = { + # sql_mode = "SRTICT_TRANS_TABLES;NO_ZERO_IN_DATE;NO_ZERO_DATE;ERROR_FOR_DIVISION_BY_ZERO;NO_ENGINE_SUBSTITUTION"; + general_log = true; + general_log_file = "/var/lib/mysql/query.log"; + + # slow_query_log = true; + # slow_query_log_file = "/var/lib/mysql/slow_query.log"; + # long_query_time = 1; + + bind-address = "127.0.0.1"; + }; + }; + }; + }; + + systemd.tmpfiles.rules = [ + # TODO: Improve handling of TYPO3 global configuration + # Current issue: The files are copied once. + # Changes are not reflected until reboot? + # I can edit the copied files, but need to keep files in sync. + "C ${config.custom.web-development.rootPath}/own/typo3-configuration - - - - ${config.users.users.daniels.home}/.config/nixpkgs/home/files/typo3-configuration" + ]; + + }; +} diff --git a/systems/hikari3/web-development/lib/create-static.nix b/systems/hikari3/web-development/lib/create-static.nix new file mode 100644 index 0000000..da16ec8 --- /dev/null +++ b/systems/hikari3/web-development/lib/create-static.nix @@ -0,0 +1,30 @@ +{ + config + , domain + , relativeDocumentRoot +}: + +let + documentRoot = "${config.custom.web-development.rootPath}/${relativeDocumentRoot}"; +in { + services = { + + httpd.virtualHosts.${domain} = { + forceSSL = true; + sslServerCert = "${config.custom.web-development.certFolder}${domain}.pem"; + sslServerKey = "${config.custom.web-development.certFolder}${domain}-key.pem"; + + inherit documentRoot; + + extraConfig = '' + + AllowOverride All + Require all granted + Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec + DirectoryIndex index.html Index.html + + ''; + }; + + }; +} diff --git a/systems/hikari3/web-development/lib/create-typo3.nix b/systems/hikari3/web-development/lib/create-typo3.nix new file mode 100644 index 0000000..1317f67 --- /dev/null +++ b/systems/hikari3/web-development/lib/create-typo3.nix @@ -0,0 +1,129 @@ +{ + config + , lib + , pkgs + , domain + , relativeDocumentRoot + , databaseName + , php +}: + +let + + documentRoot = "${config.custom.web-development.rootPath}/${relativeDocumentRoot}"; + + phpPackage = php.buildEnv { + extensions = { enabled, all }: enabled ++ (with all; [ + xdebug + ]); + extraConfig = '' + max_execution_time = 240 + max_input_vars = 1500 + + display_errors = 1 + error_reporting = E_ALL + + xdebug.mode = debug + xdebug.max_nesting_level = 400 + ''; + }; + +in { + custom.web-development = { + + databases = [databaseName]; + + }; + + services = { + + httpd.virtualHosts.${domain} = { + forceSSL = true; + sslServerCert = "${config.custom.web-development.certFolder}${domain}.pem"; + sslServerKey = "${config.custom.web-development.certFolder}${domain}-key.pem"; + + inherit documentRoot; + + extraConfig = '' + + AllowOverride None + Require all granted + DirectoryIndex index.php + + RewriteEngine On + + # Store the current location in an environment variable CWD to use + # mod_rewrite in .htaccess files without knowing the RewriteBase + RewriteCond $0#%{REQUEST_URI} ([^#]*)#(.*)\1$ + RewriteRule ^.*$ - [E=CWD:%2] + + # Rule for versioned static files, configured through: + # - $GLOBALS['TYPO3_CONF_VARS']['BE']['versionNumberInFilename'] + # - $GLOBALS['TYPO3_CONF_VARS']['FE']['versionNumberInFilename'] + # IMPORTANT: This rule has to be the very first RewriteCond in order to work! + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ %{ENV:CWD}$1.$3 [L] + + # Access block for folders + RewriteRule _(?:recycler|temp)_/ - [F] + RewriteRule fileadmin/templates/.*\.(?:txt|ts)$ - [F] + RewriteRule ^(?:vendor|typo3_src|typo3temp/var) - [F] + RewriteRule (?:typo3conf/ext|typo3/sysext|typo3/ext)/[^/]+/(?:Configuration|Resources/Private|Tests?|Documentation|docs?)/ - [F] + + # Block access to all hidden files and directories with the exception of + # the visible content from within the `/.well-known/` hidden directory (RFC 5785). + RewriteCond %{REQUEST_URI} "!(^|/)\.well-known/([^./]+./?)+$" [NC] + RewriteCond %{SCRIPT_FILENAME} -d [OR] + RewriteCond %{SCRIPT_FILENAME} -f + RewriteRule (?:^|/)\. - [F] + + # Stop rewrite processing, if we are in any other known directory + # NOTE: Add your additional local storages here + RewriteRule ^(?:fileadmin/|typo3conf/|typo3temp/|uploads/) - [L] + + # If the file/symlink/directory does not exist but is below /typo3/, redirect to the TYPO3 Backend entry point. + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-l + RewriteCond %{REQUEST_URI} ^/typo3/.*$ + RewriteRule ^typo3/(.*)$ %{ENV:CWD}typo3/index.php [QSA,L] + + # If the file/symlink/directory does not exist => Redirect to index.php. + # For httpd.conf, you need to prefix each '%{REQUEST_FILENAME}' with '%{DOCUMENT_ROOT}'. + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-l + RewriteRule ^.*$ %{ENV:CWD}index.php [QSA,L] + + + + SetHandler "proxy:unix:${config.services.phpfpm.pools."${domain}".socket}|fcgi://${domain}/" + + ''; + }; + + phpfpm.pools.${domain} = { + inherit (config.services.httpd) user group; + inherit phpPackage; + + settings = { + "listen.owner" = config.services.httpd.user; + "listen.group" = config.services.httpd.group; + "pm" = "ondemand"; + "pm.max_children" = 15; + }; + + phpEnv = { + TYPO3_ADDITIONAL_CONFIGURATION = "/var/projects/own/typo3-configuration/AdditionalConfiguration.inc.php"; + TYPO3_DATABASE = databaseName; + TYPO3_CONTEXT = "Development/dsiepmann"; + TYPO3_BASE = "https://${domain}/"; + + # Used via TYPO3 API, expose + IMAGEMAGICK_PATH = lib.makeBinPath [ pkgs.imagemagick ] + "/"; + }; + }; + + }; +} diff --git a/systems/hikari3/web-development/lib/mkcert.nix b/systems/hikari3/web-development/lib/mkcert.nix new file mode 100644 index 0000000..6598136 --- /dev/null +++ b/systems/hikari3/web-development/lib/mkcert.nix @@ -0,0 +1,53 @@ +{ pkgs, lib, config, ... }: + +let + certFolder = "/var/projects/own/mkcert"; + + domains = builtins.concatStringsSep " " ( + map (domain: "\"${domain}\"") ( + builtins.attrNames config.services.httpd.virtualHosts + ) + ); + + custom-generate-certs = pkgs.writeShellApplication { + name = "custom-generate-certs"; + + runtimeInputs = [ + pkgs.mkcert + ]; + + text = '' + mkdir -p ${certFolder} + pushd ${certFolder} + declare -a domains=(${domains}) + for domain in "''${domains[@]}" + do + CAROOT="${certFolder}" mkcert "$domain" + done + ''; + }; +in { + options = { + custom.web-development = { + certFolder = lib.mkOption { + type = lib.types.path; + default = "${config.custom.web-development.rootPath}/own/mkcert/"; + }; + }; + }; + + config = { + + # TODO: Run once before httpd service starts? + environment.systemPackages = [ + custom-generate-certs + ]; + + # NOTE: Disable until root certificate is generated, then add again + # Maybe check for file existense and throw proper error message? + security.pki.certificates = [ + (builtins.readFile "${config.custom.web-development.certFolder}rootCA.pem") + ]; + + }; +} diff --git a/systems/hikari/web-development/projects/customer.nix b/systems/hikari3/web-development/projects/customer.nix similarity index 100% rename from systems/hikari/web-development/projects/customer.nix rename to systems/hikari3/web-development/projects/customer.nix diff --git a/systems/hikari3/web-development/projects/customer/reu-reu.nix b/systems/hikari3/web-development/projects/customer/reu-reu.nix new file mode 100644 index 0000000000000000000000000000000000000000..b63a5a3f9dbdcea3575ec80a650101e850daf14b GIT binary patch literal 564 zcmV-40?YjXM@dveQdv+`01N*y2Uubz!!l8ph_a)7i&LYwSCUSAk+{-|=jy(kOM2Pi zC>@JPROMfoQu(6XR1QaodSejg(j_wo-C$tY10!4>`kbpsv?X#_Nkevp@zCV(>wzmL z+25&Ldmp_c&i8(W(!^PvUDC{}v9>_}71l@`8T6ws#^B73@qLZuB6AH-D?YFRzYZ3SioTD zFPX@sqL?(t~bdy!(rA#1lr zWA{A+VA{cBnuQ@cwWE?%L38fV?M?{4W zSX1;D zW8cQn1~Oi$kFRcqXZaQ0zo zCkpO&^MaR16jxR*Y&5z~>;GT90T5z$SB?$;#g?Kx^W5rzuX8k1!nO;oBB@Qo^OH%b CgBh3r literal 0 HcmV?d00001 diff --git a/systems/hikari3/web-development/projects/customer/sa-sa.nix b/systems/hikari3/web-development/projects/customer/sa-sa.nix new file mode 100644 index 0000000000000000000000000000000000000000..7e05ddff24378f935f22ca5bb024b512e82f51ed GIT binary patch literal 6710 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%0Dx(@qy!tEVpEA^FcINQ^%1KEiV^?k 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 literal 0 HcmV?d00001 diff --git a/systems/hikari3/web-development/projects/private.nix b/systems/hikari3/web-development/projects/private.nix new file mode 100644 index 0000000..771d83d --- /dev/null +++ b/systems/hikari3/web-development/projects/private.nix @@ -0,0 +1,13 @@ +{ pkgs, lib, config, ... }: + +let + + php = pkgs.php83; + +in import ./../lib/create-typo3.nix { + inherit config lib pkgs php; + + domain = "daniel-siepmann.own.localhost"; + relativeDocumentRoot = "own/daniel-siepmann/project/public/"; + databaseName = "own_danielsiepmann"; +} diff --git a/systems/hikari3/web-development/projects/service-wrapper.nix b/systems/hikari3/web-development/projects/service-wrapper.nix new file mode 100644 index 0000000..7e78f12 --- /dev/null +++ b/systems/hikari3/web-development/projects/service-wrapper.nix @@ -0,0 +1,28 @@ +{ pkgs, lib, config, ... }: + +let + domain = "mailhog.localhost"; +in { + services = { + + httpd.virtualHosts.${domain} = { + forceSSL = true; + sslServerCert = "${config.custom.web-development.certFolder}${domain}.pem"; + sslServerKey = "${config.custom.web-development.certFolder}${domain}-key.pem"; + + extraConfig = '' + RequestHeader unset Authorization + ProxyRequests Off + ProxyPreserveHost On + ProxyPass / http://localhost:8025/ + ProxyPassReverse / http://localhost:8025/ + + # Mailhog specific + + ProxyPass ws://localhost:8025/api/v2/websocket + + ''; + }; + + }; +} diff --git a/systems/hikari3/web-development/projects/typo3.nix b/systems/hikari3/web-development/projects/typo3.nix new file mode 100644 index 0000000..bd4596e --- /dev/null +++ b/systems/hikari3/web-development/projects/typo3.nix @@ -0,0 +1,8 @@ +{ lib, config, ... }: + +import ./../lib/create-static.nix { + inherit config; + + domain = "tea-docs.typo3.localhost"; + relativeDocumentRoot = "typo3/tea/Documentation-GENERATED-temp/Result/project/0.0.0/"; +}