Compare commits

..

18 Commits

Author SHA1 Message Date
bb3281250e Transpose added 2025-03-12 23:43:05 +01:00
9498530db8 Use let instead of var like a normal person 2025-03-12 22:59:37 +01:00
4ac0dff7a3 Formatting 2025-03-12 22:59:20 +01:00
622af40508 Add: Alenka v risi divu
All checks were successful
Build and Deploy / build_and_deploy (push) Successful in 59s
2025-02-25 02:12:46 +01:00
1514a6f3c6 Workflow updated
All checks were successful
Build and Deploy / build_and_deploy (push) Successful in 56s
2025-02-25 01:44:52 +01:00
4d2e1333a5 Workflow updated 2025-02-25 01:38:24 +01:00
89924f848f Fix macros 2025-02-25 01:37:08 +01:00
dee4ce31dc Renamed taborak to classic 2025-02-25 01:27:25 +01:00
f1ff509d0f Stolen songs from realcharmer 2025-02-25 01:25:03 +01:00
032bd95bf1 Add: Az to vzdam
Some checks failed
Build and Deploy / build_and_deploy (push) Failing after 3s
2025-02-25 01:05:40 +01:00
9b72bf8131 Renamed category Other to Mixtape 2025-02-25 01:03:30 +01:00
b54ecf23a8 Renamed taxonomy album to category
Some checks failed
Build and Deploy / build_and_deploy (push) Failing after 4s
2025-02-25 01:02:15 +01:00
cefae0c90c Edit: added columns to 1. signalni
Some checks failed
Build and Deploy / build_and_deploy (push) Failing after 4s
2025-02-25 00:55:42 +01:00
c02fda7df1 Synced with mixtape upstream 2025-02-25 00:52:03 +01:00
0896f2ac88 Added: 1. signalni 2025-02-25 00:46:16 +01:00
9dbc5d8357 Added: .gitignore 2025-02-25 00:46:07 +01:00
7bc5b1bbb9 Edited for FR guitar
Some checks failed
Build and Deploy / build_and_deploy (push) Failing after 5s
2025-02-25 00:04:37 +01:00
a63225af66 first commit 2025-02-25 00:04:37 +01:00
77 changed files with 2316 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
name: Build and Deploy
on:
push:
branches:
- master
env:
ZOLA_VERSION: "0.19.2"
HOST: ${{ secrets.SERVER_IP }}
SSH_DEPLOY_USERNAME: ${{ secrets.DEPLOY_USERNAME }}
SSH_REPO_KEY: ${{ secrets.SSH_REPO_KEY }}
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
DEST_FOLDER: "/srv/www/cz/filiprojek/guitar"
jobs:
build_and_deploy:
runs-on: ubuntu-latest
container:
image: git.0x45.cz/em/mixtape:240904
steps:
- name: Checkout repository
run: git clone https://git.filiprojek.cz/fr/guitar.git /workspace/fr/guitar
- name: Build Chordpro
run: make pdf html songbook
- name: Build zola
run: zola build
- name: Deploy
run: |
eval "$(ssh-agent -s)"
echo "${SSH_DEPLOY_KEY}" | ssh-add -
mkdir -p ~/.ssh/
ssh-keyscan -H "${HOST}" >> ~/.ssh/known_hosts
rsync -ra --delete-after public/* "${SSH_DEPLOY_USERNAME}@${HOST}:${DEST_FOLDER}"

5
.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
*.pdf
content/*/*.html
devel/
archive/
public/

5
biome.json Normal file
View File

@@ -0,0 +1,5 @@
{
"formatter": {
"enabled": false
}
}

59
chordpro.json Normal file
View File

@@ -0,0 +1,59 @@
pdf {
papersize : a4
columnspace : 20
margintop : 60
marginbottom : 40
marginleft : 40
marginright : 40
headspace : 40
footspace : 20
formats.title {
title : [ "" "%{title}" "%{artist}" ]
subtitle : [ "" "" "" ]
}
fontdir : [ static/fonts/liberation-fonts-ttf-2.1.5/ ]
fontconfig {
serif {
"" : LiberationSerif-Regular.ttf
bold : LiberationSerif-Bold.ttf
italic : LiberationSerif-Italic.ttf
bolditalic : LiberationSerif-BoldItalic.ttf
}
sans {
"" : LiberationSans-Regular.ttf
bold : LiberationSans-Bold.ttf
italic : LiberationSans-Italic.ttf
bolditalic : LiberationSans-BoldItalic.ttf
}
monospace {
"" : LiberationMono-Regular.ttf
bold : LiberationMono-Bold.ttf
italic : LiberationMono-Italic.ttf
bolditalic : LiberationMono-BoldItalic.ttf
}
}
fonts {
title.description : "serif bold 14"
subtitle.description : "serif 11"
text.description : "serif 12"
chord.description : "sans italic 10"
comment {
description : "sans 12"
background : #E5E5E5
}
comment_italic.description : "sans italic 12"
comment_box {
description : "sans 12"
frame : 1
}
tab.description : "monospace 10"
toc.description : "serif 11"
grid.description : "sans 10"
}
}
html.styles.display : /chordpro.css

17
config.toml Normal file
View File

@@ -0,0 +1,17 @@
base_url = "https://guitar.filiprojek.cz"
title = "FR Songbook"
compile_sass = true
build_search_index = false
generate_feeds = false
taxonomies = [
{ name = "category" },
{ name = "artist" },
]
[markdown]
highlight_code = false
smart_punctuation = true
external_links_target_blank = true
external_links_no_follow = true
external_links_no_referrer = true

View File

@@ -0,0 +1,46 @@
{title: 1. signální}
{artist: Chinaski}
{columns: 2}
{sov}
Až si [G]zejtra ráno [C]řeknu zase [Em]jednou provždy dost,
[G]právem se mi [C]budeš tiše [Em]smát,
jak [G]omluvit si [C]svoji slabost, [Em]nenávist a zlost,
když [G]za všechno si [C]můžu vlastně [Em]sám?
{eov}
{soc}
[Em]Za spoustu dní, možná za [C]spoustu let,
až se mi [G]rozední, budu ti [D]vyprávět
na první [Am]signální, jak jsem [C]obletěl svět,
jak tě to [G]omámí a [D]nepustí zpět.
Jaký si to [F]uděláš, [Bb]takový to [Dm]máš.
jaký si to [F]uděláš, [Bb]takový to [Dm]máš.
{eoc}
{sov}
Až se [G]dneska večer [C]budu tvářit [Em]zas jak Karel Gott,
[G]budu zpívat [C]vam pam pidam [Em]pam,
všechna [G]sláva, polní [C]tráva, ale [Em]peníz přijde vhod,
[G]jak jsem si to [C]udělal, tak to [Em]mám.
{eov}
{column_break}
{soc}
[Em]Za spoustu dní, možná za [C]spoustu let,
až se mi [G]rozední, budu ti [D]vyprávět
na první [Am]signální, jak jsem [C]obletěl svět,
jak tě to [G]omámí a [D]nepustí zpět.
Jaký si to [F]uděláš, [Bb]takový to [Dm]máš.
jaký si to [F]uděláš, [Bb]takový to [Dm]máš.
{eoc}
{sov}
Nanana na nana...
Jaký si to [F]uděláš, [Bb]takový to [Dm]máš.
jaký si to [F]uděláš, [Bb]takový to [Dm]máš.
{eov}

View File

@@ -0,0 +1,6 @@
+++
title = "1. signální"
[taxonomies]
category = ["classic"]
artist = ["Chinaski"]
+++

5
content/_index.md Normal file
View File

@@ -0,0 +1,5 @@
+++
page_template = "song.html"
sort_by = "title"
+++

View File

@@ -0,0 +1,58 @@
{title: Alenka v říši divů}
{artist: Karel Zich}
{columns: 2}
{sov}
[G]Telegram s adresou svět,
[C]píšu v něm pět vlídných vět [D] jedné [G]dívce.[D]
[G]Kdopak ví, kam jej zítra pošta doručí
[C]a kolik náhod mu poručí,
[D]chtěl bych jen vidět zář očí, které [G]budou jej číst.[D]
{eov}
{soc}
[G]A šel bych cestou prašnou, co nikdo nezměří,
sám [C]jedenkrát bych s plnou brašnou cinknul u dveří,
bude [D]v očích mít úžas jak Alenka v říši di[G]vů.[D]
[G]I když dá mi košem, až řádky bude číst,
já [C]chtěl bych být tím listonošem, neboť jsem si jist,
bude [D]v očích mít úžas jak [C]Alenka v říši [G]divů.[D]
{eoc}
{sov}
Já nechal všechna okna dokořán
a díval se na svět ze všech stran, jak se koulí.
A celý den přemítám o dívce neznámé,
proč už se dávno neznáme,
snad adresu najde toto poselství mé.
{eov}
{soc}
[G]A šel bych cestou prašnou, co nikdo nezměří,
sám [C]jedenkrát bych s plnou brašnou cinknul u dveří,
bude [D]v očích mít úžas jak Alenka v říši di[G]vů.[D]
[G]I když dá mi košem, až řádky bude číst,
já [C]chtěl bych být tím listonošem, neboť jsem si jist,
bude [D]v očích mít úžas jak [C]Alenka v říši [G]divů.[D]
{eoc}
{column_break}
{sov}
Odmítli můj telegram
a řekli: „Poslat jej není kam adresa schází.“
A celý den přemítám o dívce neznámé,
proč už se dávno neznáme,
snad adresu najde poselství.
{eov}
{soc}
[G]A šel bych cestou prašnou, co nikdo nezměří,
sám [C]jedenkrát bych s plnou brašnou cinknul u dveří,
bude [D]v očích mít úžas jak Alenka v říši di[G]vů.[D]
[G]I když dá mi košem, až řádky bude číst,
já [C]chtěl bych být tím listonošem, neboť jsem si jist,
bude [D]v očích mít úžas jak [C]Alenka v říši [G]divů.[D]
bude [D]v očích mít úžas jak [C]Alenka v říši [G]divů.[D]
{eoc}

View File

@@ -0,0 +1,6 @@
+++
title = "Alenka v říši divů"
[taxonomies]
category = ["classic"]
artist = ["Karel Zich"]
+++

View File

@@ -0,0 +1,61 @@
{title: Až to vzdám}
{artist: Tragedis}
{columns: 2}
{sov}
[D]Pondělí ráno a já si doma smývám bahno z [G]fesťáku.
[Em]Špína je [G]pryč, ale [Em]s ostudou se [G]člověk musí [D]sžít.
[D]Až jednou příde den kdy to všechno nebudu mít [G]na háku,
[Em]najdu svůj [G]glanc a [Em]třeba k tomu [G]přestanu i [D]pít.
Až to [Bm]vzdám, až to [D]vzdám
a [Em]za pravdu dám [G]všem svejm bejval[D]kám.
{eov}
{sov}
[D]Má první holka už druhým rokem nosí jiný [G]příjmení.
[Em]Vlastně i [G]brácha má [Em]ženu, dítě, [G]auto, psa a [D]byt.
[D]Když to tak zvážim, tak v mým životě téměř nic se [G]nemění,
[Em]jen nový [G]šrámy a v [Em]duši všechno [G]možný jen né [D]klid.
Až to [Bm]vzdám, až to [D]vzdám
a [Em]za pravdu dám [G]všem svejm bejval[D]kám.
{eov}
{soc}
[Bm]Zatím ale ještě nedám chlastu vale,
s Biblí [D]na nočním stole, ani náhodou ty vole.
Já chci [Em]žít teď a tady, ženskejm [G]očumovat vnady
a pak [D]u pivní flašky, dělat pro ostatní šašky.
[Bm]V pátek slavit, v sobotu se chodit bavit.
zažít [D]fesťáky i kluby, dokavaď mám svoje zuby.
Než mě [Em]abstinence skolí, budu [G]pařit třeba s holí
A pak [D]zařvu ještě z jámy, ženský, putiky a flámy.
{eoc}
{column_break}
{sov}
[D]Jednou to příde a já konečně doufám rozum [G]dostanu.
[Em]I mojí [G]mámě, pak [Em]dojdou dobrý [G]rady, když jdu [D]ven.
[D]A až to příde, tak zmizím v davu spořádaných [G]občanů.
[Em]Najdu se v [G]práci a [Em]přestane mě [G]lákat vůně [D]žen.
Až to [Bm]vzdám, až to [D]vzdám
a [Em]za pravdu dám [G]všem svejm bejval[D]kám.
{eov}
{soc}
[Bm]Zatím ale ještě nedám chlastu vale,
s Biblí [D]na nočním stole, ani náhodou ty vole.
Já chci [Em]žít teď a tady, ženskejm [G]očumovat vnady
a pak [D]u pivní flašky, dělat pro ostatní šašky.
[Bm]V pátek slavit, v sobotu se chodit bavit.
zažít [D]fesťáky i kluby, dokavaď mám svoje zuby.
Než mě [Em]abstinence skolí, budu [G]pařit třeba s holí
A pak [D]zařvu ještě z jámy, ženský, putiky a flámy.
{eoc}
{soc}
Až to [Bm]vzdám, až to [D]vzdám
a [Em]za pravdu dám [G]všem svejm bejval[D]kám.
Až to [Bm]vzdám, až to [D]vzdám
a [Em]za pravdu dám [G]všem svejm bejval[D]kám.
{eoc}

View File

@@ -0,0 +1,6 @@
+++
title = "Až to vzdám"
[taxonomies]
category = ["mixtape"]
artist = ["Tragedis"]
+++

View File

@@ -0,0 +1,70 @@
{title: Buď svůj}
{artist: Tragedis}
{columns: 2}
{c: Ref. a intro má punk off-beat rytmus}
[G] [D] [Em] [C] [D] [G]
[G] [D] [Em] [C] [D] [Em]
{soc}
Buď [G]svůj a za tim si s[D]tůj.
Měj [Em]svoje věci, [C]žádný blbý [D]kecy.
Buď [G]svůj a za tim si s[D]tůj.
Leť [Em]volným pádem, [C]žádným hloupým [D]řádem.
Buď [G]svůj a za tim si s[D]tůj.
Jedi[Em]ný je jistý, ať [C]svědomí máš [D]čistý.
Buď [G]svůj a za tim si s[D]tůj.
Jenom [Em]hlupák skáče jak [C]okolí si [D]píská, buď [G]svůj.
{eoc}
[G] [D] [Em] [C] [D] [G]
[G] [D] [Em] [C] [D] [Em]
{sov}
[Em] Já neměl [D]nikdy velký ambice
[G] v hudbě ve sportu, [D]škole a politice.
[Em] ohnout záda jsem [D]taky příliš nezvládal,
[G] proto se mnou [D]osud tolik zamával.
[Em] Nemám Mercedes a [D]vlastně ani řidičák,
[G] na místo depilace, [D]zarostlej jak vopičák
[Em] na drahý šperky, [D]můžu se jen dívat,
[G] pak vezmu kytaru a [D]půjdu si zazpívat:
{eov}
{soc}
Buď [G]svůj a za tim si s[D]tůj.
Měj [Em]svoje věci, [C]žádný blbý [D]kecy.
Buď [G]svůj a za tim si s[D]tůj.
Leť [Em]volným pádem, [C]žádným hloupým [D]řádem.
Buď [G]svůj a za tim si s[D]tůj.
Jedi[Em]ný je jistý, ať [C]svědomí máš [D]čistý.
Buď [G]svůj a za tim si s[D]tůj.
Jenom [Em]hlupák skáče jak [C]okolí si [D]píská, buď [G]svůj.
{eoc}
[G] [D] [Em] [C] [D] [G]
[G] [D] [Em] [C] [D] [Em]
{sov}
[Em] Cuba libre za [D]pivo měnit nebudu,
[G] v posilovně zas [D]dělal bych jen vostudu.
[Em] Holky v růžovim mě [D]taky příliš neberou,
[G] to radši punkerky co [D]totálně se vožerou.
[Em] Jak slyším hip-hop rá[D]dio z vokna vyhodim.
[G] Na nóbl plesy se [D]taky dvakrát nehodim
[Em] a dřív než lidi v [D]sále začnou zívat,
[G] tak vezmu kytaru a [D]půjdu jim zazpívat:
{eov}
{soc}
Buď [G]svůj a za tim si s[D]tůj.
Měj [Em]svoje věci, [C]žádný blbý [D]kecy.
Buď [G]svůj a za tim si s[D]tůj.
Leť [Em]volným pádem, [C]žádným hloupým [D]řádem.
Buď [G]svůj a za tim si s[D]tůj.
Jedi[Em]ný je jistý, ať [C]svědomí máš [D]čistý.
Buď [G]svůj a za tim si s[D]tůj.
Jenom [Em]hlupák skáče jak [C]okolí si [D]píská, buď [G]svůj.
{eoc}

View File

@@ -0,0 +1,6 @@
+++
title = "Buď svůj"
[taxonomies]
category = ["mixtape"]
artist = ["Tragedis"]
+++

View File

@@ -0,0 +1,68 @@
{title: Být stále mlád}
{artist: Karel Gott}
{columns: 2}
{c: Capo 2, 4, 5?}
{sov}
[G]Čas dál si [D]běží svůj mara[Em]tón
někdy se [C]cítím starší než-li [D]on
kolik už [Am]let se jenom věčně [C]ptám
a stále vím tak [Em]málo
{eov}
{sov}
[G]A jindy se [D]cítím jako omlá[Em]dlý
jako ten [C]kluk před školním zábrad[D]lím
co tehdy [Am]snil o prvním líbá[C]ní
a o svých prvních [Em]džínách
{eov}
{sov}
[G]Ten kluk toužil [D]výš a měl velký [Em]cíl
zpíval i [C]žil plně a ze všech [D]sil
snad mi z něj [Am]kousek ještě ve mně [C]zbyl
ten hezký čas [Em]se mi [D]vrátí
{eov}
{soc}
[G]Být stále [D]mlád to bych si [Em]přál být stále [C]mlád
[D]vzepřít se jednou provždy [Am]kalendáři
[C]jen mládí, [D]nikdy stáří
[G]být stále [D]mlád zkouším to [Em]dál být stále [C]mlád
[D]i přes ty známky času [Am]ve své tváři
[C]být [D]stále [G]mlád
{eoc}
{sov}
[G]Jak život [D]šel prošel jsem spoustu [Em]cest
už umím [C]zodpovědět kdejaký [D]test
a vím že život [Am]není jen černá a [C]bílá
žije v mnoha [Em]barvách
{eov}
{column_break}
{sov}
[G]Co ale jen [D]já jich ještě nevychut[Em]nal
co všechno si [C]slíbil a pak nevyko[D]nal
co mám ještě [Am]snů a proto ženu se [C]dál
za nesplněnou [Em]tou[D]hou
{eov}
{soc}
[G]Být stále [D]mlád to bych si [Em]přál být stále [C]mlád
[D]vzepřít se jednou provždy [Am]kalendáři
[C]jen mládí, [D]nikdy stáří
[G]být stále [D]mlád zkouším to [Em]dál být stále [C]mlád
[D]i přes ty známky času [Am]ve své tváři
[C]být [D]stále [G]mlád
{eoc}
{soc}
[G]Für immer [D]jung, ein Leben [Em]lang für immer [C]jung
[D]Du musst dich an die schöne [Am]Zeit erinnern
[C]Denn nichts ist [D]für immer
[G]Für immer [D]jung, ein Leben [Em]lang für immer [C]jung
[D]Du musst dich an die schöne [Am]Zeit erinnern
[C]Denn nichts ist [D]für immer [G]jung
{eoc}

View File

@@ -0,0 +1,6 @@
+++
title = "Být stále mlád"
[taxonomies]
category = ["mixtape"]
artist = ["Karel Gott"]
+++

View File

@@ -0,0 +1,70 @@
{title: Carpe Diem}
{artist: Tragedis}
{columns: 2}
{transpose: -4}
{c: Capo 4}
[E] [B] [F#m] [C#m]
[E] [B] [A] [B] [E]
{soc}
[E]Žijem, jak [B]žijem, a proto taky [F#m]pijem, co [C#m]pijem.
Od [E]budoucnosti vůbec nic [B]nečekej,
teď je [A]teď, a [B]proto carpe [E]diem.
[E]Žijem, jak [B]žijem,
v malejch [F#m]bytech, ještě menší [C#m]příjem.
[E]Slepujeme střípky vlast[B]ních životů
den co [A]den, než [B]dojde na re[E]quiem.
{eoc}
{sov}
[C#m] Celej můj [B]život to je [E]jeden velkej pád,
[A] za dobrej [B]skutek facku [E]vrací.
[C#m]Aniž bych [B]chtěl, musím se [E] se životem [A]prát,
[C#m] než pěstí, [B] radši desti[E]lací. [B]
{eov}
{soc}
[E]Žijem, jak [B]žijem, a proto taky [F#m]pijem, co [C#m]pijem.
Od [E]budoucnosti vůbec nic [B]nečekej,
teď je [A]teď, a [B]proto carpe [E]diem.
[E]Žijem, jak [B]žijem,
v malejch [F#m]bytech, ještě menší [C#m]příjem.
[E]Slepujeme střípky vlast[B]ních životů
den co [A]den, než [B]dojde na re[E]quiem.
{eoc}
{column_break}
{sob}
[C#m] [B] [E]
[A] [B] [E]
[C#m] [B] [E] [A]
[C#m] [B] [E]
{eob}
{sov}
[C#m]Artemis [B]vyrazila [E]na poslední leč,
[A]náledím [B]kráčí na pod[E]patcích.
[C#m] Sisyfos [B]tlačí dál svůj [E]košík s lahvá[A]či
[C#m] a to co zbyde, [B]vrátí na po[E]platcích. [B]
{eov}
{soc}
[E]Žijem, jak [B]žijem, a proto taky [F#m]pijem, co [C#m]pijem.
Od [E]budoucnosti vůbec nic [B]nečekej,
teď je [A]teď, a [B]proto carpe [E]diem.
[E]Žijem, jak [B]žijem,
v malejch [F#m]bytech, ještě menší [C#m]příjem.
[E]Slepujeme střípky vlast[B]ních životů
den co [A]den, než [B]dojde na re[E]quiem.
{eoc}
{soc}
[E]Žijem, jak [B]žijem, a proto taky [F#m]pijem, co [C#m]pijem.
Od [E]budoucnosti vůbec nic [B]nečekej,
teď je [A]teď, a [B]proto carpe [E]diem.
[E]Žijem, jak [B]žijem,
v malejch [F#m]bytech, ještě menší [C#m]příjem.
[E]Slepujeme střípky vlast[B]ních životů
den co [A]den, než [B]dojde na re[E]quiem.
{eoc}

View File

@@ -0,0 +1,6 @@
+++
title = "Carpe Diem"
[taxonomies]
category = ["mixtape"]
artist = ["Tragedis"]
+++

View File

@@ -0,0 +1,67 @@
{title: Cesta Do Hlubin Punkáčovi Duše}
{artist: Vision Days}
{columns: 2}
{transpose: -5}
{c: Bridge a sloka jsou off-beat}
{soc}
[Am]Na hlavě máme [F]barevný číra
[C]A naše heslo je [G]punk neumírá
[Am]Nebudem nikdy [F]součást tý řady
[C]Na to že jsme punkáči, [G]jsme hrdý
{eoc}
{sob}
[Am] [F] [C] [G]
[Am] [F] [C] [G]
{eob}
{sov}
[Am]Po ulici jdeš lidi [C]na tebe čumí
[G]Vyvalujou oči jako [F]péra z gumy
[Am]Mávni nad tím rukou a [C]vystrč prostředníček
[G]Na cestu jim zamávej če[F]pi[*stop]čkou
jako večerní[Am]ček [*(4 beats)]
{eov}
{soc}
[Am]Na hlavě máme [F]barevný číra
[C]A naše heslo je [G]punk neumírá
[Am]Nebudem nikdy [F]součást tý řady
[C]Na to že jsme punkáči, [G]jsme hrdý
[Am] [F] [C] [G]Na to jsme hrdý
[Am] [F] [C]Na to že jsme punkáči, [G]jsme hrdý
{eoc}
{column_break}
{sob}
[Am] [F] [C] [G]
{eob}
{sov}
[Am]Nejsme manekýni, pat[F]ku si nečešem
[C]A nenosíme trička s [G]Leoškem Marešem
Poli[Am]tiku neřešíme u pi[C]va se neperem
A [G]na koncertech dáme pogo [F][*stop]
A potom se ože[Am]rem [*(4 beats)]
{eov}
{soc}
[Am]Na hlavě máme [F]barevný číra
[C]A naše heslo je [G]punk neumírá
[Am]Nebudem nikdy [F]součást tý řady
[C]Na to že jsme punkáči, [G]jsme hrdý
[Am] [F] [C] [G]Na to jsme hrdý
[Am] [F] [C]Na to že jsme punkáči, [G]jsme hrdý
{eoc}
{soc}
[Am]Na hlavě máme [F]barevný číra
[C]A naše heslo je [G]punk neumírá
[Am]Nebudem nikdy [F]součást tý řady
[C]Na to že jsme punkáči, [G]jsme hrdý
[Am] [F] [C] [G]Na to jsme hrdý
[Am] [F] [C]Na to že jsme punkáči, [G]jsme hrdý
[Am] [F]
{eoc}

View File

@@ -0,0 +1,6 @@
+++
title = "Cesta Do Hlubin Punkáčovi Duše"
[taxonomies]
category = ["mixtape"]
artist = ["Vision Days"]
+++

45
content/chaluj/chaluj.cho Normal file
View File

@@ -0,0 +1,45 @@
{title: Cháluj}
{artist: Morčata na útěku}
{capo: 5}
{c: Capo 5}
{sot: Intro}
e|------------------1------------|---------------------------------|
F|------4~----1-3-4--4-3-4-1~----|--------3~------1-3-4-3-1---1~---|
D|0------------------------------|--------------3-----------3------|
D|-------------------------------|--3~-----------------------------|
A|-------------------------------|---------------------------------|
E|-------------------------------|---------------------------------|
{eot}
{sov}
[Am]Mám hlad, tak cpu se [G]masem kloka[F]ním. [G]Mám hlad, [Em]tak baštím kýtu před spa[Am]ním.
[Am]Rád tak rád bych blil, abych [D]moh žrát ještě dýl, a tak [F]jím, jak kdybych nežral před půl [E]hodinou.
{eov}
{soc}
Příteli [Am]cháluj rychle jez, ať je to [D]prase nebo pes.
Nos mi [F]pečené [G]uzené co [Am]nejdřív.
Až přijdeš [Am]ke mně na salám, kus masa [D]svého já ti dám.
K tomu [F]svíčkovou, s [G]omáčkou a té [C]nejvíc.
Z talíře [F]mého můžeš krást, pak masa [C]svého dej mi část.
Společně [F]můžem tento[Dm]krát se pře[Am]žrát.
{eoc}
{sov}
[Am]Můj hlad, to jsou jen [G]štrůdly mako[F]vé. [G]Můj hlad, [Em]to jsou španělští ptáčko[Am]vé.
[Am]Rád si dám pár piv a [D]pak se světe div. Budu [F]jíst, dokud nepraskne hajzl [E]pode mnou.
{eov}
{soc}
Příteli [Am]cháluj o stošest, holubí [D]stehna jako pěst.
Nos mi [F]pečené [G]uzené co [Am]nejdřív.
Až přijdeš [Am]ke mně na salám, kus masa [D]svého já ti dám.
K tomu [F]svíčkovou, s [G]omáčkou a té [C]nejvíc.
Z talíře [F]mého můžeš krást, pak masa [C]svého dej mi část.
Společně [F]můžem tento[Dm]krát se pře[Am]žrát.
Společně [F]můžem všechno spást. Žrádlo je [C]lepší nežli chlast.
Společně [F]můžem tento[Dm]krát se pře[Am]žrát.
{eoc}

6
content/chaluj/index.md Normal file
View File

@@ -0,0 +1,6 @@
+++
title = "Cháluj"
[taxonomies]
category = ["mixtape"]
artist = ["Morčata na útěku"]
+++

View File

@@ -0,0 +1,65 @@
{title: Hádanka}
{artist: Tragedis}
{columns: 2}
{start_of_intro}
[Em] [C] [G] [D]
[Em] [C] [G] [D]
[C] [Em] [G] [D] [C]
{end_of_intro}
{sov}
Kolik na [Em]nebi je p[C]táků a [G]na polštáři [D]snů
a [Em]na kolejích v[C]laků a v [G]Bibli zázra[D]ků?
Kolik [C]na pobřeží [Em]skal a na těch [G]skalách majá[D]ků
a kolik [Em]u majáků v[C]raků a [G]padlých vojá[D]ků?
{eov}
{soc}
[Em]Kdo to [C]ví, [G]kdo to [D]ví,
[Em]Kdo to [C]ví, [G]kdo to [D]ví,
[C]kdo to [Em]ví, [G]kdo to [D]ví?
Ať odpo[C]ví.
{eoc}
{sov}
Jak [Em]veliký je [C]vesmír a [G]kolik je v něm [D]hvězd,
kolik [Em]na světě je [C]měst a mezi [G]těmi městy [D]cest?
Proč je [C]život příliš [Em]krátký na to [G]vidět každý z [D]nich,
v nich se [Em]milovat a [C]žít a přečíst [G]tisíc moudrých [D]knih?
{eov}
{soc}
[Em]Kdo to [C]ví, [G]kdo to [D]ví,
[Em]Kdo to [C]ví, [G]kdo to [D]ví,
[C]kdo to [Em]ví, [G]kdo to [D]ví?
Ať odpo[C]ví.
{eoc}
{column_break}
{start_of_solo}
[Em] [C] [G] [D]
[Em] [C] [G] [D]
[C] [Em] [G] [D] [C]
{end_of_solo}
{sov}
Zda je [Em]dané, co se [C]stane, pro mě [G]nebo pro Vás [D]pane?
Jedi[Em]ný, co bych si [C]přál, ať moje [G]touha nevy[D]vane.
A až [C]jednou budu [Em]moudrý, budu [G]odpovědi [D]znát,
ovšem [Em]prozatím jsem [C]laik, a tak se [G]táži ako[D]rát.
{eov}
{soc}
[Em]Kdo to [C]ví, [G]kdo to [D]ví,
[Em]Kdo to [C]ví, [G]kdo to [D]ví,
[C]kdo to [Em]ví, [G]kdo to [D]ví?
Ať odpo[C]ví.
{eoc}
{start_of_outro}
[Em] [C] [G] [D]
[Em] [C] [G] [D]
[C] [Em] [G] [D] [C]
[D] [Em]
{end_of_outro}

6
content/hadanka/index.md Normal file
View File

@@ -0,0 +1,6 @@
+++
title = "Hádanka"
[taxonomies]
category = ["mixtape"]
artist = ["Tragedis"]
+++

View File

@@ -0,0 +1,69 @@
{title: Hudsonský šífy}
{artist: Wabi Daněk}
{columns: 2}
{capo: 2}
{c: Capo 2}
{sov}
Ten, kdo [Am]nezná hukot vody lopat[C]kama vířený
jako [G]já, jó jako [Am]já,
kdo Hud[Am]sonský slapy nezná sírou [G]pekla sířený,
ať se [Am]na Hudsonský [G]šífy najmout [Am]dá, [G]jo-ho-[Am]ho.
{eov}
{sov}
Ten, kdo [Am]nepřekládal uhlí, šíf když [C]na mělčinu vjel,
málo[G] zná, málo [Am]zná,
ten, kdo [Am]neměl tělo ztuhlý, až se [G]nočním chladem chvěl,
ať se [Am]na Hudsonský [G]šífy najmout [Am]dá, [G]jo-ho-[Am]ho.
{eov}
{soc}
[F]Ahoj, páru tam [Am]hoď,
ať [G]do pekla se dříve dohra[Am]bem,
[G]jo-ho-[Am]ho, [G]jo-ho-[Am]ho.
{eoc}
{sov}
Ten, kdo [Am]nezná noční zpěvy zaros[C]tenejch lodníků
jako [G]já, jó jako [Am]já,
ten, kdo [Am]cejtí se bejt chlapem, umí [G]dělat rotyku,
ať se [Am]na Hudsonský [G]šífy najmout [Am]dá, [G]jo-ho-[Am]ho.
{eov}
{sov}
Ten, kdo [Am]má na bradě mlíko, kdo se [C]rumem neopil,
málo [G]zná, jó málo [Am]zná,
kdo ne[Am]cejtil hrůzu z vody, kde se [G]málem utopil,
ať se [Am]na Hudsonský [G]šífy najmout [Am]dá, [G]jo-ho-[Am]ho.
{eov}
{column_break}
{soc}
[F]Ahoj, páru tam [Am]hoď,
ať [G]do pekla se dříve dohra[Am]bem,
[G]jo-ho-[Am]ho, [G]jo-ho-[Am]ho.
{eoc}
{sov}
Kdo má [Am]roztrhaný boty, kdo má [C]pořád jenom hlad
jako [G]já, jó jako [Am]já,
kdo chce [Am]celý noci čuchat pekel[G]nýho vohně smrad,
ať se [Am]na Hudsonský[G] šífy najmout [Am]dá, [G]jo-ho-[Am]ho.
{eov}
{sov}
Kdo chce [Am]zhebnout třeba zejtra, komu [C]je to všechno fuk,
kdo je [G]sám, jó jako [Am]já,
kdo má [Am]srdce v správným místě, kdo je [G]prostě príma kluk,
ať se [Am]na Hudsonský [G]šífy najmout [Am]dá, [G]jo-ho-[Am]ho.
{eov}
{soc}
[F]Ahoj, páru tam [Am]hoď,
ať [G]do pekla se dříve dohra[Am]bem,
[G]jo-ho-[Am]ho, [G]jo-ho-[Am]ho,
[G]jo-ho-[Am]ho.
{eoc}

View File

@@ -0,0 +1,6 @@
+++
title = "Hudsonský šífy"
[taxonomies]
category = ["classic"]
artist = ["Wabi Daněk"]
+++

View File

@@ -0,0 +1,6 @@
+++
title = "Když punkáči stárnou"
[taxonomies]
category = ["mixtape"]
artist = ["Tragedis"]
+++

View File

@@ -0,0 +1,66 @@
{title: Když punkáči stárnou}
{artist: Tragedis}
{columns: 2}
{sov}
[D]Ráno jsem [A]u popelnic potkal mýho [Bm]kámoše,
jak starou [G]bundu [A]vyhazuje [D]do koše.
Vzpomínky [A]vzal a prostě hodil [Bm]do smetí,
zdá se, že [G]nášivky už [A]letos asi [D]neletí.
{eov}
{sov}
Jak slyším [A]Éčka, Znouzi a starý [Bm]Totáče,
je mi z tý [G]nostalgie [A]občas trochu [D]do pláče.
Pulitry [A]piva a rozlazená [Bm]kytara,
proč řešit [G]zítřek mi [A]tenkrát hlava [D]nebrala.
{eov}
{sov}
A dnes to [A]táhnem od vejplaty k [Bm]vejplatě,
přes tejden v [G]práci, [A]o víkendu [D]na chatě,
k tomu si [A]každej najdem nějakej ten [Bm]koníček
a z brutus [G]punkera je [A]ochočenej [D]králíček.
{eov}
{soc}
[G]Jak roky [A]letí lidi [D]stárnou,
[Bm]říkal mi [A]notorik před bum[D]bárnou.
[G]A z jeho [A]dechu stále [D]více,
[Bm]cítil jsem [A]jasně odér slivo[D]vice.
[G]Za teplý [A]žrádlo a trochu [D]kávy,
[Bm]svůj život [A]ve fabrice lidi [D]tráví.
[G]A už to [A]bude dobrejch, [D]dobrejch deset [G]let,
kdy jsi o půlnoci, před nonstopem, na hovado zlitej křičel, do tmy plný spících domů
[A] [A] Punk´s not [D]dead.
{eoc}
{column_break}
{sov}
Za bídný [A]prachy děláš idiota v [Bm]Mekáči
a co je [G]na tom, [A]vždyť jsme pořád [D]punkáči.
Z vlasů co [A]zbyly se však těžko číro [Bm]postaví,
aspoň že [G]peněženky [A]máme pořád [D]děravý.
{eov}
{sov}
Kam se mi [A]všichni moji kamarádi [Bm]poděli,
na pivo [G]nejdou v [A]pátek, ani v [D]neděli.
Na akcích v [A]klubech cizí krasavice [Bm]potkávám
a na fes[G]ťákách slevy [A]pro důchodce [D]dostávám.
{eov}
{soc}
[G]Jak roky [A]letí lidi [D]stárnou,
[Bm]říkal mi [A]notorik před bum[D]bárnou.
[G]A z jeho [A]dechu stále [D]více,
[Bm]cítil jsem [A]jasně odér slivo[D]vice.
[G]Za teplý [A]žrádlo a trochu [D]kávy,
[Bm]svůj život [A]ve fabrice lidi [D]tráví.
[G]A už to [A]bude dobrejch, [D]dobrejch deset [G]let,
kdy jsi o půlnoci, před nonstopem, na hovado zlitej křičel, do tmy plný spících domů
[A] [A] Punk´s not [D]dead.
{eoc}

6
content/kocky/index.md Normal file
View File

@@ -0,0 +1,6 @@
+++
title = "Kočky"
[taxonomies]
category = ["mixtape"]
artist = ["Tragedis"]
+++

52
content/kocky/kocky.cho Normal file
View File

@@ -0,0 +1,52 @@
{title: Kočky}
{artist: Tragedis}
{transpose: -4}
{columns: 2}
{c: Capo 4 (Transpozice o -4 z B)}
[B] [D#m] [F#] [C#]
[B] [D#m] [F#] [C#]
{sov}
V [B]minulým životě jsem byl [D#m]kocour,
páč [B]co jsem přežil, chtělo aspoň [C#]devět životů.
[B]Otravy, kopance a [D#m]rány,
i s [B]vytrhanou srstí budu [C#]mňoukat u plotu.
{eov}
{soc}
[B]Kočky, polezte [D#m]ven!
Dneska [F#]protancujem noc, zejtra [C#]prochrápeme den.
Když [B]vyčerpáním téměř mrtvej [D#m]jsem,
tak [B]doma si dám mlíčko a [C#]táhnu zase dál,
tak čert mě [F#]vem. [*8 dob]
{eoc}
[B] [D#m] [F#] [C#]
[B] [D#m] [F#] [C#]
{column_break}
{sov}
[B]Serenády u popelnic [D#m]znám,
i [B]pocit, když tě pitbull žene [C#]noční ulicí.
[B]Vezmeme-li v potaz, že jsem [D#m]kocour,
tak [B]proč se místo koček domu [C#]vracím s vopicí?
{eov}
{soc}
[B]Kočky, polezte [D#m]ven!
Dneska [F#]protancujem noc, zejtra [C#]prochrápeme den.
Když [B]vyčerpáním téměř mrtvej [D#m]jsem,
tak [B]doma si dám mlíčko a [C#]táhnu zase dál,
tak ... [B]Kočky, polezte [D#m]ven!
Dneska [F#]protancujem noc, zejtra [C#]prochrápeme den.
Když [B]vyčerpáním téměř mrtvej [D#m]jsem,
Až [B]padnem z neřesti a úna[D#m]vou,
ať [B]maso vezmou krysy
a [C#]chlupy po Vltavě odpla[F#]vou. [*8 dob]
{eoc}
[B] [D#m] [F#] [C#]
[B] [D#m]
[B] [C#] [F#]

View File

@@ -0,0 +1,6 @@
+++
title = "Lokomotiva"
[taxonomies]
category = ["mixtape"]
artist = ["Poletíme?"]
+++

View File

@@ -0,0 +1,66 @@
{title: Lokomotiva}
{artist: Poletíme?}
{columns: 2}
{sov}
[G]Pokaždé když tě vidím, [D]vím, že by to šlo
a když [Em]jsem přemejšlel, co cítím, [C]tak mě napadlo
jestli [G]nechceš svýho osla vedle [D]mýho osla hnát,
jestli [Em]nechceš se mnou tahat ze ze[C]mě rezavej drát.
{eov}
{soc}
[G]Jsi loko[D]motiva, která [Em]se řítí [C]tmou,
[G]jsi indi[D]áni, kteří [Em]prérií je[C]dou,
[G]jsi kulka [D]vystřelená [Em]do mojí hla[C]vy,
[G]jsi prezident [D]a já tvé [Em]spojené stá[C]ty.
{eoc}
{sov}
[G]Přines jsem ti kytku, no co [D]koukáš, to se má
je to [Em]koruna žvejkačkou ke špej[C]li přilepená,
a dva ke[G]límky vod jogurtu, co je [D]mezi nima niť,
může[Em]me si takhle volat, [C]když budeme chtít.
{eov}
{soc}
[G]Jsi loko[D]motiva, která [Em]se řítí [C]tmou,
[G]jsi indi[D]áni, kteří [Em]prérií je[C]dou,
[G]jsi kulka [D]vystřelená [Em]do mojí hla[C]vy,
[G]jsi prezident [D]a já tvé [Em]spojené stá[C]ty.
{eoc}
{sov}
[G]Každej příběh má svůj konec, ale [D]né ten náš,
nám to [Em]bude navždy dojit, všude [C]kam se podíváš,
naše [G]kachny budou zlato nosit a [D]krmit se popcornem,
já to [Em]každej večer spláchnu půl[C]nočním expresem
{eov}
{column_break}
{soc}
[G]Jsi loko[D]motiva, která [Em]se řítí [C]tmou,
[G]jsi indi[D]áni, kteří [Em]prérií je[C]dou,
[G]jsi kulka [D]vystřelená [Em]do mojí hla[C]vy,
[G]jsi prezident [D]a já tvé [Em]spojené stá[C]ty.
{eoc}
{sov}
[G]Dětem dáme jména Jessie, [D]Jeddej, Jad a John,
ve sto[Em]padesáti letech ho budu mít [C]stále jako slon,
a ty nez[G]tratíš svoji krásu, stále [D]štíhlá kolem pasu,
stále [Em]dokážeš mě chytit lasem [C]a přitáhnout na terasu
{eov}
{c: Refrén 3x, druhý bez rytmu}
{soc}
[G]Jsi loko[D]motiva, která [Em]se řítí [C]tmou,
[G]jsi indi[D]áni, kteří [Em]prérií je[C]dou,
[G]jsi kulka [D]vystřelená [Em]do mojí hla[C]vy,
[G]jsi prezident [D]a já tvé [Em]spojené stá[C]ty.
{eoc}
{soc}
Já a [G]ty...
{eoc}

View File

@@ -0,0 +1,6 @@
+++
title = "Mravenec"
[taxonomies]
category = ["mixtape"]
artist = ["E!E"]
+++

View File

@@ -0,0 +1,51 @@
{title: Mravenec}
{artist: E!E}
{columns: 2}
[G] [C] [G] [C] [G] [C] [D]
{sov}
[G]Chodím prázdnou uli[C]cí.
v [G]ruce párek s hořči[C]cí.
[G]Chodím sem a chodím [C]tam.
[G]vůbec nic už nevní[D]mám.
Mrave[G]nec
{eov}
{soc}
[G]Já jsem Ferda mrave[C]nec,
natáhnutej na skři[G]pec.
Já jsem Ferda mrave[C]nec,
natáhnutej na skři[G]pec.
Já jsem Ferda mrave[C]nec,
natáhnutej na skři[G]pec.
Já jsem Ferda mrave[C]nec,
mrave[D]nec!
{eoc}
[G] [C] [G] [C] [G] [C] [D]
{column_break}
{sov}
[G]Chodím prázdnou uli[C]cí.
[G]Prázdnota pod bukvi[C]cí.
[G]Chodím tam a chodím [C]sem.
[G]Chodim pod mikrosko[D]pem.
Mrave[G]nec
{eov}
{soc}
[G]Já jsem Ferda mrave[C]nec,
natáhnutej na skři[G]pec.
Já jsem Ferda mrave[C]nec,
natáhnutej na skři[G]pec.
Já jsem Ferda mrave[C]nec,
natáhnutej na skři[G]pec.
Já jsem Ferda mrave[C]nec,
mrave[D]nec!
{eoc}
{soc}
Obratlo[G]vec!
{eoc}

View File

@@ -0,0 +1,6 @@
+++
title = "Nalej ruma"
[taxonomies]
category = ["mixtape"]
artist = ["Standa"]
+++

View File

@@ -0,0 +1,38 @@
{title: Nalej ruma}
{artist: Standa}
{transpose: -5}
{c: Standa má capo 5, protože má transpozici -5 na G}
{c: Originál je v Db, capo 1 live, bez capa pro studio verzi}
{sov}
Dnes [C]už jsem vypil [Am]piva dost
Už [C]nevím co je [Am]střízlivost
[F]A tak pěkně [G]prosím, nalej [C]ruma [G]
A [C]i když nemám [F]pení[G]ze
já [Am]stále ještě [F]věřím že
tu [G]bude někdo, [E7]kdo mi koupí [Am]ruma
{eov}
{soc}
Nalej [F]ruma. Nalej [Am]ruma.
Nalej [F]ruma. Nalej [C]ruuuu[G]uuuuu[C]ma. [Am] [C] [Am]
{eoc}
{sov}
To jsem [C]jednou v Písku v [Am]baru stál.
Ten [C]Gambrinus, co jsem [Am]pil, mě sral.
[F]Tak na baru se [G]ptám, "nemáte [C]ruma?" [G]
Bar[C]man si jenom [F]odka[G]šlal
na [Am]Fruko Schulz se [F]podíval
a já v [G]cukuletu [E7]pil jsem zas jak [Am]puma.
{eov}
{soc}
Nalej [F]ruma. Nalej [Am]ruma.
Nalej [F]ruma. Nalej [C]ruuuu[G]uuuuu[C]ma. [Am]
Nalej [F]ruma. Nalej [Am]ruma.
Nalej [F]ruma. Nalej [C]ruuuu[G]uuuuu[C]ma.
{eoc}

6
content/nonstop/index.md Normal file
View File

@@ -0,0 +1,6 @@
+++
title = "Non stop"
[taxonomies]
category = ["mixtape"]
artist = ["Alkehol"]
+++

View File

@@ -0,0 +1,81 @@
{title: Non stop}
{artist: Alkehol}
{columns: 2}
{soc}
[D]Non stop, já chci pít [A]non stop
a s tím, kdo [G]příde, [A]mám chuť se [D]rvát
[D][Dsus4][D][Dsus4][D]
[D]Non stop, já chci pít [A]non stop
a s tím, kdo [G]příde, [A]mám chuť se [D]rvát
[D][Dsus4][D][Dsus4][D]
{eoc}
{sov}
[D]Tá[Dsus4]tovi [D]pa[Dsus4]náka dám [D]lok,
[D]pi[Dsus4]jeme [D]spo[Dsus4]lu víc než [D]rok,
[A]v hospodě, kam [G]oba chodí[D]me.
[D][Dsus4][D][Dsus4][D]
[D]Brá[Dsus4]cha, ten [D]na [Dsus4]rumu u[D]jel,
[D]já [Dsus4]jsem ho [D]fer[Dsus4]netem před[D]jel,
[A]nicméně, závi[G]slí všichni [D]jsme.
[D][Dsus4][D][Dsus4][D]
{eov}
{sob}
[Bm]Nemůžou znát mý nápady.
[G]Vypitej mozek [A]mám.
[Bm]Jen tobě můžu vážně říct,
[G]celej den prochlas[A]tám.
{eob}
{soc}
Já chci pít [D]non stop, já chci pít [A]non stop
a s tím, kdo [G]příde, [A]mám chuť se [D]rvát
[D][Dsus4][D][Dsus4][D]
[D]Non stop, já chci pít [A]non stop
a s tím, kdo [G]příde, [A]mám chuť se [D]rvát
[D][Dsus4][D][Dsus4][D]
{eoc}
{sov}
[D]Ži[Dsus4]vot je [D]sen[Dsus4]za chlastá[D]ní,
[D]je[Dsus4]nomže, [D]dá [Dsus4]to koumá[D]ní
[A]vymyslet, jak [G]by se propít [D]dal.
[D][Dsus4][D][Dsus4][D]
[D]Nej[Dsus4]sem už [D]dí[Dsus4]tě limo[D]nád,
[D]ko[Dsus4]řalku [D]dám [Dsus4]si velmi [D]rád,
[A]jaká je snad [G]ani ty ne[D]víš.
[D][Dsus4][D][Dsus4][D]
{eov}
{sob}
[Bm]Nejsem už dítě mejdanů,
[G]teď jsem ten správnej [A]typ,
[Bm]láká mě vůně výčepů
[G]a chci jen non-stop [A]pít.
{eob}
{soc}
Já chci pít [D]non stop, já chci pít [A]non stop
a s tím, kdo [G]příde, [A]mám chuť se [D]rvát
[D][Dsus4][D][Dsus4][D]
[D]Non stop, já chci pít [A]non stop
a s tím, kdo [G]příde, [A]mám chuť se [D]rvát
[D][Dsus4][D][Dsus4][D]
{eoc}

View File

@@ -0,0 +1,6 @@
+++
title = "Hideen Track - Plzeňská"
[taxonomies]
category = ["mixtape"]
artist = ["Morčata na útěku"]
+++

View File

@@ -0,0 +1,27 @@
{title: Hideen Track - Plzeňská}
{artist: Morčata na útěku}
{album: Jsme trochu jiný}
[C]Petře [G]Petříč[Am]ku [F]chlapče [C]rozmi[G]lý,
[C]my bychom se [C7]k sobě tolik,
[F]my bychom se k [Fm]sobě tolik [C]ho[G]di[C]li.
[C]Větře [G]vetříč[Am]ku [F]vaneš [C]po po[G]li,
[C]pofoukej mi [C7]mou hlavičku,
[F]pofoukej mi [Fm]mou hlavičku [C] ať [G]nebo[C]lí.
[C]Voda [G]voděn[Am]ka [F]mezi [C]obláz[G]ky,
[C]takové je [C7]pohlazení,
[F]takové je [Fm]pohlazení [C]od [G]lás[C]ky.
[C]Já jsem [G]tvá mi[Am]lá, [F]ty jsi [C]můj mi[G]lý,
[C]co bychom se [C7]o samotě,
[F]co bychom se [Fm]osamotě [C]trá[G]pi[C]li.
[C]Plzně [G]Plznič[Am]ky, [F]holky [C]rozmi[G]lý,
[C]včera večer [C7]jsme vas všechny,
[F]včera večer [Fm]jsme vas všechny [C]vy[G]pi[C]li.
[C]Rume [G]rumíč[Am]ku, [F]chlapče z [C]Božko[G]va,
[C]včera jsem se [C7]z tebe doblil,
[F]včera jsem se [Fm]z tebe doblil [C]do [G]slo[C]va.

View File

@@ -0,0 +1,6 @@
+++
title = "Severní Vietnam"
[taxonomies]
category = ["mixtape"]
artist = ["Morčata na útěku"]
+++

View File

@@ -0,0 +1,63 @@
{title: Severní Vietnam}
{artist: Morčata na útěku}
{album: Hlavně se s tím nesrat}
{columns: 2}
{sov}
Jdu s [C]děravou plící a [Am]kulka vařící
mi v [F]hrudníku pěkně [C]bublá
něk[C]do se mi směje v tom v [Am]zádech ho hřeje
má [F]lesklá a [G]ostrá ku[C]dla
Pak [C]dlouho jen mlčí a v [Am]křečích se krčí
já [F]šlapu mu po páte[C]ři
až [C]řeknu to dětem jak [Am]bloudil jsem světem
to [F]nikdo mi [G]neuvě[C]ří
{eov}
{soc}
[C]Severní [C7]Vietnam je [F]krutý
[C]počítej vojáku s [G7]tím
k [C]nohám ti [C7]dám mrtvý [F]žlutý
nebo se [C]vůbec [G7]nevrá[C]tím
{eoc}
{sov}
Ke mě [C]Vietnamka běží však [Am]dobíhá stěží
svou [F]devítku natahu[C]ji
[C]rázem se složí a v [Am]krvavé louži
ji [F]bodákem [G]dotahu[C]ji
[C]Není to krása kus [Am]žlutýho masa
se [F]za mnou jen ladně vle[C]če
[C]z toho hrdiny i [Am]z jeho rodiny
říd[F]ká krev a [G]mozek te[C]če
{eov}
{column_break}
{soc}
[C]Severní [C7]Vietnam je [F]krutý
[C]počítej vojáku s [G7]tím
k [C]nohám ti [C7]dám mrtvý [F]žlutý
nebo se [C]vůbec [G7]nevrá[C]tím
{eoc}
{sov}
[C]Vracím se domů a [Am]síla atomu
tu [F]válku hned vyřeši[C]la
[C]shrábli jsme zlato a [Am]jednotka NATO
[F]Vietnamce [G]vypleni[C]la
[C]Vyhráli bílí a [Am]žlutý co zbyli maj
[F]navěky zjizvenou [C]tvář
maj [C]plechovej džbánek a s [Am]textilem stánek
a [F]nad ním nu[G]kleární [C]zář
{eov}
{soc}
[C]Severní [C7]Vietnam je [F]krutý
[C]počítej vojáku s [G7]tím
k [C]nohám ti [C7]dám mrtvý [F]žlutý
nebo se [C]vůbec [G7]nevrá[C]tím
{eoc}

View File

@@ -0,0 +1,6 @@
+++
title = "Spalovač chlastu"
[taxonomies]
category = ["mixtape"]
artist = ["Alkehol"]
+++

View File

@@ -0,0 +1,51 @@
{title: Spalovač chlastu}
{artist: Alkehol}
{columns: 2}
{transpose: 5}
{sov}
[D]V noci jsem chlastal nejméně za tři
[G]nemůžu přestat [B]smysly se [A]jitří
[D]řítí se domy a padaj skály
[G]já nevím proč mi to[B] tak rychle [A]pálí
{eov}
{sob}
[G]Kámoši čuměj jak do sebe to peru
[G][A]vždycky si myslej [G][A]že se neproberu
[G]ale já vstanu zahraje kapela
[G][A]tak podle plánu [G][A]hrabu se z popela
{eob}
{soc}
[D]Perte mi rumy a pivo rovnou do [G]žil
Jó ten kdo umí [A]ten to všechno přežil
[D]perte to do mě jak zubní pastu
[G]to nejsem já to je [A]spalovač chlastu
{eoc}
{c:Mezihra 2x}
[D][G][B][A]
{column_break}
{sov}
[D]Poliši daj mi dejchnout do přístroje
[G]a koukaj sami [B]hodně divný [A]to je
[D]lil jsem tři dny v kuse a je to nemilé
[G]zlitej jako prase a [B]já mám nula [A]promile
{eov}
{sob}
[G]Kámoši čuměj jak do sebe to peru
[G][A]vždycky si myslej [G][A]že se neproberu
[G]ale já vstanu zahraje kapela
[G][A]tak podle plánu [G][A]hrabu se z popela
{eob}
{soc}
[D]Perte mi rumy a pivo rovnou do [G]žil
Jó ten kdo umí [A]ten to všechno přežil
[D]perte to do mě jak zubní pastu
[G]to nejsem já to je [A]spalovač chlastu
{eoc}

View File

@@ -0,0 +1,6 @@
+++
title = "Zamilovaný / Nešťastná"
[taxonomies]
category = ["mixtape"]
artist = ["Rybičky 48"]
+++

View File

@@ -0,0 +1,41 @@
{title: Zamilovaný / Nešťastná}
{artist: Rybičky 48}
{sov}
[G] Když ráno [D]vstanu, tak [Em]políbim svojí [C]milovanou [G]ženu. [D] [Em] [C]
[G] Snídani [D]do postele [Em]dám jí, a [C]růži z lásky k [G]tomu. [D] [Em] [C]
[G] Ještě [D]umeju [Em]nádobí z večeře [C]a vydrhnu [G]vanu. [D] [Em] [C]
[G] Svačinu [D]udělám si [Em]do práce a [C]odcházim z [G]domu. [D] [C]
Mám skvělou [G]ženu. [D] [Em] [C] [G] [D] [C]
{eov}
{sov}
[G] První, co [D]ráno [Em]udělá je, že mi [C]oslintá [G]hubu. [D] [Em] [C]
[G] Nesnáším [D]jídlo do [Em]postele, tu [C]každodenní [G]nudu. [D] [Em] [C]
[G] Při sexu [D]vykřikuje: [Em]„Promiň, [C]lásko já už [C]budu!” [D] [Em] [C]
[G] Ze zvyku [D]zamávám mu z [Em]postele, když [C]říká „Já už [G]pudu” [D] [C]
Nesnáším svého [G]muže! [D] [Em] [C] [G] [D] [C]
{eov}
{soc}
Já jsem [G]zamilovaný, já jsem nešťastná. Já jsem [C]zamilovaný, já jsem nešťastná.
Já jsem tak [Em]zamilovaný do ní, je překrásná. Já jsem tak [D]nešťastná, já jsem tak nešťastná.
{eoc}
{sov}
[G] V práci [D]počítám [Em]minuty, kdy půjdu [C]domů za svou [G]ženou. [D] Ať se sem [Em]nevra[C]cí.
[G] Těším se [D]na to, až si [Em]napustíme [C]plnou vanu s [G]pěnou. [D] Kterou fakt [Em]nesná[C]ším.
[G] Do ouška [D]pošeptám jí, [Em]že je mojí [C]jedi[G]nou. [D] Nech si to [Em]pro [C]jinou.
[G] Vzpomínám [D]na den, kdy si [Em]řekla ano [C]a byla [G]mou. [D] To bylo [C]chybou osud[G]nou.
{eov}
{soc}
Já jsem [G]zamilovaný, já jsem nešťastná. Já jsem [C]zamilovaný, já jsem nešťastná.
Já jsem tak [Em]zamilovaný do ní, je překrásná. Já jsem tak [D]nešťastná, já jsem tak nešťastná.
{eoc}
{soc}
Já jsem [G]zamilovaný, já jsem nešťastná. Já jsem [C]zamilovaný, já jsem nešťastná.
Já jsem tak [Em]zamilovaný do ní, je překrásná. Já jsem tak [D]nešťastná, já jsem tak nešťastná.
{eoc}

View File

@@ -0,0 +1,6 @@
+++
title = "Zimní královna"
[taxonomies]
category = ["mixtape"]
artist = ["Arakain"]
+++

View File

@@ -0,0 +1,62 @@
{title: Zimní královna}
{artist: Arakain}
{transpose: 4}
{columns: 2}
{c: Capo 4/5 nebo bez a zpívat vejš???}
{c: Originál od Eb}
[Eb][Bbsus4][Cm][Ab]
[Eb][Bbsus4][Bb][Ab]
{sov}
[Eb] V pohád[Bb]kách najdeš
[Cm]moudrou pravdu, spousty [Ab]příběhů,
[Eb]stejně i [Bb]svůj v nich můžeš [Ab]číst.
[Eb]Okouz[Bb]lí cizí [Cm]žena lásku tvou,
toho s [Ab]kým jste si souzeni
[Eb]tak jak to [Bb]nést kde návod [Ab]vzít.
{eov}
{soc}
[Eb]Jenom si [Bb]vzpomeň,
jednou p[Ab]řijela tak Zimní [Cm]královna, [Bb]
[Eb]malýho [Bb]kluka odvezla [Ab]na saních.
[Eb]Gerda pl[Bb]áče,
volá [Ab]Káji, Káj má srdce [Cm]studený, [Bb]
[Eb]malá [Bb]Gerda musí ho [Ab]zachránit.
{eoc}
{sov}
[Eb]Otři si s[Bb]lzy,
dobře [Ab]víš, že pláč ten nic [Cm]už nesprav[Bb]í.
[Eb]Musíš teď [Bb]jít, ne takhle s[Ab]tát.
[Eb]Nezou[Bb]fej, dej si radit [Cm]pohádkou,
tu už [Ab]víc nikdo nezmění.
[Eb]Osud ti [Bb]dá, co musí [Ab]dát.
{eov}
{column_break}
{soc}
[Eb]Jenom si [Bb]vzpomeň,
jednou p[Ab]řijela tak Zimní [Cm]královna, [Bb]
[Eb]malýho [Bb]kluka odvezla [Ab]na saních.
[Eb]Gerda pl[Bb]áče,
volá [Ab]Káji, Káj má srdce [Cm]studený, [Bb]
[Eb]malá [Bb]Gerda musí ho [Ab]zachránit.
{eoc}
[Eb][Bb][Cm][Ab]
[Eb][Bb][Ab]
{soc}
[Eb]Bude to [Bb]boj,
srdce [Ab]z ledu, její cit
dobře [Cm]víš, kdo v něm zví[Bb]tězí. [Eb]
Vzpomene [Bb]Káj a jeho srdce [Ab]roztaje.
[Eb]A stejně t[Bb]y ... jdi teď [Ab]za ní,
je v tvých silách tu [Cm]druhou pora[Bb]zit. [Eb]
Tak jako Ge[Bb]rda, když šla za [Ab]Kájem. [Eb][*Outro]
{eoc}

5
content/zvonik/index.md Normal file
View File

@@ -0,0 +1,5 @@
+++
title = "Zvoník"
[taxonomies]
category = ["classic"]
+++

33
content/zvonik/zvonik.cho Normal file
View File

@@ -0,0 +1,33 @@
{title: Zvoník}
{subtitle: Naše divná verze}
[Em]Nahoře na věži, nahoře houpal se [C]zvon a za ním [D]stál právě [Em]on.
[Em]Byl zvoníkem z povo[C]lání a měl [D]jedno veliký [Em]přání.
{soc}
[Em]Olovo na lidi, olovo na lidi [C]bral Quasi[D]modo z Notre-[Em]Dame.
[Em]Trámy a kameny, trámy a kameny [C]jen, z okna [D]ven, dolů [Em]dál.
{eoc}
[Em]Každé ráno lano do ruky [C]bral a zvony [D]jím rozhou[Em]pal.
[Em]Zvony, ty krásný [C]zvony, ze všeho [D]nejvíc milo[Em]val.
{soc}
[Em]Olovo na lidi, olovo na lidi [C]bral Quasi[D]modo z Notre-[Em]Dame.
[Em]Trámy a kameny, trámy a kameny [C]jen, z okna [D]ven, dolů [Em]dál.
{eoc}
[Em]Chytli ho, bili ho, trpili, mučili [C]za to, že chtěl [D]žít a milo[Em]vat.
[Em]Nemohl dál své oči [C]upírat na zlobu [D]lidí, které měl tak [Em]rád.
{soc}
[Em]Olovo na lidi, olovo na lidi [C]bral Quasi[D]modo z Notre-[Em]Dame.
[Em]Trámy a kameny, trámy a kameny [C]jen, z okna [D]ven, dolů [Em]dál.
{eoc}
[Em]Esmeraldo, ty krásná [C]jediná, mělas ho [D]ráda a dalas mu [Em]pít.
{soc}
[Em]Olovo na lidi, olovo na lidi [C]bral Quasi[D]modo z Notre-[Em]Dame.
[Em]Trámy a kameny, trámy a kameny [C]jen, z okna [D]ven, dolů [Em]dál.
{eoc}

41
makefile Normal file
View File

@@ -0,0 +1,41 @@
ifdef CHORDPRO_PIPELINE
CHORDPRO_CMD = chordpro
else
CHORDPRO_CMD = docker run -ti --rm --env HOME=$(HOME) --env USER=$(USER) --workdir $(shell pwd) --volume $(HOME):$(HOME) chordpro/chordpro:latest chordpro --config=chordpro.json
endif
SRC_DIR := $(wildcard content/*)
SRC_EXTENSION := .cho
SONG_CHO := $(foreach dir,$(SRC_DIR),$(wildcard $(dir)/*$(SRC_EXTENSION)))
SONG_PDF := $(patsubst %$(SRC_EXTENSION),%.pdf,$(SONG_CHO))
SONG_HTML := $(patsubst %$(SRC_EXTENSION),%.html,$(SONG_CHO))
SONGBOOK := content/songbook.pdf
.DEFAULT_GOAL := pdf
%.pdf: %$(SRC_EXTENSION)
$(CHORDPRO_CMD) -o $@ $<
%.html: %$(SRC_EXTENSION)
$(CHORDPRO_CMD) -o $@ $<
all: pdf html songbook
$(SONGBOOK): $(SONG_PDF)
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=$@ $^
.PHONY: html
html: $(SONG_HTML)
.PHONY: pdf
pdf: $(SONG_PDF)
.PHONY: songbook
songbook: pdf
$(MAKE) $(SONGBOOK)
.PHONY: clean
clean:
rm -f $(SONG_PDF) $(SONG_HTML) $(SONGBOOK)

76
manage Executable file
View File

@@ -0,0 +1,76 @@
#!/bin/bash
SONGS_PATH="content/"
usage() {
cat <<EOF
Usage: $0 <command> [options]
Commands:
help Show this help message and exit
new [name] Create a new song [with the specified name]
edit <name> Edit song with a text editor
iedit <name> Interactive edit with PDF preview
Examples:
$0 help
$0 new [song-name]
$0 edit <song-name>
$0 iedit <song-name>
EOF
exit 1
}
create_new_song() {
if [ -z "$name" ]; then
read -p "Song name (file-name-in-path): " name
fi
read -p "Song title: " title
read -p "Artist: " artist
read -p "Category: " category
mkdir -p "$SONGS_PATH/$name"
echo -e "{title: $title}\n{artist: $artist}" > "$SONGS_PATH/$name/$name.cho"
echo -e "+++\ntitle = \"$title\"\n[taxonomies]\ncategory = [\"$category\"]\nartist = [\"$artist\"]\n+++" > "$SONGS_PATH/$name/index.md"
echo "Song $name created."
}
if [ "$#" -lt 1 ]; then
usage
fi
case "$1" in
new)
if [ "$#" -eq 2 ]; then
name="$2"
fi
create_new_song
;;
edit)
if [ "$#" -eq 2 ]; then
xdg-open "content/$2/$2.cho"
else
echo -e "Missing song name\n"
usage
fi
;;
iedit)
if [ "$#" -eq 2 ]; then
touch "content/$2/$2.pdf"
xdg-open "content/$2/$2.pdf" &
xdg-open "content/$2/$2.cho"
else
echo -e "Missing song name\n"
usage
fi
;;
help)
usage
;;
*)
echo -e "Invalid argument: $1\n"
usage
;;
esac

1
sass/_fonts.scss Normal file
View File

@@ -0,0 +1 @@
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wght@0,400;0,600;1,400;1,600&display=swap');

81
sass/chordpro.scss Normal file
View File

@@ -0,0 +1,81 @@
@import "fonts";
$col-white: #fff;
$col-black: #2e3440;
body {
margin: 0;
background-color: $col-black;
color: $col-white;
font-family: "Noto Sans", Tahoma, Geneva, Verdana, sans-serif;
text-rendering: geometricPrecision;
transform-origin: 0 0;
transition: transform ease-out .25s;
}
table {
white-space: nowrap;
}
.song {
padding: 3em 0 1em 1em;
}
.title {
font-size: 1.5em;
font-weight: bold;
margin-bottom: 2em;
}
.chords {
font-style: italic;
}
.chorus, .verse, .tab {
margin: 1em 0;
}
.chorus {
position: relative;
&:before {
content: "";
position: absolute;
left: -1em;
display: block;
height: 100%;
width: 2px;
background-color: $col-white;
}
}
.tab {
white-space: pre;
font-family: monospace;
font-size: 1.25em;
}
.comment {
display: inline-block;
padding: .25em .5em;
background-color: #4c566a;
color: $col-white;
}
@media (prefers-color-scheme: light) {
body {
background-color: $col-white;
color: $col-black;
}
.chorus:before {
background-color: $col-black;
}
.comment {
background-color: #d8dee9;
color: $col-black;
}
}

238
sass/style.scss Normal file
View File

@@ -0,0 +1,238 @@
@import "fonts";
$width-mobile: 900px;
* {
box-sizing: border-box;
}
body {
margin: 0;
padding: 0;
background-color: #2e3440;
color: #fff;
font-family: "Noto Sans", Tahoma, Geneva, Verdana, sans-serif;
text-rendering: geometricPrecision;
@media (prefers-color-scheme: light) {
background-color: #fff;
color: #2e3440;
}
}
main.songs {
display: flex;
flex-direction: column;
gap: 1em;
max-width: 50em;
margin: 0 auto;
padding: 1em;
@media only screen and (max-width: $width-mobile) {
grid-template-columns: 1fr;
}
.filters {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
gap: 1em;
margin: 1em 0;
// This is removed via JS to prevent displaying the inputs
// on browsers wih JavaScript disabled.
&.hidden { display: none }
&>* {
border-radius: .5em;
box-shadow: rgba(15, 17, 21, 0.5) 0px 3px 6px 0px;
background-color: #3b4252;
color: inherit;
@media (prefers-color-scheme: light) {
background-color: #fff;
color: #2e3440;
}
}
form {
grid-column: 1 / 3;
display: flex;
overflow: hidden;
input {
font-size: inherit;
border: 0;
background-color: inherit;
color: inherit;
}
input[type="search"] {
flex-grow: 1;
padding: .75em 1em;
}
input[type="reset"] {
cursor: pointer;
width: 3em;
padding: 0;
background-size: auto 1.5em;
background-position: center;
background-repeat: no-repeat;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='rgba(160,163,170,1)'%3E%3Cpath d='M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM12 10.5858L14.8284 7.75736L16.2426 9.17157L13.4142 12L16.2426 14.8284L14.8284 16.2426L12 13.4142L9.17157 16.2426L7.75736 14.8284L10.5858 12L7.75736 9.17157L9.17157 7.75736L12 10.5858Z'%3E%3C/path%3E%3C/svg%3E");
}
}
&>.button {
font-weight: bold;
text-align: center;
cursor: pointer;
user-select: none;
padding: .75em 1em;
&.selected {
color: #fff;
&[data-category="mixtape"] { background-color: #bf616a }
&[data-category="classic"] { background-color: #5e81ac }
}
}
@media only screen and (max-width: $width-mobile) {
grid-template-columns: 1fr 1fr;
}
}
.song-list {
display: grid;
gap: 1em;
&>div {
display: flex;
justify-content: space-between;
align-items: center;
gap: 1em;
padding: .5em;
padding-left: 1em;
border-radius: .5em;
box-shadow: rgba(15, 17, 21, 0.5) 0px 3px 6px 0px;
border-left: .7em solid #000;
background-color: #3b4252;
&.hidden { display: none }
&.mixtape { border-color: #bf616a }
&.classic { border-color: #5e81ac }
.meta {
display: flex;
flex-direction: column;
justify-content: center;
.title { font-weight: bold }
.artist { font-size: .8em }
}
.links {
display: flex;
gap: .5em;
&>* {
height: 2.75em;
width: 2.75em;
background-position: center;
background-repeat: no-repeat;
background-size: auto 1.5em;
border-radius: .25em;
}
.html {
background-color: #5e81ac;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='rgba(255,255,255,1)'%3E%3Cpath d='M16 2L21 7V21.0082C21 21.556 20.5551 22 20.0066 22H3.9934C3.44476 22 3 21.5447 3 21.0082V2.9918C3 2.44405 3.44495 2 3.9934 2H16ZM17.6569 12L14.1213 8.46447L12.7071 9.87868L14.8284 12L12.7071 14.1213L14.1213 15.5355L17.6569 12ZM6.34315 12L9.87868 15.5355L11.2929 14.1213L9.17157 12L11.2929 9.87868L9.87868 8.46447L6.34315 12Z'%3E%3C/path%3E%3C/svg%3E");
}
.pdf {
background-color: #bf616a;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='rgba(255,255,255,1)'%3E%3Cpath d='M3.9985 2C3.44749 2 3 2.44405 3 2.9918V21.0082C3 21.5447 3.44476 22 3.9934 22H20.0066C20.5551 22 21 21.5489 21 20.9925L20.9997 7L16 2H3.9985ZM10.5 7.5H12.5C12.5 9.98994 14.6436 12.6604 17.3162 13.5513L16.8586 15.49C13.7234 15.0421 10.4821 16.3804 7.5547 18.3321L6.3753 16.7191C7.46149 15.8502 8.50293 14.3757 9.27499 12.6534C10.0443 10.9373 10.5 9.07749 10.5 7.5ZM11.1 13.4716C11.3673 12.8752 11.6043 12.2563 11.8037 11.6285C12.2754 12.3531 12.8553 13.0182 13.5102 13.5953C12.5284 13.7711 11.5666 14.0596 10.6353 14.4276C10.8 14.1143 10.9551 13.7948 11.1 13.4716Z'%3E%3C/path%3E%3C/svg%3E");
}
}
@media (prefers-color-scheme: light) {
background-color: #fff;
color: #2e3440;
}
}
}
}
main.song {
height: 100dvh;
display: flex;
flex-direction: column;
max-width: 50em;
margin: 0 auto;
iframe {
flex-grow: 1;
display: block;
width: 100%;
padding-left: .5em;
border: 0;
}
.controls {
display: flex;
justify-content: center;
gap: 2em;
background-color: #3b4252;
section {
display:flex;
&.font-size>.button:hover, &.font-size>.button.active { background-color: #bf616a }
&.transpose>.button:hover, &.transpose>.button.active { background-color: #5e81ac }
&.autoscroll>.button:hover, &.autoscroll>.button.active { background-color: #d08770 }
&.autoscroll>#autoscroll.active { background-color: #bf616a }
.button{
display: grid;
align-items: center;
justify-items: center;
height: 2.5em;
width: 2.5em;
cursor: pointer;
background-position: center;
background-size: 1.5em;
background-repeat: no-repeat;
&.icon-add {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='rgba(255,255,255,1)'%3E%3Cpath d='M11 11V5H13V11H19V13H13V19H11V13H5V11H11Z'%3E%3C/path%3E%3C/svg%3E");
}
&.icon-subtract {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='rgba(255,255,255,1)'%3E%3Cpath d='M5 11V13H19V11H5Z'%3E%3C/path%3E%3C/svg%3E");
}
&.icon-font-size {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='rgba(255,255,255,1)'%3E%3Cpath d='M11.246 15H4.75416L2.75416 20H0.600098L7.0001 4H9.0001L15.4001 20H13.246L11.246 15ZM10.446 13L8.0001 6.88516L5.55416 13H10.446ZM21.0001 12.5351V12H23.0001V20H21.0001V19.4649C20.4118 19.8052 19.7287 20 19.0001 20C16.791 20 15.0001 18.2091 15.0001 16C15.0001 13.7909 16.791 12 19.0001 12C19.7287 12 20.4118 12.1948 21.0001 12.5351ZM19.0001 18C20.1047 18 21.0001 17.1046 21.0001 16C21.0001 14.8954 20.1047 14 19.0001 14C17.8955 14 17.0001 14.8954 17.0001 16C17.0001 17.1046 17.8955 18 19.0001 18Z'%3E%3C/path%3E%3C/svg%3E");
}
&.icon-transpose {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='rgba(255,255,255,1)'%3E%3Cpath d='M12 13.5351V3H20V5H14V17C14 19.2091 12.2091 21 10 21C7.79086 21 6 19.2091 6 17C6 14.7909 7.79086 13 10 13C10.7286 13 11.4117 13.1948 12 13.5351ZM10 19C11.1046 19 12 18.1046 12 17C12 15.8954 11.1046 15 10 15C8.89543 15 8 15.8954 8 17C8 18.1046 8.89543 19 10 19Z'%3E%3C/path%3E%3C/svg%3E");
}
&.icon-scroll {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='rgba(255,255,255,1)'%3E%3Cpath d='M12 10.0858L7.20712 5.29291L5.79291 6.70712L12 12.9142L18.2071 6.70712L16.7929 5.29291L12 10.0858ZM18 17L6.00001 17L6.00001 15L18 15V17Z'%3E%3C/path%3E%3C/svg%3E");
}
}
}
@media only screen and (max-width: $width-mobile) {
gap: 1em;
}
// This is removed via JS to prevent displaying the controls
// on browsers wih JavaScript disabled.
.hidden {
display: none;
}
}
}

BIN
static/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -0,0 +1,16 @@
AUTHORS
Current Contributors (sorted alphabetically):
- Vishal Vijayraghavan <vishalvvr at fedoraproject dot org>
Project Owner/ Maintainer (Current)
Red Hat, Inc.
Previous Contributors
- Pravin Satpute <psatpute at redhat dot com>
Project Owner/ Maintainer
Red Hat, Inc.
- Steve Matteson
Original Designer
Ascender, Inc.

View File

@@ -0,0 +1,102 @@
Digitized data copyright (c) 2010 Google Corporation
with Reserved Font Arimo, Tinos and Cousine.
Copyright (c) 2012 Red Hat, Inc.
with Reserved Font Name Liberation.
This Font Software is licensed under the SIL Open Font License,
Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
PREAMBLE The goals of the Open Font License (OFL) are to stimulate
worldwide development of collaborative font projects, to support the font
creation efforts of academic and linguistic communities, and to provide
a free and open framework in which fonts may be shared and improved in
partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves.
The fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply to
any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such.
This may include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components
as distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting ? in part or in whole ?
any of the components of the Original Version, by changing formats or
by porting the Font Software to a new environment.
"Author" refers to any designer, engineer, programmer, technical writer
or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining a
copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,in
Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the
corresponding Copyright Holder. This restriction only applies to the
primary font name as presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole, must
be distributed entirely under this license, and must not be distributed
under any other license. The requirement for fonts to remain under
this license does not apply to any document created using the Font
Software.
TERMINATION
This license becomes null and void if any of the above conditions are not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER
DEALINGS IN THE FONT SOFTWARE.

54
static/js/filter.js Normal file
View File

@@ -0,0 +1,54 @@
const filters = document.querySelector(".filters");
const buttons = Array.from(filters.querySelectorAll(".button"));
const search = document.querySelector("input[type='search']");
const form = document.querySelector("form");
const songList = document.querySelector(".song-list");
let selectedCategory = null;
function buttonToggle(clickedButton) {
buttons.forEach(button => {
if (button === clickedButton && !button.classList.contains("selected")) {
button.classList.add("selected");
selectedCategory = button.dataset.category;
} else {
button.classList.remove("selected");
if (button.dataset.category == selectedCategory) selectedCategory = null;
}
});
filterSongs();
}
function filterSongs() {
const searchTerm = sanitizeString(search.value);
const songs = Array.from(songList.children);
songs.forEach(song => {
const matching = (
(song.dataset.title.includes(searchTerm) || (song.dataset.artist && song.dataset.artist.includes(searchTerm))) &&
(!selectedCategory || song.dataset.category === selectedCategory)
);
song.classList.toggle("hidden", !matching);
});
}
function sanitizeString(string) {
return string.trim().toLowerCase().normalize("NFD").replace(/\p{Diacritic}/gu, "")
}
// Event listeners
search.addEventListener("input", filterSongs);
// Filtering happens before the reset itself without this timeout
form.addEventListener("reset", () => setTimeout(filterSongs, 0));
buttons.forEach(button => button.addEventListener("click", () => buttonToggle(button)));
// Normalize song titles
Array.from(songList.children).forEach(song => {
song.dataset.title = sanitizeString(song.dataset.title);
if (song.dataset.artist) {
song.dataset.artist = sanitizeString(song.dataset.artist);
}
});
// Display the filter section on JS-enabled browsers
window.addEventListener("load", () => filters.classList.remove = "hidden");

104
static/js/song-controls.js Normal file
View File

@@ -0,0 +1,104 @@
const controls = document.querySelector(".controls");
const song = document.querySelector("iframe.song").contentWindow;
// Autoscroll
let scroll;
let scrollTimeout = 60;
const minTimeout = 10;
const maxTimeout = 120;
const scrollIncrement = 20;
function pageScroll() {
song.scrollBy(0, 1);
scroll = setTimeout(pageScroll, scrollTimeout);
}
function updateScrollSpeed() {
if (controls.querySelector("#autoscroll").classList.contains("active")) {
clearTimeout(scroll);
scroll = setTimeout(pageScroll, scrollTimeout);
}
}
controls.querySelector("#autoscroll-increase").addEventListener("click", () => {
scrollTimeout = Math.max(minTimeout, scrollTimeout - scrollIncrement);
updateScrollSpeed();
});
controls.querySelector("#autoscroll-decrease").addEventListener("click", () => {
scrollTimeout = Math.min(maxTimeout, scrollTimeout + scrollIncrement);
updateScrollSpeed();
});
controls.querySelector("#autoscroll").addEventListener("click", function() {
this.classList.toggle("active");
if (this.classList.contains("active")) {
pageScroll();
} else {
clearTimeout(scroll);
}
});
// Scaling
function pageScale(value) {
if (value === 0) {
song.document.body.style.transform = "scale(1)";
return;
}
const currentScale =
parseFloat(song.document.body.style.transform.split("scale(")[1]) || 1;
song.document.body.style.transform = "scale(" + (currentScale + value) + ")";
}
controls
.querySelector("#font-size-increase")
.addEventListener("click", () => pageScale(0.1));
controls
.querySelector("#font-size-decrease")
.addEventListener("click", () => pageScale(-0.1));
controls
.querySelector("#font-size-reset")
.addEventListener("click", () => pageScale(0));
// Display the controls on JS-enabled browsers
window.addEventListener("load", () => (controls.classList.remove = "hidden"));
// Transpose
let transCounter = 0;
const chords = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B",];
const chordsFlat = ["C", "Db", "D", "Eb", "E", "F", "Gb", "G", "Ab", "A", "Bb", "B",];
function transposeChord(chord, steps) {
let useFlats = chord.includes("b");
let chordList = useFlats ? chordsFlat : chords;
let match = chord.match(/^([A-G][#b]?)/);
if (!match) return chord;
let root = match[1];
let index = chordList.indexOf(root);
if (index === -1) return chord;
let newIndex = (index + steps + 12) % 12;
let transposedRoot = chordList[newIndex];
return transposedRoot + chord.slice(root.length);
}
function transposeSong(steps) {
const iframe = document.querySelector("iframe.song");
const innerDoc = iframe.contentDocument || iframe.contentWindow.document;
innerDoc.querySelectorAll("tr.chords td").forEach((td) => {
let chord = td.textContent.trim();
if (chord) {
td.textContent = transposeChord(chord, steps);
}
});
}
document.querySelector("#transpose-decrease").addEventListener("click", () => { transposeSong(-1); transCounter -= 1 });
document.querySelector("#transpose-increase").addEventListener("click", () => { transposeSong(1); transCounter += 1 });
document.querySelector("#transpose-reset").addEventListener("click", () => { transposeSong(transCounter * -1); transCounter = 0; });

54
templates/index.html Normal file
View File

@@ -0,0 +1,54 @@
{% import "macros.html" as macros %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}{{ config.title }}{% endblock %}</title>
<link rel="stylesheet" href="{{ get_url(path="/style.css") }}">
<link rel="icon" type="image/png" href="{{ get_url(path="/favicon.png") }}">
</head>
<body>
{% block content %}
<main class="songs">
<section class="filters">
<form>
<input type="search" placeholder="Hledat">
<input type="reset" value="">
</form>
<div class="button" data-category="classic">Classic</div>
<div class="button" data-category="mixtape">Mixtape</div>
</section>
<section class="song-list">
{% for song in section.pages %}
<div class="{{ macros::primary_category(song=song) }}"
data-title="{{ song.title }}"
data-category="{{ macros::primary_category(song=song) }}"
{% if song.taxonomies["artist"] %}
data-artist="{{ song.taxonomies["artist"][0] }}"
{% endif %}
>
<div class="meta">
<div class="title">{{ song.title }}</div>
{% if song.taxonomies["artist"] %}
<div class="artist">{{ song.taxonomies["artist"][0] }}</div>
{% endif %}
</div>
<div class="links">
<a href="{{ song.permalink }}" class="html"></a>
{% for asset in song.assets %}
{% if asset is matching(song.slug~"[.](pdf)$") %}
<a href="{{ asset }}" class="pdf"></a>
{% endif %}
{% endfor %}
</div>
</div>
{% endfor %}
</section>
</main>
{% endblock %}
{% block script %}
<script src="{{ get_url(path="/js/filter.js") }}"></script>
{% endblock %}
</body>
</html>

5
templates/macros.html Normal file
View File

@@ -0,0 +1,5 @@
{% macro primary_category(song) %}
{%- if song.taxonomies["category"] -%}
{{ song.taxonomies["category"][0] }}
{%- endif -%}
{% endmacro %}

33
templates/song.html Normal file
View File

@@ -0,0 +1,33 @@
{% extends "index.html" %}
{% block content %}
<main class="song">
{% for asset in page.assets %}
{% if asset is matching(page.slug~"[.](html)$") %}
<iframe class="song" src="{{ asset }}"></iframe>
<nav class="controls hidden">
<section class="font-size">
<div class="button icon-subtract" id="font-size-decrease"></div>
<div class="button icon-font-size" id="font-size-reset"></div>
<div class="button icon-add" id="font-size-increase"></div>
</section>
<section class="transpose">
<div class="button icon-subtract" id="transpose-decrease"></div>
<div class="button icon-transpose" id="transpose-reset"></div>
<div class="button icon-add" id="transpose-increase"></div>
</section>
<section class="autoscroll">
<div class="button icon-subtract" id="autoscroll-decrease"></div>
<div class="button icon-scroll" id="autoscroll"></div>
<div class="button icon-add" id="autoscroll-increase"></div>
</section>
</nav>
{% endif %}
{% endfor %}
</main>
{% endblock %}
{% block script %}
<script src="{{ get_url(path="/js/song-controls.js") }}"></script>
{% endblock %}

View File

View File