@tenchi4u/pi-cc-header 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -72,7 +72,7 @@ The quote author name always matches the current slogan color.
72
72
 
73
73
  `/pch --s -quote` sets a random quote as the slogan in `"quote"` + author format. It also persists a `quoteMode` flag: while enabled, a **new random quote is chosen on every startup**.
74
74
 
75
- Quotes are loaded from a `quotes.json` file. The package ships a default set of 70 quotes; you can override it by placing your own `quotes.json` in your project root (mirroring the array-of-objects shape below):
75
+ Quotes are loaded from a `quotes.json` file. The package ships a default set of 71 quotes; you can override it by placing your own `quotes.json` in your project root (mirroring the array-of-objects shape below):
76
76
 
77
77
  ```json
78
78
  [
@@ -106,7 +106,7 @@ This project includes these additions:
106
106
  | Custom ASCII logo | Substitute final animation frame with your own art/text | `/pch --logo` |
107
107
  | Random quote slogan | `"quote"` + centered author; auto-rotates each startup | `/pch --s -quote` |
108
108
  | Independent slogan color | Slogan (and its author) colored separately from the logo | `/pch --s -c <code>` |
109
- | `quotes.json` corpus | 67 default quotes, overridable per-project | — |
109
+ | `quotes.json` corpus | 71 default quotes, overridable per-project | — |
110
110
 
111
111
  Scope notes:
112
112
 
@@ -647,6 +647,8 @@ class PiHeader implements Component {
647
647
  const muted = (s: string) => theme.fg("muted", s);
648
648
 
649
649
  const logoLines = PRECOMPUTED_LOGO_FRAMES[this.frame];
650
+ const logoWidth = LOGO_PIXEL_WIDTH;
651
+ const infoMaxWidth = Math.max(0, width - logoWidth);
650
652
 
651
653
  let infoStrings: string[];
652
654
  if (this.cachedInfoRows && this.cachedInfoWidth === width) {
@@ -654,6 +656,7 @@ class PiHeader implements Component {
654
656
  } else {
655
657
  const model = this.ctx.model?.id ?? "Default";
656
658
  const effort = this.pi.getThinkingLevel();
659
+ const isLocal = /lm\s*studio|ollama|llama\.local|lmstudio/i.test(model);
657
660
  const cwd = formatCwd(this.ctx.cwd);
658
661
  const skillText = state.showPkgSkills
659
662
  ? `${this.stats.skills}|${this.stats.pkgSkills} skills`
@@ -662,8 +665,6 @@ class PiHeader implements Component {
662
665
  this.stats.extensions.residue > 0
663
666
  ? `${this.stats.extensions.installed}(+${this.stats.extensions.residue}) extensions`
664
667
  : `${this.stats.extensions.installed} extensions`;
665
- const statsLine = `${skillText} · ${this.stats.prompts} prompts · ${extText}`;
666
-
667
668
  const piText =
668
669
  state.versionColored >= 2
669
670
  ? `\x1b[${CMAP[state.logoColorKey]}mPi v${VERSION}\x1b[39m`
@@ -673,21 +674,27 @@ class PiHeader implements Component {
673
674
 
674
675
  const modelLine = `${model} · ${effort}${this.stats.agents ? ` | ${this.stats.agents}` : ""}`;
675
676
 
676
- const rows: string[] = [piText];
677
+ const rows: string[] = [
678
+ piText,
679
+ muted(skillText),
680
+ muted(`${this.stats.prompts} prompts`),
681
+ muted(extText),
682
+ ];
683
+ if (state.showModelLine && !isLocal) rows.push(muted(modelLine));
677
684
  if (state.sloganOn && state.slogan) {
685
+ rows.push("");
678
686
  const sloganLines = state.slogan.split("\n");
679
687
  for (let idx = 0; idx < sloganLines.length; idx++) {
680
688
  const line = sloganLines[idx];
681
689
  const sloganW = visibleWidth(line);
682
690
  const sloganText =
683
- sloganW > width
684
- ? truncateToWidth(line, width - 3, "") + "..."
691
+ sloganW > infoMaxWidth
692
+ ? truncateToWidth(line, infoMaxWidth - 3, "") + "..."
685
693
  : line;
686
694
 
687
695
  const isAuthor = idx === sloganLines.length - 1 && sloganLines.length > 1;
688
696
  if (isAuthor) {
689
- // Author in slogan color, regular weight
690
- rows.push(`\x1b[${CMAP[state.sloganColorKey]}m${sloganText}\x1b[39m`);
697
+ rows.push(`\x1b[${CMAP[state.sloganColorKey]}m~${sloganText}\x1b[39m`);
691
698
  } else {
692
699
  rows.push(
693
700
  state.sloganColor
@@ -696,33 +703,45 @@ class PiHeader implements Component {
696
703
  );
697
704
  }
698
705
  }
699
- }
700
- if (state.showModelLine) rows.push(muted(modelLine));
701
- rows.push(muted(statsLine));
702
- if (!state.sloganOn) {
706
+ } else {
703
707
  rows.push(muted(this.stats.agents ? `${this.stats.agents} · ${cwd}` : cwd));
704
708
  }
705
709
 
706
710
  infoStrings = rows;
707
- // Store in cachedInfoRows as index map for cache key reuse
708
711
  this.cachedInfoRows = Object.fromEntries(rows.map((r, i) => [i, r]));
709
712
  this.cachedInfoWidth = width;
710
713
  }
711
714
 
712
- const center = (text: string, w: number, offset = 2): string => {
713
- const vw = visibleWidth(text);
714
- const pad = Math.max(0, Math.floor((w - vw) / 2) + offset);
715
- return " ".repeat(pad) + text + " ".repeat(Math.max(0, w - pad - vw));
716
- };
715
+ // Logo rows 1..5 (y=2..6) paired with info rows 0..3 at indices 2..5
716
+ const LOGO_INFO_MAP: Record<number, number> = { 2: 0, 3: 1, 4: 2, 5: 3 };
717
+
718
+ // Build combined logo+info lines
719
+ const combinedLines: string[] = [];
720
+ for (let i = 1; i < logoLines.length - 1; i++) {
721
+ const infoIdx = LOGO_INFO_MAP[i];
722
+ const right = infoIdx != null ? infoStrings[infoIdx] : "";
723
+ combinedLines.push(padRight(logoLines[i], logoWidth) + right);
724
+ }
725
+
726
+ const maxLineW = Math.max(...combinedLines.map((s) => visibleWidth(s)));
727
+ const leftPad = Math.max(0, Math.floor((width - maxLineW) / 2));
717
728
 
718
729
  const lines: string[] = [];
719
- for (let i = 1; i < logoLines.length; i++) {
720
- lines.push(center(logoLines[i], width, 4));
730
+ for (const cl of combinedLines) {
731
+ lines.push(" ".repeat(leftPad) + truncateToWidth(cl, width - leftPad, ""));
721
732
  }
722
- for (const row of infoStrings) {
723
- if (row) {
724
- lines.push(center(truncateToWidth(row, width, ""), width, 0));
725
- }
733
+
734
+ // Remaining info rows (model, slogan, cwd) centered independently
735
+ const center = (text: string, w: number): string => {
736
+ const vw = visibleWidth(text);
737
+ const pad = Math.max(0, Math.floor((w - vw) / 2));
738
+ return " ".repeat(pad) + text + " ".repeat(Math.max(0, w - pad - vw));
739
+ };
740
+ for (let i = 4; i < infoStrings.length; i++) {
741
+ const row = infoStrings[i];
742
+ lines.push(
743
+ row === "" ? "" : center(truncateToWidth(row, width, ""), width),
744
+ );
726
745
  }
727
746
  return lines;
728
747
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tenchi4u/pi-cc-header",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Claude Code–style startup header for Pi — animated Pi logo with a 9-color palette, toggleable IBM stripes and Minecraft themes; configurable info bar displays version, model, resource stats, AGENTS.md marker, cwd, and a customizable slogan.",
5
5
  "type": "module",
6
6
  "keywords": [
package/quotes.json CHANGED
@@ -1,72 +1,286 @@
1
- [
2
- { "quote": "You have power over your mind - not outside events. Realize this, and you will find strength.", "author": "Marcus Aurelius" },
3
- { "quote": "The impediment to action advances action. What stands in the way becomes the way.", "author": "Marcus Aurelius" },
4
- { "quote": "Waste no more time arguing about what a good man should be. Be one.", "author": "Marcus Aurelius" },
5
- { "quote": "It is not death that a man should fear, but he should fear never beginning to live.", "author": "Marcus Aurelius" },
6
- { "quote": "The best revenge is not to be like your enemy.", "author": "Marcus Aurelius" },
7
- { "quote": "He who fears death will never do anything worthy of a living man.", "author": "Seneca" },
8
- { "quote": "We suffer more in imagination than in reality.", "author": "Seneca" },
9
- { "quote": "Difficulties strengthen the mind, as labor does the body.", "author": "Seneca" },
10
- { "quote": "No man was ever wise by chance.", "author": "Seneca" },
11
- { "quote": "It is not because things are difficult that we do not dare; it is because we do not dare that things are difficult.", "author": "Seneca" },
12
- { "quote": "First say to yourself what you would be; then do what you have to do.", "author": "Epictetus" },
13
- { "quote": "It's not what happens to you, but how you react to it that matters.", "author": "Epictetus" },
14
- { "quote": "No man is free who is not master of himself.", "author": "Epictetus" },
15
- { "quote": "Don't explain your philosophy. Embody it.", "author": "Epictetus" },
16
- { "quote": "Man is not worried by real problems so much as by his imagined anxieties about real problems.", "author": "Epictetus" },
17
- { "quote": "If you want to improve, be content to be thought foolish and stupid.", "author": "Epictetus" },
18
- { "quote": "The soul becomes dyed with the color of its thoughts.", "author": "Marcus Aurelius" },
19
- { "quote": "A man's worth is no greater than his ambitions.", "author": "Marcus Aurelius" },
20
- { "quote": "Luck is what happens when preparation meets opportunity.", "author": "Seneca" },
21
- { "quote": "Begin at once to live, and count each separate day as a separate life.", "author": "Seneca" },
22
- { "quote": "The key is to keep company only with people who uplift you, whose presence calls forth your best.", "author": "Epictetus" },
23
- { "quote": "We have two ears and one mouth so that we can listen twice as much as we speak.", "author": "Epictetus" },
24
- { "quote": "The happiness of your life depends upon the quality of your thoughts.", "author": "Marcus Aurelius" },
25
- { "quote": "Wherever there is a human being, there is an opportunity for kindness.", "author": "Seneca" },
26
- { "quote": "It is the power of the mind to be unconquerable.", "author": "Seneca" },
27
- { "quote": "Very little is needed to make a happy life; it is all within yourself, in your way of thinking.", "author": "Marcus Aurelius" },
28
- { "quote": "The best way to find yourself is to lose yourself in the service of others.", "author": "Mahatma Gandhi" },
29
- { "quote": "Happiness is not something ready made. It comes from your own actions.", "author": "Dalai Lama" },
30
- { "quote": "Do not dwell in the past, do not dream of the future, concentrate the mind on the present moment.", "author": "Buddha" },
31
- { "quote": "The only true wisdom is in knowing you know nothing.", "author": "Socrates" },
32
- { "quote": "It is not what we have, but what we enjoy, that constitutes our abundance.", "author": "Epicurus" },
33
- { "quote": "The greatest wealth is to live content with little.", "author": "Plato" },
34
- { "quote": "He who has a why to live can bear almost any how.", "author": "Friedrich Nietzsche" },
35
- { "quote": "In the middle of difficulty lies opportunity.", "author": "Albert Einstein" },
36
- { "quote": "Do not pray for an easy life, pray for the strength to endure a difficult one.", "author": "Bruce Lee" },
37
- { "quote": "Knowing others is intelligence; knowing yourself is true wisdom.", "author": "Lao Tzu" },
38
- { "quote": "Make the best use of what is in your power, and take the rest as it happens.", "author": "Epictetus" },
39
- { "quote": "True happiness is to enjoy the present, without anxious dependence upon the future.", "author": "Seneca" },
40
- { "quote": "As is a tale, so is life: not how long it is, but how good it is, is what matters.", "author": "Seneca" },
41
- { "quote": "Sometimes even to live is an act of courage.", "author": "Seneca" },
42
- { "quote": "He who is brave is free.", "author": "Seneca" },
43
- { "quote": "Associate with people who are likely to improve you.", "author": "Seneca" },
44
- { "quote": "The whole future lies in uncertainty: live immediately.", "author": "Seneca" },
45
- { "quote": "He is a wise man who does not grieve for the things which he has not, but rejoices for those which he has.", "author": "Epictetus" },
46
- { "quote": "The unexamined life is not worth living.", "author": "Socrates" },
47
- { "quote": "I cannot teach anybody anything. I can only make them think.", "author": "Socrates" },
48
- { "quote": "Knowing yourself is the beginning of all wisdom.", "author": "Aristotle" },
49
- { "quote": "We are what we repeatedly do. Excellence, then, is not an act, but a habit.", "author": "Will Durant" },
50
- { "quote": "He who has a why to live for can bear almost any how.", "author": "Friedrich Nietzsche" },
51
- { "quote": "The best way to predict the future is to create it.", "author": "Peter Drucker" },
52
- { "quote": "Do not go where the path may lead, go instead where there is no path and leave a trail.", "author": "Ralph Waldo Emerson" },
53
- { "quote": "What lies behind us and what lies before us are tiny matters compared to what lies within us.", "author": "Ralph Waldo Emerson" },
54
- { "quote": "Out of suffering have emerged the strongest souls; the most massive characters are seared with scars.", "author": "Khalil Gibran" },
55
- { "quote": "The mind is everything. What you think you become.", "author": "Buddha" },
56
- { "quote": "When I let go of what I am, I become what I might be.", "author": "Lao Tzu" },
57
- { "quote": "A journey of a thousand miles begins with a single step.", "author": "Lao Tzu" },
58
- { "quote": "Mastering others is strength. Mastering yourself is true power.", "author": "Lao Tzu" },
59
- { "quote": "Of things some are in our power, and others are not.", "author": "Epictetus" },
60
- { "quote": "Men are disturbed not by the things which happen, but by the opinions about the things.", "author": "Epictetus" },
61
- { "quote": "Seek not that the things which happen should happen as you wish; but wish the things which happen to be as they are.", "author": "Epictetus" },
62
- { "quote": "Never say about anything, I have lost it, but say I have restored it.", "author": "Epictetus" },
63
- { "quote": "Freedom is acquired not by the full possession of the things which are desired, but by removing the desire.", "author": "Epictetus" },
64
- { "quote": "No great thing is created suddenly, any more than a bunch of grapes or a fig.", "author": "Epictetus" },
65
- { "quote": "Loss is nothing else than change.", "author": "Marcus Aurelius" },
66
- { "quote": "Nothing happens to any man which he is not formed by nature to bear.", "author": "Marcus Aurelius" },
67
- { "quote": "Look within. Within is the fountain of good, and it will ever bubble up, if thou wilt ever dig.", "author": "Marcus Aurelius" },
68
- { "quote": "Do every act of thy life as though it were the last.", "author": "Marcus Aurelius" },
69
- { "quote": "Sweet are the uses of adversity.", "author": "William Shakespeare" },
70
- { "quote": "Our doubts are traitors, and make us lose the good we oft might win by fearing to attempt.", "author": "William Shakespeare" },
71
- { "quote": "There is nothing either good or bad but thinking makes it so.", "author": "William Shakespeare" }
72
- ]
1
+ [
2
+ {
3
+ "quote": "You have power over your mind - not outside events. Realize this, and you will find strength.",
4
+ "author": "Marcus Aurelius"
5
+ },
6
+ {
7
+ "quote": "The impediment to action advances action. What stands in the way becomes the way.",
8
+ "author": "Marcus Aurelius"
9
+ },
10
+ {
11
+ "quote": "Waste no more time arguing about what a good man should be. Be one.",
12
+ "author": "Marcus Aurelius"
13
+ },
14
+ {
15
+ "quote": "It is not death that a man should fear, but he should fear never beginning to live.",
16
+ "author": "Marcus Aurelius"
17
+ },
18
+ {
19
+ "quote": "The best revenge is not to be like your enemy.",
20
+ "author": "Marcus Aurelius"
21
+ },
22
+ {
23
+ "quote": "He who fears death will never do anything worthy of a living man.",
24
+ "author": "Seneca"
25
+ },
26
+ {
27
+ "quote": "We suffer more in imagination than in reality.",
28
+ "author": "Seneca"
29
+ },
30
+ {
31
+ "quote": "Difficulties strengthen the mind, as labor does the body.",
32
+ "author": "Seneca"
33
+ },
34
+ {
35
+ "quote": "No man was ever wise by chance.",
36
+ "author": "Seneca"
37
+ },
38
+ {
39
+ "quote": "It is not because things are difficult that we do not dare; it is because we do not dare that things are difficult.",
40
+ "author": "Seneca"
41
+ },
42
+ {
43
+ "quote": "First say to yourself what you would be; then do what you have to do.",
44
+ "author": "Epictetus"
45
+ },
46
+ {
47
+ "quote": "It's not what happens to you, but how you react to it that matters.",
48
+ "author": "Epictetus"
49
+ },
50
+ {
51
+ "quote": "No man is free who is not master of himself.",
52
+ "author": "Epictetus"
53
+ },
54
+ {
55
+ "quote": "Don't explain your philosophy. Embody it.",
56
+ "author": "Epictetus"
57
+ },
58
+ {
59
+ "quote": "Man is not worried by real problems so much as by his imagined anxieties about real problems.",
60
+ "author": "Epictetus"
61
+ },
62
+ {
63
+ "quote": "If you want to improve, be content to be thought foolish and stupid.",
64
+ "author": "Epictetus"
65
+ },
66
+ {
67
+ "quote": "The soul becomes dyed with the color of its thoughts.",
68
+ "author": "Marcus Aurelius"
69
+ },
70
+ {
71
+ "quote": "A man's worth is no greater than his ambitions.",
72
+ "author": "Marcus Aurelius"
73
+ },
74
+ {
75
+ "quote": "Luck is what happens when preparation meets opportunity.",
76
+ "author": "Seneca"
77
+ },
78
+ {
79
+ "quote": "Begin at once to live, and count each separate day as a separate life.",
80
+ "author": "Seneca"
81
+ },
82
+ {
83
+ "quote": "The key is to keep company only with people who uplift you, whose presence calls forth your best.",
84
+ "author": "Epictetus"
85
+ },
86
+ {
87
+ "quote": "We have two ears and one mouth so that we can listen twice as much as we speak.",
88
+ "author": "Epictetus"
89
+ },
90
+ {
91
+ "quote": "The happiness of your life depends upon the quality of your thoughts.",
92
+ "author": "Marcus Aurelius"
93
+ },
94
+ {
95
+ "quote": "Wherever there is a human being, there is an opportunity for kindness.",
96
+ "author": "Seneca"
97
+ },
98
+ {
99
+ "quote": "It is the power of the mind to be unconquerable.",
100
+ "author": "Seneca"
101
+ },
102
+ {
103
+ "quote": "Very little is needed to make a happy life; it is all within yourself, in your way of thinking.",
104
+ "author": "Marcus Aurelius"
105
+ },
106
+ {
107
+ "quote": "The best way to find yourself is to lose yourself in the service of others.",
108
+ "author": "Mahatma Gandhi"
109
+ },
110
+ {
111
+ "quote": "Happiness is not something ready made. It comes from your own actions.",
112
+ "author": "Dalai Lama XIV"
113
+ },
114
+ {
115
+ "quote": "Do not dwell in the past, do not dream of the future, concentrate the mind on the present moment.",
116
+ "author": "Buddha"
117
+ },
118
+ {
119
+ "quote": "The only true wisdom is in knowing you know nothing.",
120
+ "author": "Socrates"
121
+ },
122
+ {
123
+ "quote": "It is not what we have, but what we enjoy, that constitutes our abundance.",
124
+ "author": "Epicurus"
125
+ },
126
+ {
127
+ "quote": "The greatest wealth is to live content with little.",
128
+ "author": "Plato"
129
+ },
130
+ {
131
+ "quote": "He who has a why to live can bear almost any how.",
132
+ "author": "Friedrich Nietzsche"
133
+ },
134
+ {
135
+ "quote": "In the middle of difficulty lies opportunity.",
136
+ "author": "Albert Einstein"
137
+ },
138
+ {
139
+ "quote": "Do not pray for an easy life, pray for the strength to endure a difficult one.",
140
+ "author": "Bruce Lee"
141
+ },
142
+ {
143
+ "quote": "Knowing others is intelligence; knowing yourself is true wisdom.",
144
+ "author": "Lao Tzu"
145
+ },
146
+ {
147
+ "quote": "Make the best use of what is in your power, and take the rest as it happens.",
148
+ "author": "Epictetus"
149
+ },
150
+ {
151
+ "quote": "True happiness is to enjoy the present, without anxious dependence upon the future.",
152
+ "author": "Seneca"
153
+ },
154
+ {
155
+ "quote": "As is a tale, so is life: not how long it is, but how good it is, is what matters.",
156
+ "author": "Seneca"
157
+ },
158
+ {
159
+ "quote": "Sometimes even to live is an act of courage.",
160
+ "author": "Seneca"
161
+ },
162
+ {
163
+ "quote": "He who is brave is free.",
164
+ "author": "Seneca"
165
+ },
166
+ {
167
+ "quote": "Associate with people who are likely to improve you.",
168
+ "author": "Seneca"
169
+ },
170
+ {
171
+ "quote": "The whole future lies in uncertainty: live immediately.",
172
+ "author": "Seneca"
173
+ },
174
+ {
175
+ "quote": "He is a wise man who does not grieve for the things which he has not, but rejoices for those which he has.",
176
+ "author": "Epictetus"
177
+ },
178
+ {
179
+ "quote": "The unexamined life is not worth living.",
180
+ "author": "Socrates"
181
+ },
182
+ {
183
+ "quote": "I cannot teach anybody anything. I can only make them think.",
184
+ "author": "Socrates"
185
+ },
186
+ {
187
+ "quote": "Knowing yourself is the beginning of all wisdom.",
188
+ "author": "Aristotle"
189
+ },
190
+ {
191
+ "quote": "We are what we repeatedly do. Excellence, then, is not an act, but a habit.",
192
+ "author": "Will Durant"
193
+ },
194
+ {
195
+ "quote": "He who has a why to live for can bear almost any how.",
196
+ "author": "Friedrich Nietzsche"
197
+ },
198
+ {
199
+ "quote": "Do not go where the path may lead, go instead where there is no path and leave a trail.",
200
+ "author": "Ralph Waldo Emerson"
201
+ },
202
+ {
203
+ "quote": "Success is not final, failure is not fatal: It is the courage to continue that counts.",
204
+ "author": "Winston Churchill"
205
+ },
206
+ {
207
+ "quote": "Believe you can and you're halfway there.",
208
+ "author": "Theodore Roosevelt"
209
+ },
210
+ {
211
+ "quote": "What lies behind us and what lies before us are tiny matters compared to what lies within us.",
212
+ "author": "Ralph Waldo Emerson"
213
+ },
214
+ {
215
+ "quote": "Out of suffering have emerged the strongest souls; the most massive characters are seared with scars.",
216
+ "author": "Khalil Gibran"
217
+ },
218
+ {
219
+ "quote": "The mind is everything. What you think you become.",
220
+ "author": "Buddha"
221
+ },
222
+ {
223
+ "quote": "When I let go of what I am, I become what I might be.",
224
+ "author": "Lao Tzu"
225
+ },
226
+ {
227
+ "quote": "A journey of a thousand miles begins with a single step.",
228
+ "author": "Lao Tzu"
229
+ },
230
+ {
231
+ "quote": "Mastering others is strength. Mastering yourself is true power.",
232
+ "author": "Lao Tzu"
233
+ },
234
+ {
235
+ "quote": "Of things some are in our power, and others are not.",
236
+ "author": "Epictetus"
237
+ },
238
+ {
239
+ "quote": "Men are disturbed not by the things which happen, but by the opinions about the things.",
240
+ "author": "Epictetus"
241
+ },
242
+ {
243
+ "quote": "Seek not that the things which happen should happen as you wish; but wish the things which happen to be as they are.",
244
+ "author": "Epictetus"
245
+ },
246
+ {
247
+ "quote": "Never say about anything, I have lost it, but say I have restored it.",
248
+ "author": "Epictetus"
249
+ },
250
+ {
251
+ "quote": "Freedom is acquired not by the full possession of the things which are desired, but by removing the desire.",
252
+ "author": "Epictetus"
253
+ },
254
+ {
255
+ "quote": "No great thing is created suddenly, any more than a bunch of grapes or a fig.",
256
+ "author": "Epictetus"
257
+ },
258
+ {
259
+ "quote": "Loss is nothing else than change.",
260
+ "author": "Marcus Aurelius"
261
+ },
262
+ {
263
+ "quote": "Nothing happens to any man which he is not formed by nature to bear.",
264
+ "author": "Marcus Aurelius"
265
+ },
266
+ {
267
+ "quote": "Look within. Within is the fountain of good, and it will ever bubble up, if thou wilt ever dig.",
268
+ "author": "Marcus Aurelius"
269
+ },
270
+ {
271
+ "quote": "Do every act of thy life as though it were the last.",
272
+ "author": "Marcus Aurelius"
273
+ },
274
+ {
275
+ "quote": "Sweet are the uses of adversity.",
276
+ "author": "William Shakespeare"
277
+ },
278
+ {
279
+ "quote": "Our doubts are traitors, and make us lose the good we oft might win by fearing to attempt.",
280
+ "author": "William Shakespeare"
281
+ },
282
+ {
283
+ "quote": "There is nothing either good or bad but thinking makes it so.",
284
+ "author": "William Shakespeare"
285
+ }
286
+ ]