- Switch between courses with ease.
- Create lecture notes and assignments one keybinding.
- View the latex code, yaml code and all the pdf files for any assignment in a split second.
- Open any lecture note with a twinkle of an eye.
- Sync your notes to the cloud.
- Get notifications when your next class/lab starts.
- Source all lecture notes, the current one, the last two, specific lecture notes, or a range of lecture notes.
- Insane keymappings already setup for you.
- Beautiful UI, via Rofi.
- Easy to install.
- Will take about 5 minutes to setup after installation.
I take two types of notes.
- Lecture notes
- Chapter notes
When I'm taking notes during a lecture or over zoom, I use the first option, but when I'm taking notes from a book, I use the second option. In my master.tex
, I always have the following at the very top (before including the preamble file):
% If I'm taking chapter notes
\def\lecorchap{Chapter}
\def\figloc{figures/lec}
\def\noteloc{lectures/lec}
% If I'm taking lecture notes
\def\lecorchap{Lecture}
\def\figloc{figures/chap}
\def\noteloc{chapters/chap}
Here's a quick overview of how the directory structure of a course looks like:
.
βββ assignments
βΒ Β βββ graded-assignments
βΒ Β βΒ Β βββ written-homework-02.pdf
βΒ Β βΒ Β βββ ...
βΒ Β βββ my-assignments
βΒ Β βΒ Β βββ bibtex-files
βΒ Β βΒ Β βΒ Β βββ written-homework-01.bib
βΒ Β βΒ Β βΒ Β βββ ...
βΒ Β βΒ Β βββ image-files
βΒ Β βΒ Β βΒ Β βββ written-homework-01.png
βΒ Β βΒ Β βΒ Β βββ ...
βΒ Β βΒ Β βββ latex-files
βΒ Β βΒ Β βΒ Β βββ written-homework-01.tex
βΒ Β βΒ Β βΒ Β βββ ...
βΒ Β βΒ Β βββ Makefile
βΒ Β βΒ Β βββ master.tex
βΒ Β βΒ Β βββ pdf-files
βΒ Β βΒ Β βΒ Β βββ written-homework-01.pdf
βΒ Β βΒ Β βΒ Β βββ ...
βΒ Β βΒ Β βββ preamble.tex
βΒ Β βΒ Β βββ sympy-scripts
βΒ Β βΒ Β βΒ Β βββ written-homework-01.py
βΒ Β βΒ Β βΒ Β βββ ...
βΒ Β βΒ Β βββ yaml-files
βΒ Β βΒ Β βββ written-homework-01.yaml
βΒ Β βΒ Β βββ ...
βΒ Β βββ online-assignments
βΒ Β βΒ Β βββ written-homework-01.pdf
βΒ Β βΒ Β βββ ...
βΒ Β βββ solution-keys
βΒ Β βββ latex-files
βΒ Β Β Β βΒ Β βββ written-homework-01.tex
βΒ Β Β Β βΒ Β βββ ...
βΒ Β βββ Makefile
βΒ Β βββ master.tex
βΒ Β βββ pdf-files
βΒ Β Β Β βΒ Β βββ written-homework-01.pdf
βΒ Β Β Β βΒ Β βββ ...
βΒ Β βββ preamble.tex
βββ books
β βββ book-01.pdf
β βββ book-02
β β βββ master.pdf
β β βββ solutions
β βββ book-03
β β βββ master.pdf
β β βββ solutions
β β βββ chap-01.pdf
β β βββ ...
β βββ ...
βββ chapters
βΒ Β βββ chap-01.tex
βΒ Β βββ ...
βββ exams
βΒ Β βββ info.yaml
βΒ Β βββ review
βΒ Β βΒ Β βββ answers
βΒ Β βΒ Β β βββ answer-sheet-01.pdf
βΒ Β βΒ Β βΒ Β βββ ...
βΒ Β βΒ Β βββ practice
βΒ Β βΒ Β βββ practice-sheet-01.pdf
βΒ Β βΒ Β Β Β βββ ...
βΒ Β βββ solution-keys
βΒ Β βββ latex-files
βΒ Β βΒ Β βββ exam-01.tex
βΒ Β βΒ Β βββ ...
βΒ Β βββ pdf-files
βΒ Β Β Β βββ exam-01.pdf
βΒ Β Β Β βββ ...
βββ figures
β βββ lec-01
β β βββ figure-01.pdf
β β βββ figure-01.pdf_tex
β β βββ figure-01.svg
β β βββ ...
β βββ chap-01
β β βββ figure-01.pdf
β β βββ figure-01.pdf_tex
β β βββ figure-01.svg
β β βββ ...
β βββ ...
βββ info.yaml
βββ intro.tex
βββ lectures
βΒ Β βββ lec-01.tex
βΒ Β βββ ...
βββ Makefile -> /home/singularis/Documents/school-notes/College/Year-2/fall/_files/Makefile
βββ master.aux
βββ master.pdf
βββ master.tex
βββ notes.md
βββ online-lecture-notes
βΒ Β βββ lec-01-annotated.pdf
βΒ Β βββ lec-01-blank.pdf
βΒ Β βββ ...
βββ papers
βΒ Β βββ paper-01.pdf
βΒ Β βββ ...
βββ preamble.tex
βββ sympy-scripts
βΒ Β βββ script-01.py
βΒ Β βββ ...
βββ UltiSnips
βββ tex.snippets
This folder contains all the assignments for the course. You can break it up however you want. Just make sure you keep all the filetypes away from each other. For example, you can't do something like this:
.
βββ assignments
βββ graded-assignments
β βββ assignment-01.pdf
β βββ ...
βββ my-assignments
βββ files
β βββ assignment-01.bib
β βββ assignment-01.tex
β βββ assignment-01.yaml
β βββ assignment-01.pdf
β βββ assignment-01.py
β βββ ...
βββ Makefile
βββ master.pdf
βββ master.tex
It might work, but it's not recommended. For an idea of how I break up my assignments, take a look at the example setup. Once you break up your files, you then pass the location of those folders to the config.yaml
file. Take a look here for more information.
NOTE: You don't need to have all of these stuff exactly. If some of your notes are even in html
, you can create a folder for that and pass it to the config.yaml
file. An example of that would be:
html_folder: "my-assigments/html-files"
If you have a pdf version of your book and you don't have any solutions, then place the book in the books
folder by itself, as such:
.
βββ book-01.pdf
If you have the solutions to the book as one single pdf, create a folder inside the books
folder and place both the pdf of the book and the solutions inside as such:
.
βββ book-02
βββ master.pdf
βββ solutions.pdf
If your solutions are broken up into multiple pdf files, create a sub-folder titled solutions
and place them in there as such:
.
βββ book-03
βββ master.pdf
βββ solutions
βββ chap-01.pdf
βββ ...
You can give the solution files any name you want.
I use inkscape to create my figures. When you want to save your figure, save it as a pdf
, pdf_tex
, and svg
. I store the figure in folders based on the lecture/chapter number. Here's an example
.
βββ figures
βββ lec-01
β βββ figure-01.pdf
β βββ figure-01.pdf_tex
β βββ figure-01.svg
β βββ ...
βββ chap-01
β βββ figure-01.pdf
β βββ figure-01.pdf_tex
β βββ figure-01.svg
β βββ ...
βββ ...
I then use the \incfig
command I defined to include the figure (link).
If I'm taking an online course, I use the chapters
folder to store all my notes. If I'm taking an in-person or remote course, I'll use the lectures
folder to store my notes. What ever you use, make sure to provide that information in the info.yaml
file. Here's the basic template I use for my notes (link):
\nte[Side Notes]{Apr 04 2023 Mon (11:00:53)}{Title Goes Here}
\newpage
Which produces the following:
A lot of times, my courses require me to read research papers. So, I download them and store them in this folder.
I use neovim to take notes along with the UltiSnips plugin. I store my custom course specific snippets in this folder.
Here's an example info.yaml
file:
---
title: "Applied Linear Algebra I"
topic: "Mathematics"
class_number: 1234
short: "MTH-261"
author: "Hashem A. Damrah"
term: "Fall 2023"
faculty: "Mathematics"
college: "Portland Community College"
location: "Sylvania Campus, SS 114"
year: 2023
start_date: "Sep 26 2023 Tue (12:00:00)"
end_date: "Dec 14 2023 Thu (12:00:00)"
start_time: "14:00:00"
end_time: "16:20:00"
days: "TU,TH"
url: "URL"
type: "In-person" # or Online/Remote
notes_type: "lectures" # or chapters
professor:
name: "NAME"
email: "EMAIL"
phone-number: "PHONE NUMBER"
office: "OFFICE"
Here's an example master.tex
file:
\documentclass[working]{report}
\def\class{report}
\def\lecorchap{Chapter}
\def\figloc{figures/lec}
\def\noteloc{lectures/lec}
\setcounter{tocdepth}{2}
\input{preamble.tex}
\title{Title}
\author{Author}
\date{Date}
\newcommand{\linktootherpages}{https://singularisart.github.io/notes}
\newcommand{\shortlinkname}{singularisart.github.io/notes}
\newcommand{\term}{TERM}
\newcommand{\academicyear}{$YEAR$}
\newcommand{\faculty}{FACULTY}
\newcommand{\location}{LOCATION}
\newcommand{\lecturer}{LECTURER}
\setlength{\tabcolsep}{16pt}
\renewcommand\arraystretch{1.8}
\begin{document}
\createintro
\newpage
% start notes
\includenote{1}
\includenote{2}
\includenote{3}
...
\includenote{n}
% or \includenotes{1}{n}
% end notes
\listnotes
\end{document}
I use the \includenote
command to load the note file in addition to setting up a few settings (link). If I'm loading notes between a range, like 2 to 6, I use the \includenotes
command (link).
Before you start manually setting up all the files and folders yourself, I've already done that for you. You need something called the templates folder
. You can find an example here. This folder contains all the files and folders required, which you can then use distribute to all your future courses. I created a script for that. All you need to do is setup the info.yaml
file for all courses, then run the ./main.py -ic
or ./main.py --init-courses
. It will then generate and fill in everything missing.
NOTE: You must first read the setup section to make sure you've got the links to everything working.
Once you have everything setup, here are the following commands you can use:
./main.py -h
: Shows the help menu../main.py -ca
: Parses your google calendar and shows you the next class../main.py -gc "12345,6789"
: Gets the courses' info from the CRN number (only works for PCC courses so far)../main.py -ic
: Initializes all the courses. Only run this once you've completed theinfo.yaml
file for each course../main.py -ra
: Shows you all the assignments for the current course via rofi../main.py -rb
: Shows you all the books for the current course via rofi../main.py -rc
: Shows you all the courses via rofi../main.py -rn
: Shows you all the notes for the current course via rofi../main.py -rsn
: Strips all the notes for the current course via rofi../main.py -sn
: Sources all the notes for the current course via rofi../main.py -yn
: Syncs all the notes for the current course to google drive.
Instead of typing out the full command every time, I've created shortcuts for you. They come with all the commands you can run directly from the ./main.py
file, along with a bunch of other nice ones. They are as follows (run like ./shortcut-manager.sh LETTER
)`):
o
: Open my class notes.O
: List all online notes from professor.i
: List all inkscape figures.I
: Create inkscape figure with template.w
: Open current course in browser.y
: Open the current course's yaml file.p
: Search through all the papers.k
: Open thenotes.md
file for the current course.K
: Open thenotes.md
file from the root directory.m
: Open themaster.tex
file.a
: Lists all the current course's assignments.b
: Lists all the current course's books.c
: Lists all the courses.n
: Lists all the current course's notes.s
: Lets you source specific notes.S
: Syncs your notes to the drive.
Instead of manually running ./shortcut-manager.sh a
every time, I use sxhkd
to manage my shortcuts. Here's how I do it:
alt + {a-z}
bash ~/school-setup/shortcut-manager.sh {a-z}
alt + {A-Z}
bash ~/school-setup/shortcut-manager.sh {A-Z}
Run the following commands:
git clone https://github.com/SingularisArt/school-setup/
cd school-setup
./install
I've already created an example setup here you can use to understand what's going on. If you want to use the provided example, run the following commands:
cd ~/
git clone https://github.com/SingularisArt/school-setup/
cd school-setup
./install-example
The configuration file's located at $HOME/.config/lesson-manager/config.yaml
. Here are all the variable meanings:
-
calendar_id
: The Google Calendar ID for syncing events. Replace "primary" with your actual Google Calendar ID. -
drive_folder_id
: The Google Drive folder ID for syncing notes. Replace "ID" with the appropriate folder ID in your Google Drive. -
editor
: Your preferred text editor, such as "nvim" or "vim". Modify this field based on your editor of choice. -
terminal
: Your preferred terminal emulator, like "kitty" or "gnome-terminal". Adjust this parameter to your terminal preference. -
pdf_viewer
: Your preferred PDF viewer, such as "zathura" or "evince". Change this based on your preferred PDF application. -
create_readme_file
: Set totrue
to automatically create README files for each course. -
highlight_current_course
: Set totrue
to highlight the current course in the Rofi menu. -
notes_dir
: Root directory for storing notes. Modify this path to your preferred notes directory. -
root
: Root directory for courses. Adjust this path to your preferred courses directory. -
templates_dir
: Directory containing template files. Modify this path if your templates are stored elsewhere. -
current_course
: Path to the file tracking the current course. -
books_dir
: Directory for storing books related to the current course. -
figures_dir
: Directory for storing figures related to the current course. -
date_format
: Set the format for displaying dates. Adjust according to your preferred date format. -
home
: Your home directory. Usually detected automatically but can be set manually if needed. -
user
: Your username. Similar tohome
, this is often automatically detected. -
trash_dir
: Directory for the trash bin. Deleted files will be moved here. -
assignments_dir
: Directory for storing assignments. -
assignment_folders
: Subfolders for different types of assignments (e.g., Bibtex files, LaTeX files). -
rofi_options
: Customize Rofi options for a better interactive experience. Modify this list as needed. -
folders
: List all the folders you want to be created when you initiate your courses. -
files
: List all files you want to be either symlinked or copied from the templates folder when you initiate your courses.