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