first
This commit is contained in:
		
						commit
						164a89ea3e
					
				
							
								
								
									
										9
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					# helpers - pliki pomocnicze dla projektu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Lista plików i katalogów:
 | 
				
			||||||
 | 
					- public_html/ --> template katalogu ze stroną dla użytkownika
 | 
				
			||||||
 | 
					- irc.conf --> domyślna konfiguracja weechat dla użytkownika
 | 
				
			||||||
 | 
					- add_user.sh --> skrypt służący do dodawania użytkownika
 | 
				
			||||||
 | 
					- del_user.sh --> skrypt służący do permanentnego usunięcia użytkownika
 | 
				
			||||||
 | 
					- cgenforce.sh --> skrypt uruchamiany z crona co minutę, podpina procesy wszystkich użytkowników pod cgroups w celu ustawienia limitów
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										89
									
								
								add_user.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										89
									
								
								add_user.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,89 @@
 | 
				
			|||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					# Usage: add_user.sh <login>
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LOGIN="$1"
 | 
				
			||||||
 | 
					[ -z "$LOGIN" ] && { echo "Użycie: $0 <login>"; exit 1; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 1. Użytkownik i hasło
 | 
				
			||||||
 | 
					PASS="$(openssl rand -base64 12)"
 | 
				
			||||||
 | 
					adduser -D -s /bin/sh -h /home/$LOGIN -H "$LOGIN"
 | 
				
			||||||
 | 
					echo "$LOGIN:$PASS" | chpasswd
 | 
				
			||||||
 | 
					addgroup $LOGIN tildeusers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 2. Dataset ZFS  (quota 200 MB)
 | 
				
			||||||
 | 
					zfs create -o mountpoint=/home/$LOGIN -o quota=200M tank/ROOT/homes/$LOGIN
 | 
				
			||||||
 | 
					chown $LOGIN:$LOGIN /home/$LOGIN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkdir -p /home/$LOGIN/Maildir/Inbox/cur
 | 
				
			||||||
 | 
					mkdir -p /home/$LOGIN/Maildir/Inbox/new
 | 
				
			||||||
 | 
					mkdir -p /home/$LOGIN/Maildir/Inbox/tmp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkdir -p /home/$LOGIN/Maildir/Sent/cur
 | 
				
			||||||
 | 
					mkdir -p /home/$LOGIN/Maildir/Sent/new
 | 
				
			||||||
 | 
					mkdir -p /home/$LOGIN/Maildir/Sent/tmp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkdir -p /home/$LOGIN/Maildir/Drafts/cur
 | 
				
			||||||
 | 
					mkdir -p /home/$LOGIN/Maildir/Drafts/new
 | 
				
			||||||
 | 
					mkdir -p /home/$LOGIN/Maildir/Drafts/tmp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkdir -p /home/$LOGIN/Maildir/Trash/cur
 | 
				
			||||||
 | 
					mkdir -p /home/$LOGIN/Maildir/Trash/new
 | 
				
			||||||
 | 
					mkdir -p /home/$LOGIN/Maildir/Trash/tmp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cp -r /root/helpers/public_html /home/$LOGIN/
 | 
				
			||||||
 | 
					sed -i "s/<<USER>>/$LOGIN/g" /home/$LOGIN/public_html/index.php
 | 
				
			||||||
 | 
					sed -i "s/<<USER>>/$LOGIN/g" /home/$LOGIN/public_html/parts/header.php
 | 
				
			||||||
 | 
					sed -i "s/<<USER>>/$LOGIN/g" /home/$LOGIN/public_html/blog/index.php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkdir -p /home/$LOGIN/.config/weechat/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cp irc.conf /home/$LOGIN/.config/weechat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cat << EOF > /home/$LOGIN/.tmux.conf
 | 
				
			||||||
 | 
					set -g mouse on
 | 
				
			||||||
 | 
					setw -g mode-keys vi
 | 
				
			||||||
 | 
					bind -n F1 select-window -t 0
 | 
				
			||||||
 | 
					bind -n F2 select-window -t 1
 | 
				
			||||||
 | 
					bind -n F3 select-window -t 2
 | 
				
			||||||
 | 
					bind -n F12 detach
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cat << EOF > /home/$LOGIN/.profile
 | 
				
			||||||
 | 
					if [ -z "$TMUX" ]; then
 | 
				
			||||||
 | 
					    if ! tmux has-session -t main 2>/dev/null; then
 | 
				
			||||||
 | 
					        tmux new-session -d -s main -n Mail 'neomutt'
 | 
				
			||||||
 | 
					        tmux new-window -t main:1 -n IRC 'weechat'
 | 
				
			||||||
 | 
					        tmux new-window -t main:2 -n Shell 'ash'
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Uruchom motd tylko gdy user wchodzi do Shell – okno 2
 | 
				
			||||||
 | 
					    tmux send-keys -t main:2 '/usr/local/bin/tylda-motd.sh' C-m
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    tmux select-window -t main:0
 | 
				
			||||||
 | 
					    exec tmux attach-session -t main
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					chown -R $LOGIN:$LOGIN /home/$LOGIN/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 3. Cgroup v2
 | 
				
			||||||
 | 
					CG_ROOT=/sys/fs/cgroup/users
 | 
				
			||||||
 | 
					mkdir -p "$CG_ROOT"
 | 
				
			||||||
 | 
					# upewnij się, że kontrolery włączone w parent „users”
 | 
				
			||||||
 | 
					echo "+cpu +memory" > "$CG_ROOT/cgroup.subtree_control" 2>/dev/null || true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					USER_CG="$CG_ROOT/$LOGIN"
 | 
				
			||||||
 | 
					mkdir "$USER_CG"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sendmail -f void@tylda.org $LOGIN@tylda.org < welcome.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo 524288000           > "$USER_CG/memory.max"     # 500 MB RAM
 | 
				
			||||||
 | 
					echo "50000 100000" > "$USER_CG/cpu.max"        # 50 % CPU (quota/period μs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "===== NOWE KONTO ====="
 | 
				
			||||||
 | 
					echo "login : $LOGIN"
 | 
				
			||||||
 | 
					echo "hasło : $PASS"
 | 
				
			||||||
 | 
					echo "RAM   : 500 MB"
 | 
				
			||||||
 | 
					echo "CPU   : 50 %"
 | 
				
			||||||
							
								
								
									
										12
									
								
								cgenforce.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								cgenforce.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					USERS=$(ps | grep -v root | grep -v PID | awk '{print $2}' | uniq)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for i in 1 2 3 4 5 6 7 8 9 10 11 12; do
 | 
				
			||||||
 | 
						for user in $USERS; do
 | 
				
			||||||
 | 
							for pid in $(pgrep -u "$user"); do
 | 
				
			||||||
 | 
								echo "$pid" > "/sys/fs/cgroup/users/$user/cgroup.procs"
 | 
				
			||||||
 | 
							done
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
						sleep 5
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
							
								
								
									
										49
									
								
								del_user.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										49
									
								
								del_user.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,49 @@
 | 
				
			|||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# === CONFIG ===
 | 
				
			||||||
 | 
					POOL="tank"
 | 
				
			||||||
 | 
					HOMES_DATASET="${POOL}/ROOT/homes"
 | 
				
			||||||
 | 
					MOUNTROOT="/home"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# === ARGUMENT ===
 | 
				
			||||||
 | 
					USERNAME="$1"
 | 
				
			||||||
 | 
					if [ -z "$USERNAME" ]; then
 | 
				
			||||||
 | 
					    echo "Użycie: $0 <username>"
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# === CONFIRM ===
 | 
				
			||||||
 | 
					echo "Na pewno chcesz usunąć użytkownika $USERNAME? [y/N]"
 | 
				
			||||||
 | 
					read -r CONFIRM
 | 
				
			||||||
 | 
					[ "$CONFIRM" != "y" ] && echo "Anulowano." && exit 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "[i] Zabijam wszystkie procesy użytkownika $USERNAME..."
 | 
				
			||||||
 | 
					pkill -KILL -u "$USERNAME" 2>/dev/null || true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sleep 1  # Dajmy kernelowi chwilę na posprzątanie
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# === REMOVE FROM CGROUPS ===
 | 
				
			||||||
 | 
					echo "[i] Odłączam procesy z cgroup (jeśli coś zostało)..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rmdir "/sys/fs/cgroup/users/${USERNAME}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# === UNMOUNT HOME DIR ===
 | 
				
			||||||
 | 
					ZFS_DATASET="${HOMES_DATASET}/${USERNAME}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if mountpoint -q "${MOUNTROOT}/${USERNAME}"; then
 | 
				
			||||||
 | 
					    echo "[i] Odmontowuję katalog ${MOUNTROOT}/${USERNAME}..."
 | 
				
			||||||
 | 
					    umount "${MOUNTROOT}/${USERNAME}" || umount -l "${MOUNTROOT}/${USERNAME}" || true
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# === DESTROY ZFS DATASET ===
 | 
				
			||||||
 | 
					echo "[i] Usuwam dataset ZFS: $ZFS_DATASET"
 | 
				
			||||||
 | 
					zfs destroy "$ZFS_DATASET"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# === REMOVE USER FROM SYSTEM ===
 | 
				
			||||||
 | 
					echo "[i] Usuwam użytkownika systemowego..."
 | 
				
			||||||
 | 
					deluser --remove-home "$USERNAME" 2>/dev/null || true
 | 
				
			||||||
 | 
					rm -rf "${MOUNTROOT:?}/${USERNAME}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "[+] Użytkownik $USERNAME został w pełni usunięty."
 | 
				
			||||||
							
								
								
									
										238
									
								
								irc.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										238
									
								
								irc.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,238 @@
 | 
				
			|||||||
 | 
					#
 | 
				
			||||||
 | 
					# weechat -- irc.conf
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# WARNING: It is NOT recommended to edit this file by hand,
 | 
				
			||||||
 | 
					# especially if WeeChat is running.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Use commands like /set or /fset to change settings in WeeChat.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# For more info, see: https://weechat.org/doc/weechat/quickstart/
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config_version = 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[look]
 | 
				
			||||||
 | 
					buffer_open_before_autojoin = on
 | 
				
			||||||
 | 
					buffer_open_before_join = off
 | 
				
			||||||
 | 
					buffer_switch_autojoin = on
 | 
				
			||||||
 | 
					buffer_switch_join = on
 | 
				
			||||||
 | 
					color_nicks_in_names = off
 | 
				
			||||||
 | 
					color_nicks_in_nicklist = off
 | 
				
			||||||
 | 
					color_nicks_in_server_messages = on
 | 
				
			||||||
 | 
					color_pv_nick_like_channel = on
 | 
				
			||||||
 | 
					ctcp_time_format = "%a, %d %b %Y %T %z"
 | 
				
			||||||
 | 
					display_account_message = on
 | 
				
			||||||
 | 
					display_away = local
 | 
				
			||||||
 | 
					display_ctcp_blocked = on
 | 
				
			||||||
 | 
					display_ctcp_reply = on
 | 
				
			||||||
 | 
					display_ctcp_unknown = on
 | 
				
			||||||
 | 
					display_extended_join = on
 | 
				
			||||||
 | 
					display_host_join = on
 | 
				
			||||||
 | 
					display_host_join_local = on
 | 
				
			||||||
 | 
					display_host_notice = on
 | 
				
			||||||
 | 
					display_host_quit = on
 | 
				
			||||||
 | 
					display_host_wallops = on
 | 
				
			||||||
 | 
					display_join_message = "329,332,333,366"
 | 
				
			||||||
 | 
					display_old_topic = on
 | 
				
			||||||
 | 
					display_pv_away_once = on
 | 
				
			||||||
 | 
					display_pv_back = on
 | 
				
			||||||
 | 
					display_pv_nick_change = on
 | 
				
			||||||
 | 
					display_pv_warning_address = off
 | 
				
			||||||
 | 
					highlight_channel = "$nick"
 | 
				
			||||||
 | 
					highlight_pv = "$nick"
 | 
				
			||||||
 | 
					highlight_server = "$nick"
 | 
				
			||||||
 | 
					highlight_tags_restrict = "irc_privmsg,irc_notice"
 | 
				
			||||||
 | 
					ignore_tag_messages = off
 | 
				
			||||||
 | 
					item_channel_modes_hide_args = "k"
 | 
				
			||||||
 | 
					item_display_server = buffer_plugin
 | 
				
			||||||
 | 
					item_nick_modes = on
 | 
				
			||||||
 | 
					item_nick_prefix = on
 | 
				
			||||||
 | 
					join_auto_add_chantype = off
 | 
				
			||||||
 | 
					list_buffer = on
 | 
				
			||||||
 | 
					list_buffer_format_export = "${name} (${users}): "${topic}""
 | 
				
			||||||
 | 
					list_buffer_scroll_horizontal = 10
 | 
				
			||||||
 | 
					list_buffer_sort = "~name2"
 | 
				
			||||||
 | 
					list_buffer_topic_strip_colors = on
 | 
				
			||||||
 | 
					msgbuffer_fallback = current
 | 
				
			||||||
 | 
					new_channel_position = none
 | 
				
			||||||
 | 
					new_list_position = none
 | 
				
			||||||
 | 
					new_pv_position = none
 | 
				
			||||||
 | 
					nick_completion_smart = speakers
 | 
				
			||||||
 | 
					nick_mode = prefix
 | 
				
			||||||
 | 
					nick_mode_empty = off
 | 
				
			||||||
 | 
					nicks_hide_password = "nickserv"
 | 
				
			||||||
 | 
					notice_as_pv = auto
 | 
				
			||||||
 | 
					notice_nicks_disable_notify = "chanserv,nickserv"
 | 
				
			||||||
 | 
					notice_welcome_redirect = on
 | 
				
			||||||
 | 
					notice_welcome_tags = ""
 | 
				
			||||||
 | 
					notify_tags_ison = "notify_message"
 | 
				
			||||||
 | 
					notify_tags_whois = "notify_message"
 | 
				
			||||||
 | 
					open_pv_buffer_echo_msg = on
 | 
				
			||||||
 | 
					part_closes_buffer = off
 | 
				
			||||||
 | 
					pv_buffer = independent
 | 
				
			||||||
 | 
					pv_tags = "notify_private"
 | 
				
			||||||
 | 
					raw_messages = 256
 | 
				
			||||||
 | 
					server_buffer = merge_with_core
 | 
				
			||||||
 | 
					smart_filter = on
 | 
				
			||||||
 | 
					smart_filter_account = on
 | 
				
			||||||
 | 
					smart_filter_chghost = on
 | 
				
			||||||
 | 
					smart_filter_delay = 5
 | 
				
			||||||
 | 
					smart_filter_join = on
 | 
				
			||||||
 | 
					smart_filter_join_unmask = 30
 | 
				
			||||||
 | 
					smart_filter_mode = "+"
 | 
				
			||||||
 | 
					smart_filter_nick = on
 | 
				
			||||||
 | 
					smart_filter_quit = on
 | 
				
			||||||
 | 
					smart_filter_setname = on
 | 
				
			||||||
 | 
					temporary_servers = off
 | 
				
			||||||
 | 
					topic_strip_colors = off
 | 
				
			||||||
 | 
					typing_status_nicks = off
 | 
				
			||||||
 | 
					typing_status_self = off
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[color]
 | 
				
			||||||
 | 
					input_nick = lightcyan
 | 
				
			||||||
 | 
					item_lag_counting = default
 | 
				
			||||||
 | 
					item_lag_finished = yellow
 | 
				
			||||||
 | 
					item_nick_modes = default
 | 
				
			||||||
 | 
					item_tls_version_deprecated = yellow
 | 
				
			||||||
 | 
					item_tls_version_insecure = red
 | 
				
			||||||
 | 
					item_tls_version_ok = green
 | 
				
			||||||
 | 
					list_buffer_line_selected = white
 | 
				
			||||||
 | 
					list_buffer_line_selected_bg = 24
 | 
				
			||||||
 | 
					message_account = cyan
 | 
				
			||||||
 | 
					message_chghost = brown
 | 
				
			||||||
 | 
					message_join = green
 | 
				
			||||||
 | 
					message_kick = red
 | 
				
			||||||
 | 
					message_quit = red
 | 
				
			||||||
 | 
					message_setname = brown
 | 
				
			||||||
 | 
					mirc_remap = "1,-1:darkgray"
 | 
				
			||||||
 | 
					nick_prefixes = "y:lightred;q:lightred;a:lightcyan;o:lightgreen;h:lightmagenta;v:yellow;*:lightblue"
 | 
				
			||||||
 | 
					notice = green
 | 
				
			||||||
 | 
					reason_kick = default
 | 
				
			||||||
 | 
					reason_quit = 244
 | 
				
			||||||
 | 
					term_remap = "0,-1:darkgray"
 | 
				
			||||||
 | 
					topic_current = default
 | 
				
			||||||
 | 
					topic_new = 36
 | 
				
			||||||
 | 
					topic_old = 244
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[network]
 | 
				
			||||||
 | 
					autoreconnect_delay_growing = 2
 | 
				
			||||||
 | 
					autoreconnect_delay_max = 600
 | 
				
			||||||
 | 
					ban_mask_default = "*!$ident@$host"
 | 
				
			||||||
 | 
					colors_receive = on
 | 
				
			||||||
 | 
					colors_send = on
 | 
				
			||||||
 | 
					lag_check = 60
 | 
				
			||||||
 | 
					lag_max = 1800
 | 
				
			||||||
 | 
					lag_min_show = 500
 | 
				
			||||||
 | 
					lag_reconnect = 300
 | 
				
			||||||
 | 
					lag_refresh_interval = 1
 | 
				
			||||||
 | 
					notify_check_ison = 1
 | 
				
			||||||
 | 
					notify_check_whois = 5
 | 
				
			||||||
 | 
					sasl_fail_unavailable = on
 | 
				
			||||||
 | 
					send_unknown_commands = off
 | 
				
			||||||
 | 
					whois_double_nick = off
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[msgbuffer]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ctcp]
 | 
				
			||||||
 | 
					clientinfo = "${clientinfo}"
 | 
				
			||||||
 | 
					source = "${download}"
 | 
				
			||||||
 | 
					time = "${time}"
 | 
				
			||||||
 | 
					version = "WeeChat ${version}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ignore]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[server_default]
 | 
				
			||||||
 | 
					addresses = ""
 | 
				
			||||||
 | 
					anti_flood = 2000
 | 
				
			||||||
 | 
					autoconnect = off
 | 
				
			||||||
 | 
					autojoin = ""
 | 
				
			||||||
 | 
					autojoin_delay = 0
 | 
				
			||||||
 | 
					autojoin_dynamic = off
 | 
				
			||||||
 | 
					autoreconnect = on
 | 
				
			||||||
 | 
					autoreconnect_delay = 10
 | 
				
			||||||
 | 
					autorejoin = off
 | 
				
			||||||
 | 
					autorejoin_delay = 30
 | 
				
			||||||
 | 
					away_check = 0
 | 
				
			||||||
 | 
					away_check_max_nicks = 25
 | 
				
			||||||
 | 
					capabilities = "*"
 | 
				
			||||||
 | 
					charset_message = message
 | 
				
			||||||
 | 
					command = ""
 | 
				
			||||||
 | 
					command_delay = 0
 | 
				
			||||||
 | 
					connection_timeout = 60
 | 
				
			||||||
 | 
					default_chantypes = "#&"
 | 
				
			||||||
 | 
					ipv6 = auto
 | 
				
			||||||
 | 
					local_hostname = ""
 | 
				
			||||||
 | 
					msg_kick = ""
 | 
				
			||||||
 | 
					msg_part = "WeeChat ${info:version}"
 | 
				
			||||||
 | 
					msg_quit = "WeeChat ${info:version}"
 | 
				
			||||||
 | 
					nicks = "${username},${username}2,${username}3,${username}4,${username}5"
 | 
				
			||||||
 | 
					nicks_alternate = on
 | 
				
			||||||
 | 
					notify = ""
 | 
				
			||||||
 | 
					password = ""
 | 
				
			||||||
 | 
					proxy = ""
 | 
				
			||||||
 | 
					realname = ""
 | 
				
			||||||
 | 
					registered_mode = "r"
 | 
				
			||||||
 | 
					sasl_fail = reconnect
 | 
				
			||||||
 | 
					sasl_key = ""
 | 
				
			||||||
 | 
					sasl_mechanism = plain
 | 
				
			||||||
 | 
					sasl_password = ""
 | 
				
			||||||
 | 
					sasl_timeout = 15
 | 
				
			||||||
 | 
					sasl_username = ""
 | 
				
			||||||
 | 
					split_msg_max_length = 512
 | 
				
			||||||
 | 
					tls = on
 | 
				
			||||||
 | 
					tls_cert = ""
 | 
				
			||||||
 | 
					tls_dhkey_size = 2048
 | 
				
			||||||
 | 
					tls_fingerprint = ""
 | 
				
			||||||
 | 
					tls_password = ""
 | 
				
			||||||
 | 
					tls_priorities = "NORMAL"
 | 
				
			||||||
 | 
					tls_verify = on
 | 
				
			||||||
 | 
					usermode = ""
 | 
				
			||||||
 | 
					username = "${username}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[server]
 | 
				
			||||||
 | 
					tylda.addresses = "irc.tylda.org"
 | 
				
			||||||
 | 
					tylda.proxy
 | 
				
			||||||
 | 
					tylda.ipv6
 | 
				
			||||||
 | 
					tylda.tls = off
 | 
				
			||||||
 | 
					tylda.tls_cert
 | 
				
			||||||
 | 
					tylda.tls_password
 | 
				
			||||||
 | 
					tylda.tls_priorities
 | 
				
			||||||
 | 
					tylda.tls_dhkey_size
 | 
				
			||||||
 | 
					tylda.tls_fingerprint
 | 
				
			||||||
 | 
					tylda.tls_verify
 | 
				
			||||||
 | 
					tylda.password
 | 
				
			||||||
 | 
					tylda.capabilities
 | 
				
			||||||
 | 
					tylda.sasl_mechanism
 | 
				
			||||||
 | 
					tylda.sasl_username
 | 
				
			||||||
 | 
					tylda.sasl_password
 | 
				
			||||||
 | 
					tylda.sasl_key
 | 
				
			||||||
 | 
					tylda.sasl_timeout
 | 
				
			||||||
 | 
					tylda.sasl_fail
 | 
				
			||||||
 | 
					tylda.autoconnect = on
 | 
				
			||||||
 | 
					tylda.autoreconnect
 | 
				
			||||||
 | 
					tylda.autoreconnect_delay
 | 
				
			||||||
 | 
					tylda.nicks
 | 
				
			||||||
 | 
					tylda.nicks_alternate
 | 
				
			||||||
 | 
					tylda.username
 | 
				
			||||||
 | 
					tylda.realname
 | 
				
			||||||
 | 
					tylda.local_hostname
 | 
				
			||||||
 | 
					tylda.usermode
 | 
				
			||||||
 | 
					tylda.command_delay
 | 
				
			||||||
 | 
					tylda.command
 | 
				
			||||||
 | 
					tylda.autojoin_delay
 | 
				
			||||||
 | 
					tylda.autojoin
 | 
				
			||||||
 | 
					tylda.autojoin_dynamic
 | 
				
			||||||
 | 
					tylda.autorejoin
 | 
				
			||||||
 | 
					tylda.autorejoin_delay
 | 
				
			||||||
 | 
					tylda.connection_timeout
 | 
				
			||||||
 | 
					tylda.anti_flood
 | 
				
			||||||
 | 
					tylda.away_check
 | 
				
			||||||
 | 
					tylda.away_check_max_nicks
 | 
				
			||||||
 | 
					tylda.msg_kick
 | 
				
			||||||
 | 
					tylda.msg_part
 | 
				
			||||||
 | 
					tylda.msg_quit
 | 
				
			||||||
 | 
					tylda.notify
 | 
				
			||||||
 | 
					tylda.split_msg_max_length
 | 
				
			||||||
 | 
					tylda.charset_message
 | 
				
			||||||
 | 
					tylda.default_chantypes
 | 
				
			||||||
 | 
					tylda.registered_mode
 | 
				
			||||||
							
								
								
									
										30
									
								
								public_html/blog/index.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								public_html/blog/index.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					ini_set("display_errors", "On");
 | 
				
			||||||
 | 
					error_reporting(E_ALL);
 | 
				
			||||||
 | 
					include '../parts/header.php';
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
 | 
					    <div id="top-bar">
 | 
				
			||||||
 | 
					        <h1>> Blog</h1>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <article id="content">
 | 
				
			||||||
 | 
					    <div class="post">Poniżej znajdziesz listę wszystkich postów na blogu ~<<USER>></div>
 | 
				
			||||||
 | 
					    <?php
 | 
				
			||||||
 | 
					        $posts_dir = 'posts/';
 | 
				
			||||||
 | 
					        $posts = array_diff(scandir($posts_dir), array('..', '.'));
 | 
				
			||||||
 | 
					        foreach ($posts as $post) {
 | 
				
			||||||
 | 
					            $f = fopen("posts/$post", "r");
 | 
				
			||||||
 | 
					            $line = fgets($f);
 | 
				
			||||||
 | 
					            fclose($f);
 | 
				
			||||||
 | 
					            $data = substr(substr($line, 4), 0, -4);
 | 
				
			||||||
 | 
					            $post_data = explode(";%%%;", $data);
 | 
				
			||||||
 | 
					            $title = $post_data[0];
 | 
				
			||||||
 | 
					            $date = $post_data[1];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            echo "<div class=\"post\"><i class=\"post_date\">$date</i> - <a href=\"posts/$post\" class=\"link\">$title</a></div>";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ?>
 | 
				
			||||||
 | 
					    </article>
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					include '../parts/footer.php';
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
							
								
								
									
										16
									
								
								public_html/blog/newpost
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								public_html/blog/newpost
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					#title:Tytuł posta 
 | 
				
			||||||
 | 
					Tutaj zaczyna się treść posta, dozwolony markdown 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Nagłówek
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Nagłówek 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> to
 | 
				
			||||||
 | 
					> jest
 | 
				
			||||||
 | 
					> cytat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					a tu kod
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										11
									
								
								public_html/blog/posts/witaj-swiecie.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								public_html/blog/posts/witaj-swiecie.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					<!-- Witaj świecie!;%%%;2025-07-29 17:33:01 -->
 | 
				
			||||||
 | 
					<?php include '../../parts/header.php'; ?>
 | 
				
			||||||
 | 
					    <div id="top-bar">
 | 
				
			||||||
 | 
					        <h1>> Witaj świecie!</h1>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <i class="post_date">2025-07-29 17:33:01</i>
 | 
				
			||||||
 | 
					    <article id="content">
 | 
				
			||||||
 | 
					        <p>To jest pierwszy post na twojej stronie. Możesz go usunąć usuwając plik witaj-swiecie.php :)</p>
 | 
				
			||||||
 | 
					    </article>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<?php include '../../parts/footer.php'; ?>
 | 
				
			||||||
							
								
								
									
										57
									
								
								public_html/index.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								public_html/index.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					include 'parts/header.php';
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
 | 
					    <div id="top-bar">
 | 
				
			||||||
 | 
					        <h1>> Strona Główna</h1>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <article id="content">
 | 
				
			||||||
 | 
					    <pre>
 | 
				
			||||||
 | 
					__        __   _                            _         
 | 
				
			||||||
 | 
					\ \      / /__| | ___ ___  _ __ ___   ___  | |_ ___   
 | 
				
			||||||
 | 
					 \ \ /\ / / _ \ |/ __/ _ \| '_ ` _ \ / _ \ | __/ _ \  
 | 
				
			||||||
 | 
					  \ V  V /  __/ | (_| (_) | | | | | |  __/ | || (_) | 
 | 
				
			||||||
 | 
					   \_/\_/ \___|_|\___\___/|_| |_| |_|\___|  \__\___/  
 | 
				
			||||||
 | 
					    </pre>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <h1>Witaj na swojej stronie, <code><<USER>></code>!</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <p>
 | 
				
			||||||
 | 
					    To Twoja osobista przestrzeń w <strong>systemie Tylda</strong> — tu możesz pisać bloga, eksperymentować z HTML, PHP, Ash, Perl, Python… albo po prostu zostawić wiadomość dla świata.
 | 
				
			||||||
 | 
					    </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <p>
 | 
				
			||||||
 | 
					    Twój katalog to <code>/home/<<USER>>/</code><br>
 | 
				
			||||||
 | 
					    Twoja strona jest dostępna w katalogu: <code>/home/<<USER>>/public_html/</code>
 | 
				
			||||||
 | 
					    </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <hr>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <h2>Co możesz teraz zrobić?</h2>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <ul>
 | 
				
			||||||
 | 
					      <li>Edytuj ten plik, by zacząć tworzyć swoją stronę</li>
 | 
				
			||||||
 | 
					      <li>Dodaj wpis na bloga: <code>komenda <i>blog</i></code></li>
 | 
				
			||||||
 | 
					      <li>Dołącz do czatu IRC na <code>#ogolny</code> (WeeChat)</li>
 | 
				
			||||||
 | 
					      <li>Sprawdź skrzynkę: <code>neomutt</code></li>
 | 
				
			||||||
 | 
					      <li>Dodaj swój styl: stwórz <code>style.css</code></li>
 | 
				
			||||||
 | 
					    </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <hr>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <p>
 | 
				
			||||||
 | 
					    Chcesz więcej inspiracji? Zajrzyj do innych użytkowników: <a class="link" href="/users.php">Lista użytkowników</a><br>
 | 
				
			||||||
 | 
					    Albo odwiedź <a class="link" href="https://tildeverse.org">tildeverse.org</a>, by zobaczyć inne społeczności.
 | 
				
			||||||
 | 
					    </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <p>
 | 
				
			||||||
 | 
					    Niech Twój katalog rośnie razem z Tobą. Baw się dobrze i nie bój się próbować!
 | 
				
			||||||
 | 
					    </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <pre>
 | 
				
			||||||
 | 
					~ v0id1st
 | 
				
			||||||
 | 
					    </pre>
 | 
				
			||||||
 | 
					    </article>
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					include 'parts/footer.php';
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
							
								
								
									
										4
									
								
								public_html/parts/footer.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								public_html/parts/footer.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										21
									
								
								public_html/parts/header.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								public_html/parts/header.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					$req = $_SERVER['REQUEST_URI'];
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
 | 
					<html lang="pl">
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <link rel="stylesheet" type="text/css" href="/~<<USER>>/style.css">
 | 
				
			||||||
 | 
					    <?php
 | 
				
			||||||
 | 
					        if (str_contains($req, "/blog/")) {
 | 
				
			||||||
 | 
					            echo '<title>~<<USER>> Blog | tylda.org</title>';
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            echo '<title>~<<USER>> | tylda.org</title>';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ?>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					<div class="main-content">
 | 
				
			||||||
 | 
					    <header id="menu">
 | 
				
			||||||
 | 
					        <a href="/~<<USER>>/">~<<USER>></a>
 | 
				
			||||||
 | 
					        <a <?php if ($req == "/~<<USER>>/" || $req == "~/<<USER>>/index.php") { echo 'class="active"'; } ?>href="/~<<USER>>/">strona główna</a>
 | 
				
			||||||
 | 
					        <a <?php if (str_starts_with($req, "/~<<USER>>/blog/")) { echo 'class="active"'; } ?>href="/~<<USER>>/blog/">blog</a>
 | 
				
			||||||
 | 
					    </header>
 | 
				
			||||||
							
								
								
									
										8
									
								
								public_html/parts/post_content.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								public_html/parts/post_content.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					    <div id="top-bar">
 | 
				
			||||||
 | 
					        <h1>> <<TITLE>></h1>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <i class="post_date"><<DATE>></i>
 | 
				
			||||||
 | 
					    <article id="content">
 | 
				
			||||||
 | 
					    <<CONTENT>>
 | 
				
			||||||
 | 
					    </article>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										125
									
								
								public_html/style.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								public_html/style.css
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,125 @@
 | 
				
			|||||||
 | 
					@media only screen and (max-width: 850px) {
 | 
				
			||||||
 | 
					    header#menu {
 | 
				
			||||||
 | 
					        flex-direction: column !important;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:root {
 | 
				
			||||||
 | 
					    --main: #dd9a1a;
 | 
				
			||||||
 | 
					    --bg: #111;
 | 
				
			||||||
 | 
					    --link: #ffdb96;
 | 
				
			||||||
 | 
					    --link-hover: #dd9a1a;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* {
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					    box-sizing: border-box;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body {
 | 
				
			||||||
 | 
					    background: var(--bg);
 | 
				
			||||||
 | 
					    color: var(--main);
 | 
				
			||||||
 | 
					    font-family: "Helvetica", "Arial", sans-serif;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div.main-content {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    flex-direction: column;
 | 
				
			||||||
 | 
					    width: 60%;
 | 
				
			||||||
 | 
					    margin: 0 auto;
 | 
				
			||||||
 | 
					    padding: 1rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header#menu {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    flex-direction: row;
 | 
				
			||||||
 | 
					    height: 3rem;
 | 
				
			||||||
 | 
					    border-width: 5px;
 | 
				
			||||||
 | 
					    border-color: var(--main);
 | 
				
			||||||
 | 
					    border-style: double;
 | 
				
			||||||
 | 
					    border-radius: 5px;
 | 
				
			||||||
 | 
					    margin-bottom: 2rem;
 | 
				
			||||||
 | 
					    align-items: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header#menu a {
 | 
				
			||||||
 | 
					    padding: 7px;
 | 
				
			||||||
 | 
					    color: var(--main);
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					    text-transform: uppercase;
 | 
				
			||||||
 | 
					    padding-inline: 30px;
 | 
				
			||||||
 | 
					    font-weight: bold;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header#menu a.active {
 | 
				
			||||||
 | 
					    background: var(--main);
 | 
				
			||||||
 | 
					    color: var(--bg);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header#menu a:hover {
 | 
				
			||||||
 | 
					    background: var(--main);
 | 
				
			||||||
 | 
					    color: var(--bg);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					div#top-bar {
 | 
				
			||||||
 | 
					    font-family: 'Courier New';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					article#content {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    flex-direction: column;
 | 
				
			||||||
 | 
					    border-width: 5px;
 | 
				
			||||||
 | 
					    border-color: var(--main);
 | 
				
			||||||
 | 
					    border-style: double;
 | 
				
			||||||
 | 
					    border-radius: 5px;
 | 
				
			||||||
 | 
					    margin-top: 2rem;
 | 
				
			||||||
 | 
					    padding: 1rem;
 | 
				
			||||||
 | 
					    gap: 8px;
 | 
				
			||||||
 | 
					    padding-block: 2rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					footer#footer {
 | 
				
			||||||
 | 
					    margin-top: 3rem;
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    flex-direction: row;
 | 
				
			||||||
 | 
					    gap: 1rem;
 | 
				
			||||||
 | 
					    justify-content: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.link {
 | 
				
			||||||
 | 
					    color: var(--link);
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.link:hover {
 | 
				
			||||||
 | 
					    color: var(--link-hover);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					footer#footer > *:not(:last-child)::after {
 | 
				
			||||||
 | 
					    content: " ~ ";
 | 
				
			||||||
 | 
					    margin-left: 0.7rem;
 | 
				
			||||||
 | 
					    color: var(--main);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pre.ascii {
 | 
				
			||||||
 | 
					    margin-bottom: 2rem;
 | 
				
			||||||
 | 
					    font-size: 15px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.user_home {
 | 
				
			||||||
 | 
					  display: grid;
 | 
				
			||||||
 | 
					  grid-template-columns: 100px 30px 100px 100px 40px 120px 15px;
 | 
				
			||||||
 | 
					  font-family: monospace;
 | 
				
			||||||
 | 
					  white-space: pre;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ol, ul {
 | 
				
			||||||
 | 
					    margin-left: 2rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.post {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    gap: 1rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										4
									
								
								welcome.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								welcome.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					Subject: Witaj na tylda.org!
 | 
				
			||||||
 | 
					From: v0id1st@tylda.org
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Siemano :D
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user