├── .editorconfig ├── .github └── workflows │ ├── flatpak-builder.yml │ └── snap-builder.yml ├── .gitignore ├── .gitlab-ci.yml ├── AppImage ├── AppRun.shim └── folio.build.appimage.sh ├── COPYING ├── README.md ├── build.flatpak.sh ├── com.toolstack.Folio.json ├── data ├── app.desktop.in ├── app.gschema.xml ├── app.metainfo.xml.in ├── app.service.in ├── editor.desktop.in ├── folio_markdown.xml ├── folio_markdown_dark.xml ├── icons │ ├── hicolor │ │ ├── scalable │ │ │ └── apps │ │ │ │ └── com.toolstack.Folio.svg │ │ └── symbolic │ │ │ └── apps │ │ │ └── com.toolstack.Folio-symbolic.svg │ └── meson.build ├── markdownpp.lang └── meson.build ├── lib ├── meson.build ├── note.vala ├── note_container.vala ├── notebook │ ├── local_notebook.vala │ ├── notebook.vala │ └── trashed_notebook.vala ├── notebook_icon_type.vala ├── notebook_info.vala ├── provider.vala ├── trash.vala └── util │ ├── NaturalCollate.vala │ ├── file_utils.vala │ ├── fuzzy_matching.vala │ └── sugar.vala ├── meson.build ├── meta ├── folio-desktop-dark.png ├── folio-desktop.png ├── folio-mobile.png ├── folio-preferences.png └── folio-three-pane-mode.png ├── po ├── LINGUAS ├── POTFILES ├── ar.po ├── ca.po ├── com.toolstack.Folio.pot ├── cs.po ├── de.po ├── es.po ├── fa.po ├── fi.po ├── fr.po ├── generate-POT-file.sh ├── gl.po ├── hi.po ├── it.po ├── ko.po ├── meson.build ├── nb.po ├── nl_BE.po ├── nl_NL.po ├── oc.po ├── pl.po ├── print-source-files.sh ├── pt_BR.po ├── ru.po ├── sr.po ├── tok.po ├── tr.po ├── uk.po └── zh_CN.po ├── search-provider ├── SearchProvider.service.in ├── meson.build ├── org.gnome.Shell.SearchProvider2.xml ├── search-provider.ini └── search-provider.vala ├── snap └── snapcraft.yaml ├── src ├── application.vala ├── color.vala ├── config.vapi ├── css │ ├── style-black-hc.css │ ├── style-black.css │ ├── style-dark.css │ └── style.css ├── folio.gresource.xml ├── graphics │ └── scalable │ │ └── actions │ │ ├── apply-symbolic.svg │ │ ├── dark-mode-symbolic.svg │ │ ├── document-save-symbolic.svg │ │ ├── empty-trash-symbolic.svg │ │ ├── font-x-generic-symbolic.svg │ │ ├── format-text-highlight-symbolic.svg │ │ ├── icon-car-symbolic.svg │ │ ├── icon-code-symbolic.svg │ │ ├── icon-food-symbolic.svg │ │ ├── icon-gaming-symbolic.svg │ │ ├── icon-heart-symbolic.svg │ │ ├── icon-home-symbolic.svg │ │ ├── icon-like-symbolic.svg │ │ ├── icon-music-symbolic.svg │ │ ├── icon-nature-symbolic.svg │ │ ├── icon-patch-symbolic.svg │ │ ├── icon-pin-symbolic.svg │ │ ├── icon-plant-symbolic.svg │ │ ├── icon-plus-symbolic.svg │ │ ├── icon-school-symbolic.svg │ │ ├── icon-science-symbolic.svg │ │ ├── icon-settings-symbolic.svg │ │ ├── icon-skull-symbolic.svg │ │ ├── icon-sport-symbolic.svg │ │ ├── icon-star-symbolic.svg │ │ ├── icon-toki-pona-symbolic.svg │ │ ├── icon-toki-symbolic.svg │ │ ├── icon-travel-symbolic.svg │ │ ├── icon-work-symbolic.svg │ │ ├── insert-code-symbolic.svg │ │ ├── insert-horizontal-rule-symbolic.svg │ │ ├── object-flip-horizontal-symbolic.svg │ │ ├── reset-symbolic.svg │ │ ├── stretch-horizontal-symbolic.svg │ │ ├── toolbar-symbolic.svg │ │ ├── view-list-ordered-symbolic.svg │ │ └── view-sort-descending-symbolic.svg ├── main.vala ├── meson.build └── ui │ ├── edit_view │ ├── cheatsheet │ │ ├── markdown_cheatsheet.blp │ │ ├── markdown_cheatsheet.md │ │ └── markdown_cheatsheet.vala │ ├── edit_view.blp │ ├── edit_view.vala │ └── toolbar │ │ ├── toolbar.blp │ │ └── toolbar.vala │ ├── file_editor │ ├── file_editor_window.blp │ └── file_editor_window.vala │ ├── fuzzy_string_sorter.vala │ ├── meson.build │ ├── popup │ ├── notebook_selection_popup │ │ ├── notebook_list_item.blp │ │ ├── notebook_list_item.vala │ │ ├── notebook_selection_popup.blp │ │ └── notebook_selection_popup.vala │ └── shortcut_window.blp │ ├── preferences │ ├── preferences.blp │ └── preferences.vala │ ├── strings.vala │ ├── widgets │ ├── markdown │ │ ├── heading_popover.blp │ │ ├── heading_popover.vala │ │ ├── markdown_buffer.vala │ │ └── markdown_view.vala │ ├── notebook_icon │ │ ├── notebook_preview.blp │ │ └── notebook_preview.vala │ └── theme_selector │ │ ├── theme_selector.blp │ │ └── theme_selector.vala │ └── window │ ├── app_menu │ ├── app_menu.blp │ └── app_menu.vala │ ├── font_scale │ ├── font_scale.blp │ └── font_scale.vala │ ├── notebooks_bar │ ├── icon.blp │ ├── icon.vala │ ├── notebook_create_popup.blp │ ├── notebook_create_popup.vala │ ├── notebook_menu.blp │ ├── notebook_menu.vala │ ├── notebook_sidebar_item.vala │ ├── notebooks_bar.blp │ └── notebooks_bar.vala │ ├── sidebar │ ├── note_card.blp │ ├── note_card.vala │ ├── note_create_popup.blp │ ├── note_create_popup.vala │ ├── note_menu.blp │ └── note_menu.vala │ ├── window.blp │ ├── window.vala │ └── window_model.vala └── subprojects └── blueprint-compiler.wrap /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | insert_final_newline = true 7 | trim_trailing_whitespace = true 8 | indent_style = tab 9 | indent_size = 4 10 | 11 | [*.po] 12 | insert_final_newline = false 13 | 14 | [*.pot] 15 | insert_final_newline = false 16 | 17 | [*.build] 18 | indent_style = space 19 | indent_size = 2 20 | 21 | [*.xml] 22 | indent_style = space 23 | indent_size = 2 24 | 25 | [*.blp] 26 | indent_style = space 27 | indent_size = 2 28 | -------------------------------------------------------------------------------- /.github/workflows/flatpak-builder.yml: -------------------------------------------------------------------------------- 1 | on: 2 | release: 3 | types: [published] 4 | name: Build flapak on release 5 | jobs: 6 | flatpak: 7 | name: "Flatpak" 8 | runs-on: ubuntu-latest 9 | container: 10 | image: bilelmoussaoui/flatpak-github-actions:gnome-48 11 | options: --privileged 12 | steps: 13 | - uses: actions/checkout@v4 14 | - uses: flatpak/flatpak-github-actions/flatpak-builder@v6.3 15 | with: 16 | bundle: Folio.flatpak 17 | manifest-path: com.toolstack.Folio.json 18 | cache-key: flatpak-builder-${{ github.sha }} 19 | -------------------------------------------------------------------------------- /.github/workflows/snap-builder.yml: -------------------------------------------------------------------------------- 1 | on: 2 | release: 3 | types: [published] 4 | name: Build snap on release 5 | jobs: 6 | snap: 7 | name: Build snap 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v4 11 | - uses: snapcore/action-build@v1 12 | id: snapcraft 13 | - uses: actions/upload-artifact@v4 14 | with: 15 | name: snap 16 | path: ${{ steps.snapcraft.outputs.snap }} 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/*~ 2 | /subprojects/*/ 3 | _build 4 | .flatpak 5 | .var 6 | .flatpak-builder 7 | flatpak 8 | AppImage/build 9 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | # You can override the included template(s) by including variable overrides 2 | # SAST customization: https://docs.gitlab.com/ee/user/application_security/sast/#customizing-the-sast-settings 3 | # Secret Detection customization: https://docs.gitlab.com/ee/user/application_security/secret_detection/#customizing-settings 4 | # Dependency Scanning customization: https://docs.gitlab.com/ee/user/application_security/dependency_scanning/#customizing-the-dependency-scanning-settings 5 | # Note that environment variables can be set in several places 6 | # See https://docs.gitlab.com/ee/ci/variables/#cicd-variable-precedence 7 | stages: 8 | - test 9 | sast: 10 | stage: test 11 | include: 12 | - template: Security/SAST.gitlab-ci.yml 13 | -------------------------------------------------------------------------------- /AppImage/AppRun.shim: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | 3 | # Shamelessly stolen from the linuxdeploy gtk plugin 4 | 5 | # make sure errors in sourced scripts will cause this script to stop 6 | set -e 7 | 8 | # we need to tell gnome where to look for the Folio settings schema 9 | # since it's not in the system directory. Instead use the one we have 10 | # packaged with the appimage. 11 | this_dir="$(readlink -f "$(dirname "$0")")" 12 | export GSETTINGS_SCHEMA_DIR=${this_dir}/usr/local/share/glib-2.0/schemas/ 13 | 14 | exec "$this_dir"/usr/bin/com.toolstack.Folio "$@" 15 | -------------------------------------------------------------------------------- /AppImage/folio.build.appimage.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | 3 | # Store the current working directory 4 | export ROOTDIR=$PWD 5 | 6 | # Get our current base directory name 7 | export BASEDIR=${PWD##*/} 8 | 9 | if [ "$BASEDIR" != "AppImage" ]; then 10 | echo "Not in AppImage directory... aborting!" 11 | exit 12 | fi 13 | 14 | # Create/clean the buid directory 15 | if [ -d "build" ]; then 16 | rm -rf build 17 | fi 18 | mkdir build 19 | 20 | if [ -f "Folio-x86_64.AppImage" ]; then 21 | rm Folio-x86_64.AppImage 22 | fi 23 | 24 | # Setup our export variables for the build 25 | export DESTDIR="../AppImage/build" 26 | export NO_STRIP=true 27 | 28 | # Execute the build/install 29 | cd $ROOTDIR/../build 30 | ninja install 31 | 32 | # Complile the gschema 33 | cd $ROOTDIR/build/usr/local/share/glib-2.0/schemas 34 | glib-compile-schemas . 35 | 36 | # Change back to the build directory 37 | cd $ROOTDIR/build 38 | 39 | # Create the appimage 40 | linuxdeploy --appdir=. -d usr/local/share/applications/com.toolstack.Folio.desktop -i usr/local/share/icons/hicolor/scalable/apps/com.toolstack.Folio.svg -e usr/local/bin/com.toolstack.Folio --custom-apprun=../AppRun.shim --output appimage 41 | 42 | # Move the appimage up one level. 43 | mv Folio-x86_64.AppImage .. 44 | 45 | # Cleanup 46 | cd $ROOTDIR 47 | rm -rf build 48 | -------------------------------------------------------------------------------- /build.flatpak.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | 3 | # Store the current working directory 4 | export ROOTDIR=$PWD 5 | 6 | # Get our current base directory name 7 | export BASEDIR=${PWD##*/} 8 | 9 | if [ "$BASEDIR" != "Folio" ]; then 10 | echo "Not in Folio root directory... aborting!" 11 | exit 12 | fi 13 | 14 | # Create/clean the build directory 15 | if [ -d "flatpak" ]; then 16 | rm -rf flatpak 17 | fi 18 | 19 | mkdir flatpak 20 | cd flatpak 21 | 22 | flatpak-builder --repo=repo --force-clean flatpak ../com.toolstack.Folio.json 23 | flatpak build-bundle repo Folio-x86_64.flatpak --runtime-repo=https://flathub.org/repo/flathub.flatpakrepo --arch=x86_64 com.toolstack.Folio master 24 | -------------------------------------------------------------------------------- /com.toolstack.Folio.json: -------------------------------------------------------------------------------- 1 | { 2 | "app-id" : "com.toolstack.Folio", 3 | "runtime" : "org.gnome.Platform", 4 | "runtime-version" : "48", 5 | "sdk" : "org.gnome.Sdk", 6 | "command" : "com.toolstack.Folio", 7 | "finish-args" : [ 8 | "--share=ipc", 9 | "--socket=fallback-x11", 10 | "--device=dri", 11 | "--socket=wayland", 12 | "--filesystem=home" 13 | ], 14 | "cleanup" : [ 15 | "/include", 16 | "/lib/pkgconfig", 17 | "/man", 18 | "/share/doc", 19 | "/share/gtk-doc", 20 | "/share/man", 21 | "/share/pkgconfig", 22 | "/share/vala", 23 | "*.la", 24 | "*.a" 25 | ], 26 | "modules": [ 27 | { 28 | "name" : "blueprint-compiler", 29 | "buildsystem" : "meson", 30 | "cleanup": [ 31 | "*" 32 | ], 33 | "sources" : [{ 34 | "type" : "git", 35 | "url" : "https://gitlab.gnome.org/jwestman/blueprint-compiler.git", 36 | "tag" : "v0.16.0", 37 | "commit" : "04ef0944db56ab01307a29aaa7303df6067cb3c0" 38 | }] 39 | }, 40 | { 41 | "name" : "Folio", 42 | "builddir" : true, 43 | "buildsystem" : "meson", 44 | "sources" : [{ 45 | "type" : "git", 46 | "url" : "https://github.com/toolstack/Folio", 47 | "tag" : "25.02", 48 | "commit" : "446a3968d8c16c920df02959390c007571c79999" 49 | }] 50 | } 51 | ] 52 | } 53 | -------------------------------------------------------------------------------- /data/app.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Terminal=false 4 | Exec=@app_id@ 5 | DBusActivatable=true 6 | StartupWMClass=@app_id@ 7 | 8 | Name=Folio 9 | GenericName=Notes Manager 10 | Comment=Take notes 11 | 12 | Keywords=Notebook;Note;Notes;Text;Markdown;Notepad;Write;School;Post-it;Sticky; 13 | Icon=@app_id@ 14 | Categories=GTK;Utility;TextEditor;GNOME; 15 | StartupNotify=true 16 | X-Purism-FormFactor=Workstation;Mobile; 17 | X-GNOME-SingleWindow=true 18 | Actions=new-note;new-notebook;markdown-cheatsheet;preferences; 19 | 20 | [Desktop Action new-note] 21 | Name=New Note 22 | Exec=@app_id@ --new-note 23 | 24 | [Desktop Action new-notebook] 25 | Name=New Notebook 26 | Exec=@app_id@ --new-notebook 27 | 28 | [Desktop Action markdown-cheatsheet] 29 | Name=Markdown Cheatsheet 30 | Exec=@app_id@ --markdown-cheatsheet 31 | 32 | [Desktop Action preferences] 33 | Name=Preferences 34 | Exec=@app_id@ --preferences 35 | -------------------------------------------------------------------------------- /data/app.gschema.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 'Sans 10' 6 | Note Font 7 | The font notes will be displayed in 8 | 9 | 10 | 'Monospace 10' 11 | Monospace Font 12 | The font code will be displayed in 13 | 14 | 15 | 720 16 | Use Fixed Width For Notes 17 | Use a fixed width for the text area of a note 18 | 19 | 20 | false 21 | OLED Mode 22 | Makes the dark theme pitch black 23 | 24 | 25 | true 26 | Enable Toolbar 27 | Displays the formatting toolbar at the bottom of the note 28 | 29 | 30 | true 31 | Enable Cheatsheet 32 | Adds a button to the markdown reference sheet on the right of the formatting toolbar 33 | 34 | 35 | false 36 | 3-Pane Layout 37 | Expands the notebook list to include the notebook name 38 | 39 | 40 | '~/.var/app/com.toolstack.Folio/data' 41 | Notes Storage Location 42 | Where the notebooks are stored (requires app restart) 43 | 44 | 45 | '~/.var/app/com.toolstack.Folio/data' 46 | Trash Storage Location 47 | Where the trash folder is located (requires app restart) 48 | 49 | 50 | false 51 | Show line numbers 52 | Displays line numbers at the left of the note 53 | 54 | 55 | false 56 | Show all notes 57 | Displays the "All Notes" notebook at the top of the notebook list 58 | 59 | 60 | false 61 | Enable autosave 62 | Automatically saves the current note every 30 seconds if the contents have changed (requires app restart) 63 | 64 | 65 | false 66 | Don't hide the Trash folder 67 | The trash folder is set as a hidden folder by default, this option makes it visible 68 | 69 | 70 | 0 71 | Note sort order 72 | The sort order of the note list 73 | 74 | 75 | 0 76 | Notebook sort order 77 | The sort order of the notebook list 78 | 79 | 80 | 0 81 | URL detection level 82 | How aggressive to look for URLs in markdown text 83 | 84 | 85 | '1.0' 86 | Line spacing 87 | The line spacing for the note text 88 | 89 | 90 | false 91 | Allow long notebook names 92 | The notebook column will expand to the width of the longest notebook name 93 | 94 | 95 | false 96 | Allow long note names 97 | The note list column will expand to the width of the longest note name 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 'default' 110 | 111 | 112 | 113 | 114 | 720 115 | 116 | 117 | 512 118 | 119 | 120 | false 121 | 122 | 123 | 100 124 | 125 | 126 | '' 127 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /data/app.service.in: -------------------------------------------------------------------------------- 1 | [D-BUS Service] 2 | Name=@app_id@ 3 | Exec=@bindir@/@app_id@ --gapplication-service 4 | -------------------------------------------------------------------------------- /data/editor.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Terminal=false 4 | Exec=@app_id@ --file %u 5 | NoDisplay=true 6 | 7 | Name=Folio 8 | 9 | Icon=@app_id@ 10 | StartupNotify=true 11 | MimeType=text/x-markdown;text/markdown; -------------------------------------------------------------------------------- /data/folio_markdown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Greg Ross 4 | <_description>The style scheme for Folio 5 | 6 | 7 | light 8 | folio-dark 9 | 10 | 11 |