100% vibecoded initial commit
This commit is contained in:
commit
94ac5d4ac7
|
|
@ -0,0 +1,16 @@
|
|||
# Editor files
|
||||
*~
|
||||
*.swp
|
||||
*.swo
|
||||
.idea/
|
||||
|
||||
# AUR build files
|
||||
*.tar.gz
|
||||
*.tar.xz
|
||||
pkg/
|
||||
src/
|
||||
*.pkg.tar.*
|
||||
|
||||
# Build artifacts
|
||||
*.o
|
||||
*.a
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2026 mab122
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
PREFIX ?= /usr/local
|
||||
BINDIR = $(PREFIX)/bin
|
||||
|
||||
.PHONY: install uninstall
|
||||
|
||||
install:
|
||||
@echo "Installing čd to $(BINDIR)..."
|
||||
@mkdir -p $(BINDIR)
|
||||
@install -m 755 čd $(BINDIR)/čd
|
||||
@echo "Installation complete! Run 'čd' to see the motorak."
|
||||
|
||||
uninstall:
|
||||
@echo "Removing čd from $(BINDIR)..."
|
||||
@rm -f $(BINDIR)/čd
|
||||
@echo "Uninstallation complete."
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
# Maintainer: mab122 maciek+ceskadraha@mbator.pl
|
||||
pkgname=cd-ceskadraha
|
||||
pkgver=1.0.0
|
||||
pkgrel=1
|
||||
pkgdesc="A fun terminal animation of a Czech Railways motorak - Czech version of sl"
|
||||
arch=('any')
|
||||
url="https://github.com/mab122/ceskadraha"
|
||||
license=('MIT')
|
||||
depends=('bash' 'ncurses')
|
||||
source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/v${pkgver}.tar.gz")
|
||||
sha256sums=('SKIP') # Update this after creating the first release
|
||||
|
||||
package() {
|
||||
cd "${srcdir}/ceskadraha-${pkgver}"
|
||||
|
||||
# Install the script
|
||||
install -Dm755 čd "${pkgdir}/usr/bin/čd"
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
# čd (České dráhy)
|
||||
|
||||
A fun terminal animation of a Czech Railways motorak (railcar) - the Czech version of the classic `sl` command.
|
||||
|
||||
```
|
||||
___
|
||||
| |___
|
||||
_____________ |___|___| _______________
|
||||
| ___ ___ |=|_________|==|___ ___ |
|
||||
| | | | || O O | | | | | |
|
||||
|_|___|__|___||___\_____/___|__|__|__|___|__|
|
||||
\_O_/ \_O_/ \_______/ \_O_/ \_O_/
|
||||
|
||||
České dráhy - Motorák 810
|
||||
```
|
||||
|
||||
Inspired by the legendary `sl` command, but featuring the iconic ČD Class 810/810.0 "Orchestrion" motorak.
|
||||
|
||||
## Installation
|
||||
|
||||
### From AUR (Arch Linux)
|
||||
|
||||
```bash
|
||||
yay -S cd-czechrailways
|
||||
# or
|
||||
paru -S cd-czechrailways
|
||||
```
|
||||
|
||||
### Manual Installation
|
||||
|
||||
```bash
|
||||
git clone https://github.com/YOUR_USERNAME/ceskadráha.git
|
||||
cd ceskadráha
|
||||
sudo make install
|
||||
```
|
||||
|
||||
### Manual (without make)
|
||||
|
||||
```bash
|
||||
sudo cp čd /usr/local/bin/
|
||||
sudo chmod +x /usr/local/bin/čd
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
čd # Run the animation (left to right)
|
||||
čd -r # Run in reverse (right to left)
|
||||
čd -h # Show help
|
||||
```
|
||||
|
||||
## Features
|
||||
|
||||
- Animated Czech Railways Class 810 motorak
|
||||
- Reverse direction support
|
||||
- Animated exhaust/smoke
|
||||
- Terminal width aware
|
||||
- Thank you message in Czech: "Děkujeme, že jste cestovali s Českými drahami!"
|
||||
|
||||
## Why?
|
||||
|
||||
Just like the original `sl` command was created to punish users who mistype `ls`, this is for Czech railway enthusiasts who want a bit of fun in their terminal. Or maybe you just really like Czech motoráks.
|
||||
|
||||
## Requirements
|
||||
|
||||
- Bash
|
||||
- `tput` command (usually part of ncurses)
|
||||
|
||||
## License
|
||||
|
||||
MIT License - See LICENSE file for details
|
||||
|
||||
## Credits
|
||||
|
||||
Inspired by the classic `sl` (Steam Locomotive) command by Toyoda Masashi.
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
#!/bin/bash
|
||||
|
||||
# čd - Czech motorak animation (Czech Railways version of sl)
|
||||
# Usage: čd [options]
|
||||
|
||||
# Parse options
|
||||
DELAY=0.03
|
||||
REVERSE=0
|
||||
|
||||
while getopts "hr" opt; do
|
||||
case $opt in
|
||||
h)
|
||||
echo "čd - Czech motorak animation"
|
||||
echo "Usage: čd [-h] [-r]"
|
||||
echo " -h Show this help"
|
||||
echo " -r Reverse direction"
|
||||
exit 0
|
||||
;;
|
||||
r)
|
||||
REVERSE=1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Get terminal width
|
||||
COLS=$(tput cols)
|
||||
|
||||
# Czech motorak (ČD Class 810/810.0 "Orchestrion")
|
||||
MOTORAK=(
|
||||
" "
|
||||
" ___ "
|
||||
" | |___ "
|
||||
" _____________ |___|___| _______________ "
|
||||
" | ___ ___ |=|_________|==|___ ___ | "
|
||||
" | | | | || O O | | | | | | "
|
||||
" |_|___|__|___||___\_____/___|__|__|__|___|__| "
|
||||
" \_O_/ \_O_/ \_______/ \_O_/ \_O_/ "
|
||||
" "
|
||||
" České dráhy - Motorák 810 "
|
||||
)
|
||||
|
||||
# Smoke/exhaust variants
|
||||
EXHAUST1=(
|
||||
" ( ) ( ) "
|
||||
" ( ) "
|
||||
" ( ) ( ) "
|
||||
)
|
||||
|
||||
EXHAUST2=(
|
||||
" ( ) ( ) "
|
||||
" ( ) "
|
||||
" ( ) ( ) "
|
||||
)
|
||||
|
||||
# Reverse the motorak if needed
|
||||
if [ $REVERSE -eq 1 ]; then
|
||||
# Flip the motorak horizontally
|
||||
NEW_MOTORAK=()
|
||||
for line in "${MOTORAK[@]}"; do
|
||||
reversed=$(echo "$line" | rev)
|
||||
NEW_MOTORAK+=("$reversed")
|
||||
done
|
||||
MOTORAK=("${NEW_MOTORAK[@]}")
|
||||
fi
|
||||
|
||||
# Animation function
|
||||
animate() {
|
||||
local position=$1
|
||||
local use_exhaust1=$2
|
||||
|
||||
# Move cursor to home position
|
||||
tput cup 0 0
|
||||
|
||||
# Determine which exhaust to use
|
||||
local exhaust
|
||||
if [ $use_exhaust1 -eq 1 ]; then
|
||||
exhaust=("${EXHAUST1[@]}")
|
||||
else
|
||||
exhaust=("${EXHAUST2[@]}")
|
||||
fi
|
||||
|
||||
# Print exhaust lines
|
||||
for line in "${exhaust[@]}"; do
|
||||
if [ $REVERSE -eq 0 ]; then
|
||||
# Left to right
|
||||
printf "%${position}s%s" "" "$line"
|
||||
tput el # Clear to end of line
|
||||
echo
|
||||
else
|
||||
# Right to left
|
||||
local spaces=$(($COLS - $position - ${#line}))
|
||||
if [ $spaces -gt 0 ]; then
|
||||
printf "%${spaces}s%s" "" "$line"
|
||||
fi
|
||||
tput el
|
||||
echo
|
||||
fi
|
||||
done
|
||||
|
||||
# Print motorak lines
|
||||
for line in "${MOTORAK[@]}"; do
|
||||
if [ $REVERSE -eq 0 ]; then
|
||||
# Left to right
|
||||
printf "%${position}s%s" "" "$line"
|
||||
tput el # Clear to end of line
|
||||
echo
|
||||
else
|
||||
# Right to left
|
||||
local spaces=$(($COLS - $position - ${#line}))
|
||||
if [ $spaces -gt 0 ]; then
|
||||
printf "%${spaces}s%s" "" "$line"
|
||||
fi
|
||||
tput el
|
||||
echo
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Main animation loop
|
||||
# Clear screen and hide cursor
|
||||
clear
|
||||
tput civis
|
||||
|
||||
if [ $REVERSE -eq 0 ]; then
|
||||
# Left to right
|
||||
for ((pos=0; pos<=$COLS+60; pos++)); do
|
||||
if [ $((pos % 2)) -eq 0 ]; then
|
||||
animate $pos 1
|
||||
else
|
||||
animate $pos 0
|
||||
fi
|
||||
sleep $DELAY
|
||||
done
|
||||
else
|
||||
# Right to left
|
||||
for ((pos=$COLS+60; pos>=0; pos--)); do
|
||||
if [ $((pos % 2)) -eq 0 ]; then
|
||||
animate $pos 1
|
||||
else
|
||||
animate $pos 0
|
||||
fi
|
||||
sleep $DELAY
|
||||
done
|
||||
fi
|
||||
|
||||
# Show cursor and clear
|
||||
tput cnorm
|
||||
clear
|
||||
echo "Děkujeme, že jste cestovali s Českými drahami! 🚃"
|
||||
Loading…
Reference in New Issue