Wed 25. February 2026 | 2026-02-25
To activate pre-push, rename .git/hooks/pre-push.sample to .git/hooks/pre-push
Example script:
GREEN='\033[0;32m'
RED='\033[1;91m'
RESET='\033[0m'
branch_name="$(git branch --show-current)"
allowed_branch_name="my-branch"
if [ "$branch_name" != "$allowed_branch_name" ]; then
echo "Current branch: ${RED}${branch_name}${RESET}"
echo "Allowed branch: ${GREEN}${allowed_branch_name}${RESET}"
echo
echo "You can't push directly to this branch."
exit 1
fi
Insert the current branch into the top of the pre-push file
sed -i "" "s&An example&$(git branch --show-current)\n# An example&" .git/hooks/pre-push
Replace "An example" with current branch \n # An example
Copy current branch to Mac clipboard
echo $(git branch --show-current) | pbcopy
From vim:
:!echo $(git branch --show-current) | pbcopy
Mon 23. February 2026 | 2026-02-23
git reset --soft HEAD~1
Mon 26. January 2026 | 2026-01-26
VScode ...
Jetbrains - Live templates
live templates
(remove hyphens)
{-% for $ITEM$ in $LIST$ %-}
$END$
{-% endfor %-}
console.log("$VAR$", $VAR$)
Neovim - luasnippets / iabbrev ...
se neovim config
Mon 26. January 2026 | 2026-01-26
You can find all plugin settings at Preferences -> Editor -> General -> Code Completion -> Machine Learning-Assisted Completion -> Enable Full Line suggestions section.
https://plugins.jetbrains.com/plugin/14823-full-line-code-completion/documentation


Thu 22. January 2026 | 2026-01-22
Docs: https://docs.astral.sh/uv/
Install Python version: https://docs.astral.sh/uv/getting-started/features/#python-versions
uv python install <version>
Uninstall python version
uv python uninstall <version>
Initialize project
uv init
Set correct python version in .python-version
(re)-build venv
uv venv
Updates .venv files
Activate venv environment
source .venv/bin/activate
deactivate
Install dependencies from requirements.txt
uv pip install -r requirements.txt
Install one single dependency
uv python add <package>
Run package command
uv run <command>
Sun 11. January 2026 | 2026-01-11
cd /mnt/c/Users/Pål Stakvik
Fri 09. January 2026 | 2026-01-09
bash entry i docker-compose
service-name:
stdin_open: true
tty: true
Exec bash i Dockerfile / docker run:
Start interactive shell on container:
docker run -it?
Already running container:
docker exec -it [container-name] /bin/bash
Fri 09. January 2026 | 2026-01-09
GREEN='\033[0;32m'
RED='\033[1;91m'
RESET='\033[0m'
echo -e "${RED}Found errors:${RESET}"
echo -e "${GREEN}Success!${RESET}"
https://gist.github.com/JBlond/2fea43a3049b38287e5e9cefc87b2124
Regular Colors
| Value |
Color |
| \e[0;30m |
Black |
| \e[0;31m |
Red |
| \e[0;32m |
Green |
| \e[0;33m |
Yellow |
| \e[0;34m |
Blue |
| \e[0;35m |
Purple |
| \e[0;36m |
Cyan |
| \e[0;37m |
White |
Bold
| Value |
Color |
| \e[1;30m |
Black |
| \e[1;31m |
Red |
| \e[1;32m |
Green |
| \e[1;33m |
Yellow |
| \e[1;34m |
Blue |
| \e[1;35m |
Purple |
| \e[1;36m |
Cyan |
| \e[1;37m |
White |
Underline
| Value |
Color |
| \e[4;30m |
Black |
| \e[4;31m |
Red |
| \e[4;32m |
Green |
| \e[4;33m |
Yellow |
| \e[4;34m |
Blue |
| \e[4;35m |
Purple |
| \e[4;36m |
Cyan |
| \e[4;37m |
White |
Background
| Value |
Color |
| \e[40m |
Black |
| \e[41m |
Red |
| \e[42m |
Green |
| \e[43m |
Yellow |
| \e[44m |
Blue |
| \e[45m |
Purple |
| \e[46m |
Cyan |
| \e[47m |
White |
High Intensity
| Value |
Color |
| \e[0;90m |
Black |
| \e[0;91m |
Red |
| \e[0;92m |
Green |
| \e[0;93m |
Yellow |
| \e[0;94m |
Blue |
| \e[0;95m |
Purple |
| \e[0;96m |
Cyan |
| \e[0;97m |
White |
Bold High Intensity
| Value |
Color |
| \e[1;90m |
Black |
| \e[1;91m |
Red |
| \e[1;92m |
Green |
| \e[1;93m |
Yellow |
| \e[1;94m |
Blue |
| \e[1;95m |
Purple |
| \e[1;96m |
Cyan |
| \e[1;97m |
White |
High Intensity backgrounds
| Value |
Color |
| \e[0;100m |
Black |
| \e[0;101m |
Red |
| \e[0;102m |
Green |
| \e[0;103m |
Yellow |
| \e[0;104m |
Blue |
| \e[0;105m |
Purple |
| \e[0;106m |
Cyan |
| \e[0;107m |
White |
Reset
other styles
echo -e "\e[1mbold\e[0m"
echo -e "\e[3mitalic\e[0m"
echo -e "\e[3m\e[1mbold italic\e[0m"
echo -e "\e[4munderline\e[0m"
echo -e "\e[9mstrikethrough\e[0m"
echo -e "\e[31mHello World\e[0m"
echo -e "\x1B[31mHello World\e[0m"
Thu 08. January 2026 | 2026-01-08
bash script.sh iii
if [[ "$1" == "iii" ]]; then
echo "første parameter er iii"
else
echo "første parameter er ikke iii"
fi
Tue 16. December 2025 | 2025-12-16
Telescope & Fzf.vim
| Action |
Telescope |
Fzf.vim |
| Open all items in quickfixlist |
[Q] |
Select all items with [Tab] and hit [Enter] |
| List all vim keymaps |
require('telescope.builtin').keymaps |
:Maps |
More on Telescope: https://useful-snippets.netlify.app/posts/vim/
Fzf lua
Q for selecting all elements with fzf-lua:
config.defaults.keymap.fzf["ctrl-q"] = "select-all+accept"
From Lazyvim config: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/plugins/extras/editor/fzf.lua
Fzf use cases
Edit a file
nvim $(fzf)
Restore a file from another branch (here: main)
git checkout main $(fzf)
Run a specific test in Jest
npx jest --runTestsByPath $(fzf)
Mon 15. December 2025 | 2025-12-15
Vim/Neovim
yank filename without extension to 'f'-registry
:let @f = expand('%:t:r')<CR>
search for "const [contents in 'f'-registry]"
:execute '/const ' . @f<CR>:nohlsearch<CR>
added together
:let @f = expand('%:t:r')<CR>:execute '/const ' . @f<CR>:nohlsearch<CR>
Ideavim
Copy file name to + register and search for it. Do not execute immediately () as CopyFileName also includes the file extension
:action CopyFileName<CR>/const <c-r>+
Tue 02. December 2025 | 2025-12-02
Go forward / List ancestry (later) commits
From HEAD (older commit) to main branch (up-to-date)
git log --reverse --ancestry-path HEAD^..main
stuff
git checkout HEAD^
git checkout HEAD@{1}