bouquin 0.4.2__tar.gz → 0.4.4__tar.gz

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.
Files changed (37) hide show
  1. {bouquin-0.4.2 → bouquin-0.4.4}/PKG-INFO +31 -9
  2. {bouquin-0.4.2 → bouquin-0.4.4}/README.md +30 -8
  3. bouquin-0.4.4/bouquin/fonts/NotoSansSymbols2-Regular.ttf +0 -0
  4. bouquin-0.4.4/bouquin/fonts/OFL.txt +93 -0
  5. bouquin-0.4.4/bouquin/icons/bouquin-light.svg +145 -0
  6. bouquin-0.4.4/bouquin/icons/bouquin.svg +145 -0
  7. bouquin-0.4.4/bouquin/keys/mig5.asc +109 -0
  8. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/locales/en.json +15 -1
  9. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/locales/fr.json +1 -1
  10. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/locales/it.json +1 -1
  11. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/main.py +7 -0
  12. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/main_window.py +113 -42
  13. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/markdown_editor.py +8 -15
  14. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/markdown_highlighter.py +1 -9
  15. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/settings_dialog.py +1 -1
  16. bouquin-0.4.4/bouquin/version_check.py +386 -0
  17. {bouquin-0.4.2 → bouquin-0.4.4}/pyproject.toml +5 -2
  18. {bouquin-0.4.2 → bouquin-0.4.4}/LICENSE +0 -0
  19. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/__init__.py +0 -0
  20. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/__main__.py +0 -0
  21. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/bug_report_dialog.py +0 -0
  22. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/db.py +0 -0
  23. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/find_bar.py +0 -0
  24. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/flow_layout.py +0 -0
  25. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/history_dialog.py +0 -0
  26. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/key_prompt.py +0 -0
  27. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/lock_overlay.py +0 -0
  28. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/save_dialog.py +0 -0
  29. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/search.py +0 -0
  30. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/settings.py +0 -0
  31. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/statistics_dialog.py +0 -0
  32. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/strings.py +0 -0
  33. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/tag_browser.py +0 -0
  34. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/tags_widget.py +0 -0
  35. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/theme.py +0 -0
  36. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/time_log.py +0 -0
  37. {bouquin-0.4.2 → bouquin-0.4.4}/bouquin/toolbar.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bouquin
3
- Version: 0.4.2
3
+ Version: 0.4.4
4
4
  Summary: Bouquin is a simple, opinionated notebook application written in Python, PyQt and SQLCipher.
5
5
  Home-page: https://git.mig5.net/mig5/bouquin
6
6
  License: GPL-3.0-or-later
@@ -20,6 +20,9 @@ Description-Content-Type: text/markdown
20
20
 
21
21
  # Bouquin
22
22
 
23
+ <div align="center">
24
+ <img src="https://git.mig5.net/mig5/bouquin/raw/branch/main/bouquin/icons/bouquin.svg" alt="Bouquin logo" width="240" />
25
+ </div>
23
26
 
24
27
  ## Introduction
25
28
 
@@ -36,16 +39,33 @@ To increase security, the SQLCipher key is requested when the app is opened, and
36
39
  to disk unless the user configures it to be in the settings.
37
40
 
38
41
  There is deliberately no network connectivity or syncing intended, other than the option to send a bug
39
- report from within the app.
42
+ report from within the app, or optionally to check for new versions to upgrade to.
40
43
 
41
44
  ## Screenshots
42
45
 
43
46
  ### General view
44
- ![Screenshot of Bouquin](https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/screenshot.png)
47
+ <div align="center">
48
+ <a href="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/screenshot.png"><img src="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/screenshot.png" alt="Bouquin screenshot" /></a>
49
+ </div>
45
50
 
46
51
  ### History panes
47
- ![Screenshot of Bouquin History Preview pane](https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/history_preview.png)
48
- ![Screenshot of Bouquin History Diff pane](https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/history_diff.png)
52
+ <div align="center">
53
+ <a href="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/history_preview.png"><img src="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/history_preview.png" alt="Screenshot of Bouquin History Preview Pane" width="500" style="margin: 0 10px;" /></a>
54
+ <a href="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/history_diff.png"><img src="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/history_diff.png" alt="Screenshot of Bouquin History Diff Pane" width="500" style="margin: 0 10px;" /></a>
55
+ </div>
56
+
57
+ ### Tags and Time Logging
58
+ <div align="center">
59
+ <a href="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/tags.png"><img src="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/tags.png" alt="Screenshot of Bouquin Tag Manager screen" width="500" style="margin: 0 10px;" /></a>
60
+ <a href="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/time.png"><img src="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/time.png" alt="Screenshot of Bouquin Time Log screens" width="500" style="margin: 0 10px;" /></a>
61
+ </div>
62
+
63
+
64
+ ### Statistics
65
+ <div align="center">
66
+ <a href="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/statistics.png"><img src="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/statistics.png" alt="Bouquin statistics" /></a>
67
+ </div>
68
+
49
69
 
50
70
  ## Some of the features
51
71
 
@@ -64,15 +84,17 @@ report from within the app.
64
84
  * Backup the database to encrypted SQLCipher format (which can then be loaded back in to a Bouquin)
65
85
  * Dark and light theme support
66
86
  * Automatically generate checkboxes when typing 'TODO'
67
- * It is possible to automatically move unchecked checkboxes from yesterday to today, on startup
87
+ * It is possible to automatically move unchecked checkboxes from the last 7 days to the next weekday.
68
88
  * English, French and Italian locales provided
69
- * Ability to set reminder alarms in the app against the current line of text on today's date
70
- * Ability to log time per day and run timesheet reports
89
+ * Ability to set reminder alarms in the app against the current line of text (which will be flashed as the reminder)
90
+ * Ability to log time per day for different projects/activities and run timesheet reports
71
91
 
72
92
 
73
93
  ## How to install
74
94
 
75
- Make sure you have `libxcb-cursor0` installed (it may be called something else on non-Debian distributions).
95
+ Make sure you have `libxcb-cursor0` installed (on Debian-based distributions) or `xcb-util-cursor` (RedHat/Fedora-based distributions).
96
+
97
+ It's also recommended that you have Noto Sans fonts installed, but it's up to you. It just can impact the display of unicode symbols such as checkboxes.
76
98
 
77
99
  If downloading from my Forgejo's Releases page, you may wish to verify the GPG signatures with my [GPG key](https://mig5.net/static/mig5.asc).
78
100
 
@@ -1,5 +1,8 @@
1
1
  # Bouquin
2
2
 
3
+ <div align="center">
4
+ <img src="https://git.mig5.net/mig5/bouquin/raw/branch/main/bouquin/icons/bouquin.svg" alt="Bouquin logo" width="240" />
5
+ </div>
3
6
 
4
7
  ## Introduction
5
8
 
@@ -16,16 +19,33 @@ To increase security, the SQLCipher key is requested when the app is opened, and
16
19
  to disk unless the user configures it to be in the settings.
17
20
 
18
21
  There is deliberately no network connectivity or syncing intended, other than the option to send a bug
19
- report from within the app.
22
+ report from within the app, or optionally to check for new versions to upgrade to.
20
23
 
21
24
  ## Screenshots
22
25
 
23
26
  ### General view
24
- ![Screenshot of Bouquin](https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/screenshot.png)
27
+ <div align="center">
28
+ <a href="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/screenshot.png"><img src="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/screenshot.png" alt="Bouquin screenshot" /></a>
29
+ </div>
25
30
 
26
31
  ### History panes
27
- ![Screenshot of Bouquin History Preview pane](https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/history_preview.png)
28
- ![Screenshot of Bouquin History Diff pane](https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/history_diff.png)
32
+ <div align="center">
33
+ <a href="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/history_preview.png"><img src="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/history_preview.png" alt="Screenshot of Bouquin History Preview Pane" width="500" style="margin: 0 10px;" /></a>
34
+ <a href="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/history_diff.png"><img src="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/history_diff.png" alt="Screenshot of Bouquin History Diff Pane" width="500" style="margin: 0 10px;" /></a>
35
+ </div>
36
+
37
+ ### Tags and Time Logging
38
+ <div align="center">
39
+ <a href="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/tags.png"><img src="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/tags.png" alt="Screenshot of Bouquin Tag Manager screen" width="500" style="margin: 0 10px;" /></a>
40
+ <a href="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/time.png"><img src="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/time.png" alt="Screenshot of Bouquin Time Log screens" width="500" style="margin: 0 10px;" /></a>
41
+ </div>
42
+
43
+
44
+ ### Statistics
45
+ <div align="center">
46
+ <a href="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/statistics.png"><img src="https://git.mig5.net/mig5/bouquin/raw/branch/main/screenshots/statistics.png" alt="Bouquin statistics" /></a>
47
+ </div>
48
+
29
49
 
30
50
  ## Some of the features
31
51
 
@@ -44,15 +64,17 @@ report from within the app.
44
64
  * Backup the database to encrypted SQLCipher format (which can then be loaded back in to a Bouquin)
45
65
  * Dark and light theme support
46
66
  * Automatically generate checkboxes when typing 'TODO'
47
- * It is possible to automatically move unchecked checkboxes from yesterday to today, on startup
67
+ * It is possible to automatically move unchecked checkboxes from the last 7 days to the next weekday.
48
68
  * English, French and Italian locales provided
49
- * Ability to set reminder alarms in the app against the current line of text on today's date
50
- * Ability to log time per day and run timesheet reports
69
+ * Ability to set reminder alarms in the app against the current line of text (which will be flashed as the reminder)
70
+ * Ability to log time per day for different projects/activities and run timesheet reports
51
71
 
52
72
 
53
73
  ## How to install
54
74
 
55
- Make sure you have `libxcb-cursor0` installed (it may be called something else on non-Debian distributions).
75
+ Make sure you have `libxcb-cursor0` installed (on Debian-based distributions) or `xcb-util-cursor` (RedHat/Fedora-based distributions).
76
+
77
+ It's also recommended that you have Noto Sans fonts installed, but it's up to you. It just can impact the display of unicode symbols such as checkboxes.
56
78
 
57
79
  If downloading from my Forgejo's Releases page, you may wish to verify the GPG signatures with my [GPG key](https://mig5.net/static/mig5.asc).
58
80
 
@@ -0,0 +1,93 @@
1
+ Copyright 2022 The Noto Project Authors (https://github.com/notofonts/symbols)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ https://openfontlicense.org
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,145 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-labelledby="title desc">
2
+ <title id="title">Bouquin</title>
3
+ <desc id="desc">
4
+ A notebook with a centered B-shaped right edge, a shield and keyhole as the upper hole of a B,
5
+ and a green-blue neon version control fork as the lower hole, on a lighter toolbar-friendly background.
6
+ </desc>
7
+
8
+ <defs>
9
+ <!-- Lighter background gradient for toolbar use -->
10
+ <linearGradient id="bgGrad" x1="0" y1="0" x2="0" y2="1">
11
+ <stop offset="0%" stop-color="#e5f2ff"/> <!-- very light blue -->
12
+ <stop offset="100%" stop-color="#cbd5f5"/> <!-- soft indigo-ish -->
13
+ </linearGradient>
14
+
15
+ <!-- Shield gradient -->
16
+ <linearGradient id="shieldGrad" x1="0" y1="0" x2="0" y2="1">
17
+ <stop offset="0%" stop-color="#22c55e"/>
18
+ <stop offset="100%" stop-color="#14b8a6"/>
19
+ </linearGradient>
20
+
21
+ <!-- Version control neon stroke gradient (used for all segments) -->
22
+ <linearGradient id="vcGradAll" x1="0" y1="0" x2="1" y2="1">
23
+ <stop offset="0%" stop-color="#6ee7b7"/> <!-- mint green -->
24
+ <stop offset="35%" stop-color="#22c55e"/> <!-- bright green -->
25
+ <stop offset="75%" stop-color="#38bdf8"/> <!-- teal-blue -->
26
+ <stop offset="100%" stop-color="#0ea5e9"/> <!-- blue neon -->
27
+ </linearGradient>
28
+
29
+ <!-- Soft glow for version control lines -->
30
+ <filter id="vcGlow" x="-50%" y="-50%" width="200%" height="200%">
31
+ <feGaussianBlur stdDeviation="3" result="blur"/>
32
+ <feColorMatrix
33
+ in="blur"
34
+ type="matrix"
35
+ values="
36
+ 0 0 0 0 0.30
37
+ 0 0 0 0 0.90
38
+ 0 0 0 0 0.85
39
+ 0 0 0 0.85 0" />
40
+ </filter>
41
+ </defs>
42
+
43
+ <!-- Background rounded square (now light) -->
44
+ <rect x="32" y="32" width="448" height="448" rx="96" ry="96"
45
+ fill="url(#bgGrad)" stroke="#94a3b8" stroke-width="2"/>
46
+
47
+ <!-- Notebook body with centered, deeper B-like indent on the right edge -->
48
+ <path
49
+ d="
50
+ M 148 96
51
+ H 360
52
+ Q 384 96 384 120
53
+ V 224
54
+ Q 304 256 384 288
55
+ V 392
56
+ Q 384 416 360 416
57
+ H 148
58
+ Q 128 416 128 396
59
+ V 116
60
+ Q 128 96 148 96
61
+ Z
62
+ "
63
+ fill="#202738"
64
+ stroke="#3a4254"
65
+ stroke-width="4"
66
+ />
67
+
68
+ <!-- Notebook spine -->
69
+ <rect x="128" y="96" width="20" height="320" rx="12" ry="12" fill="#3ddc97"/>
70
+
71
+ <!-- Shield + keyhole (upper "hole" of the B) -->
72
+ <g transform="translate(0,-56)">
73
+ <!-- Shield -->
74
+ <path d="M 256 180 L 296 196 L 296 244 C 296 269 281 296 256 308 C 231 296 216 269 216 244 L 216 196 Z"
75
+ fill="url(#shieldGrad)" stroke="#0f172a" stroke-width="4"/>
76
+
77
+ <!-- Keyhole -->
78
+ <circle cx="256" cy="216" r="10" fill="#020617"/>
79
+ <rect x="248" y="226" width="16" height="26" rx="8" ry="8" fill="#020617"/>
80
+ </g>
81
+
82
+ <!-- Version control graph: lower "hole" of the B with green-blue neon -->
83
+ <!-- Glow layer behind -->
84
+ <g transform="translate(0,-66)"
85
+ stroke="#22c55e" stroke-width="4" fill="#22c55e" opacity="0.6"
86
+ filter="url(#vcGlow)">
87
+ <!-- Short stem under shield -->
88
+ <path d="M 256 318 L 256 332" fill="none" stroke-linecap="round"/>
89
+
90
+ <!-- Root node -->
91
+ <circle cx="256" cy="332" r="7"/>
92
+
93
+ <!-- Left branch (shorter) -->
94
+ <path d="M 256 332 L 236 360" fill="none"
95
+ stroke-linecap="round" stroke-linejoin="round"/>
96
+ <path d="M 236 360 L 236 395" fill="none"
97
+ stroke-linecap="round"/>
98
+
99
+ <!-- Center branch (longest) -->
100
+ <path d="M 256 332 L 256 422" fill="none"
101
+ stroke-linecap="round"/>
102
+
103
+ <!-- Right branch (medium) -->
104
+ <path d="M 256 332 L 276 360" fill="none"
105
+ stroke-linecap="round" stroke-linejoin="round"/>
106
+ <path d="M 276 360 L 276 410" fill="none"
107
+ stroke-linecap="round"/>
108
+
109
+ <!-- Leaf nodes -->
110
+ <circle cx="236" cy="395" r="8"/>
111
+ <circle cx="256" cy="422" r="8"/>
112
+ <circle cx="276" cy="410" r="8"/>
113
+ </g>
114
+
115
+ <!-- Main neon gradient strokes on top -->
116
+ <g transform="translate(0,-66)"
117
+ stroke="url(#vcGradAll)" stroke-width="4.5" fill="#bbf7d0" opacity="1">
118
+ <!-- Short stem under shield -->
119
+ <path d="M 256 318 L 256 332" fill="none" stroke-linecap="round"/>
120
+
121
+ <!-- Root node -->
122
+ <circle cx="256" cy="332" r="7"/>
123
+
124
+ <!-- Left branch (shorter) -->
125
+ <path d="M 256 332 L 236 360" fill="none"
126
+ stroke-linecap="round" stroke-linejoin="round"/>
127
+ <path d="M 236 360 L 236 395" fill="none"
128
+ stroke-linecap="round"/>
129
+
130
+ <!-- Center branch (longest) -->
131
+ <path d="M 256 332 L 256 422" fill="none"
132
+ stroke-linecap="round"/>
133
+
134
+ <!-- Right branch (medium) -->
135
+ <path d="M 256 332 L 276 360" fill="none"
136
+ stroke-linecap="round" stroke-linejoin="round"/>
137
+ <path d="M 276 360 L 276 410" fill="none"
138
+ stroke-linecap="round"/>
139
+
140
+ <!-- Leaf nodes -->
141
+ <circle cx="236" cy="395" r="8"/>
142
+ <circle cx="256" cy="422" r="8"/>
143
+ <circle cx="276" cy="410" r="8"/>
144
+ </g>
145
+ </svg>
@@ -0,0 +1,145 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-labelledby="title desc">
2
+ <title id="title">Bouquin</title>
3
+ <desc id="desc">
4
+ A notebook with a centered B-shaped right edge, a shield and keyhole as the upper hole of a B,
5
+ and a green-blue neon version control fork as the lower hole, with one shorter branch like a git fork.
6
+ </desc>
7
+
8
+ <defs>
9
+ <!-- Background gradient -->
10
+ <linearGradient id="bgGrad" x1="0" y1="0" x2="0" y2="1">
11
+ <stop offset="0%" stop-color="#101622"/>
12
+ <stop offset="100%" stop-color="#151b2b"/>
13
+ </linearGradient>
14
+
15
+ <!-- Shield gradient -->
16
+ <linearGradient id="shieldGrad" x1="0" y1="0" x2="0" y2="1">
17
+ <stop offset="0%" stop-color="#22c55e"/>
18
+ <stop offset="100%" stop-color="#14b8a6"/>
19
+ </linearGradient>
20
+
21
+ <!-- Version control neon stroke gradient (used for all segments) -->
22
+ <linearGradient id="vcGradAll" x1="0" y1="0" x2="1" y2="1">
23
+ <stop offset="0%" stop-color="#6ee7b7"/> <!-- mint green -->
24
+ <stop offset="35%" stop-color="#22c55e"/> <!-- bright green -->
25
+ <stop offset="75%" stop-color="#38bdf8"/> <!-- teal-blue -->
26
+ <stop offset="100%" stop-color="#0ea5e9"/> <!-- blue neon -->
27
+ </linearGradient>
28
+
29
+ <!-- Soft glow for version control lines -->
30
+ <filter id="vcGlow" x="-50%" y="-50%" width="200%" height="200%">
31
+ <feGaussianBlur stdDeviation="3" result="blur"/>
32
+ <feColorMatrix
33
+ in="blur"
34
+ type="matrix"
35
+ values="
36
+ 0 0 0 0 0.30
37
+ 0 0 0 0 0.90
38
+ 0 0 0 0 0.85
39
+ 0 0 0 0.85 0" />
40
+ </filter>
41
+ </defs>
42
+
43
+ <!-- Background rounded square -->
44
+ <rect x="32" y="32" width="448" height="448" rx="96" ry="96" fill="url(#bgGrad)"/>
45
+
46
+ <!-- Notebook body with centered, deeper B-like indent on the right edge -->
47
+ <path
48
+ d="
49
+ M 148 96
50
+ H 360
51
+ Q 384 96 384 120
52
+ V 224
53
+ Q 304 256 384 288
54
+ V 392
55
+ Q 384 416 360 416
56
+ H 148
57
+ Q 128 416 128 396
58
+ V 116
59
+ Q 128 96 148 96
60
+ Z
61
+ "
62
+ fill="#202738"
63
+ stroke="#3a4254"
64
+ stroke-width="4"
65
+ />
66
+
67
+ <!-- Notebook spine -->
68
+ <rect x="128" y="96" width="20" height="320" rx="12" ry="12" fill="#3ddc97"/>
69
+
70
+ <!-- Shield + keyhole (upper "hole" of the B) -->
71
+ <g transform="translate(0,-56)">
72
+ <!-- Shield -->
73
+ <path d="M 256 180 L 296 196 L 296 244 C 296 269 281 296 256 308 C 231 296 216 269 216 244 L 216 196 Z"
74
+ fill="url(#shieldGrad)" stroke="#0f172a" stroke-width="4"/>
75
+
76
+ <!-- Keyhole -->
77
+ <circle cx="256" cy="216" r="10" fill="#020617"/>
78
+ <rect x="248" y="226" width="16" height="26" rx="8" ry="8" fill="#020617"/>
79
+ </g>
80
+
81
+ <!-- Version control graph: lower "hole" of the B with green-blue neon -->
82
+ <!-- Glow layer behind -->
83
+ <g transform="translate(0,-66)"
84
+ stroke="#22c55e" stroke-width="4" fill="#22c55e" opacity="0.6"
85
+ filter="url(#vcGlow)">
86
+ <!-- Short stem under shield -->
87
+ <path d="M 256 318 L 256 332" fill="none" stroke-linecap="round"/>
88
+
89
+ <!-- Root node -->
90
+ <circle cx="256" cy="332" r="7"/>
91
+
92
+ <!-- Left branch (shorter) -->
93
+ <path d="M 256 332 L 236 360" fill="none"
94
+ stroke-linecap="round" stroke-linejoin="round"/>
95
+ <path d="M 236 360 L 236 395" fill="none"
96
+ stroke-linecap="round"/>
97
+
98
+ <!-- Center branch (longest) -->
99
+ <path d="M 256 332 L 256 422" fill="none"
100
+ stroke-linecap="round"/>
101
+
102
+ <!-- Right branch (medium) -->
103
+ <path d="M 256 332 L 276 360" fill="none"
104
+ stroke-linecap="round" stroke-linejoin="round"/>
105
+ <path d="M 276 360 L 276 410" fill="none"
106
+ stroke-linecap="round"/>
107
+
108
+ <!-- Leaf nodes -->
109
+ <circle cx="236" cy="395" r="8"/>
110
+ <circle cx="256" cy="422" r="8"/>
111
+ <circle cx="276" cy="410" r="8"/>
112
+ </g>
113
+
114
+ <!-- Main neon gradient strokes on top -->
115
+ <g transform="translate(0,-66)"
116
+ stroke="url(#vcGradAll)" stroke-width="4.5" fill="#bbf7d0" opacity="1">
117
+ <!-- Short stem under shield -->
118
+ <path d="M 256 318 L 256 332" fill="none" stroke-linecap="round"/>
119
+
120
+ <!-- Root node -->
121
+ <circle cx="256" cy="332" r="7"/>
122
+
123
+ <!-- Left branch (shorter) -->
124
+ <path d="M 256 332 L 236 360" fill="none"
125
+ stroke-linecap="round" stroke-linejoin="round"/>
126
+ <path d="M 236 360 L 236 395" fill="none"
127
+ stroke-linecap="round"/>
128
+
129
+ <!-- Center branch (longest) -->
130
+ <path d="M 256 332 L 256 422" fill="none"
131
+ stroke-linecap="round"/>
132
+
133
+ <!-- Right branch (medium) -->
134
+ <path d="M 256 332 L 276 360" fill="none"
135
+ stroke-linecap="round" stroke-linejoin="round"/>
136
+ <path d="M 276 360 L 276 410" fill="none"
137
+ stroke-linecap="round"/>
138
+
139
+ <!-- Leaf nodes -->
140
+ <circle cx="236" cy="395" r="8"/>
141
+ <circle cx="256" cy="422" r="8"/>
142
+ <circle cx="276" cy="410" r="8"/>
143
+ </g>
144
+ </svg>
145
+
@@ -0,0 +1,109 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+
3
+ 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
108
+ =IfFs
109
+ -----END PGP PUBLIC KEY BLOCK-----