Yohann Legrand

Yohann Legrand

Add a new task in Notion

// Menu: New task
// Description: Add a new task in Notion
const { newTask, getProperties, syncProperties } = await lib("notion-tasks")
let taskName = await arg({
placeholder: "Task name",
hint: `Type "sync" to sync`,
})
if (taskName === "sync") {
try {
await syncProperties()
notify({
title: "✅ Notion sync",
message: "Tasks properties successfully cached locally",
})
} catch (err) {
notify({
title: "⛔️ Notion sync",
message: "Something went wrong",
})
console.error(err)
}
taskName = await arg("Task name")
}
const { statusOptions, dayOptions, tagOptions } = getProperties()
const status = await arg(
"Status",
statusOptions.map((opt) => opt.name)
)
const day = await arg(
"Day",
dayOptions.map((opt) => opt.name)
)
const tag = await arg(
"Tag",
tagOptions.map((opt) => opt.name)
)
try {
await newTask(taskName, status, day, tag)
send("HIDE_APP")
notify({
title: "✅ New task added",
message: `${taskName} for ${day} (${status})`,
})
} catch (err) {
send("HIDE_APP")
notify({
title: "⛔️ New task",
message: `Something went wrong`,
})
console.error(err)
}
const notionToken = await env("NOTION_USER_TOKEN")
const databaseId = "06d55db47a994f429132d5d8fd9edd2a"
const tasksDb = await db("tasks", {
properties: {
statusOptions: [],
dayOptions: [],
tagOptions: [],
},
})
export const getProperties = () => tasksDb.properties
export async function syncProperties() {
const { data } = await get(
`https://api.notion.com/v1/databases/${databaseId}`,
{
headers: {
Authorization: `Bearer ${notionToken}`,
"Content-Type": "application/json",
"Notion-Version": "2021-05-13",
},
}
)
const {
Status: {
select: { options: statusOptions },
},
Day: {
multi_select: { options: dayOptions },
},
Tag: {
multi_select: { options: tagOptions },
},
} = data.properties
tasksDb.properties = { statusOptions, dayOptions, tagOptions }
await tasksDb.write()
}
export async function newTask(taskName, status, day, tag) {
return await post(
"https://api.notion.com/v1/pages",
{
parent: { database_id: databaseId },
properties: {
Name: {
title: [{ text: { content: taskName } }],
},
Status: {
select: { name: status },
},
Day: {
multi_select: [{ name: day }],
},
Tag: {
multi_select: [{ name: tag }],
},
},
},
{
headers: {
Authorization: `Bearer ${notionToken}`,
"Content-Type": "application/json",
"Notion-Version": "2021-05-13",
},
}
)
}

Open the repo page in the browser

// Menu: Open Github Repo
// Description: Open the repo page in the browser
const USERNAME = "Alarid"
let dots = 0
let placeholderIntervalId = setInterval(() => {
setPlaceholder(`Loading ${USERNAME} github repos`.padEnd(++dots, "."))
}, 100)
const response = await get(`https://api.github.com/users/${USERNAME}/repos`)
const repositories = response.data
clearInterval(placeholderIntervalId)
if (!repositories) exit(1)
const choice = await arg(
"Which project?",
repositories.map((repo) => ({
name: repo.name,
description: repo.description,
value: repo.html_url,
}))
)
exec(`open ${choice}`)

Select and open a bookmark from Brave

// Menu: Brave Bookmarks
// Description: Select and open a bookmark from Brave
function parseBookmarks(node) {
const bookmarks = [];
node.forEach((item) => {
if (item.type === "url") {
bookmarks.push(item);
} else if (item.type === "folder") {
bookmarks.push(...parseBookmarks(item.children));
}
});
return bookmarks;
}
let bookmarksFile = await readFile(
home(
"Library/Application Support/BraveSoftware/Brave-Browser/Default/Bookmarks"
)
);
const rootNode = JSON.parse(bookmarksFile);
const bookmarkBar = rootNode.roots.bookmark_bar;
const bookmarks = parseBookmarks(bookmarkBar.children);
let url = await arg(
"Select bookmark",
bookmarks.map(({ name, url }) => {
return {
name: name || url,
description: url,
value: url,
};
})
);
exec(`open ${url}`);