Files
dotfiles/.github/README.md
Ismo Vuorinen 6d72003446 fix(lint): fix all sonarcloud detected issues (#279)
* fix(ci): replace broad permissions with specific scopes in workflows

Replace read-all/write-all with minimum required permission scopes
across all GitHub Actions workflows to follow the principle of least
privilege (SonarCloud rule githubactions:S8234).

* fix(shell): use [[ instead of [ for conditional tests

Replace single brackets with double brackets in bash conditional
expressions across 14 files (28 changes). All scripts use bash
shebangs so [[ is safe everywhere (SonarCloud rule shelldre:S7688).

* fix(shell): add explicit return statements to functions

Add return 0 as the last statement in ~46 shell functions across
17 files that previously relied on implicit return codes
(SonarCloud rule shelldre:S7682).

* fix(shell): assign positional parameters to local variables

Replace direct $1/$2/$3 usage with named local variables in _log(),
msg(), msg_err(), msg_done(), msg_run(), msg_ok(), and array_diff()
(SonarCloud rule shelldre:S7679).

* fix(python): replace dict() constructor with literal

Use {} instead of dict() for empty dictionary initialization
(SonarCloud rule python:S7498).

* fix(shell): fix husky shebang and tolerate npm outdated exit code

* docs(shell): add function docstring comments

* fix(shell): fix heredoc indentation in x-sonarcloud

* feat(python): add ruff linter and formatter configuration

* fix(ci): align megalinter config with biome, ruff, and shfmt settings

* fix(ci): disable black and yaml-prettier in megalinter config

* chore(ci): update ruff-pre-commit to v0.15.0 and fix hook name

* fix(scripts): check for .git dir before skipping clone in install-fonts

* fix(shell): address code review issues in scripts and shared.sh

- Guard wezterm show-keys failure in create-wezterm-keymaps.sh
- Stop masking git failures with return 0 in install-cheat-purebashbible.sh
- Add missing shared.sh source in install-xcode-cli-tools.sh
- Replace exit 1 with return 1 in sourced shared.sh

* fix(scripts): address code review and security findings

- Guard wezterm show-keys failure in create-wezterm-keymaps.sh
- Stop masking git failures with return 0 in install-cheat-purebashbible.sh
- Add missing shared.sh source in install-xcode-cli-tools.sh
- Replace exit 1 with return 1 in sourced shared.sh
- Remove shell=True subprocess calls in x-git-largest-files.py

* style(shell): apply shfmt formatting and add args to pre-commit hook

* fix(python): suppress bandit false positives in x-git-largest-files

* fix(python): add nosemgrep suppression for check_output call

* feat(format): add prettier for YAML formatting

Install prettier, add .prettierrc.json config (200-char width, 2-space
indent, LF endings), .prettierignore, yarn scripts (lint:prettier,
fix:prettier, format:yaml), and pre-commit hook scoped to YAML files.

* style(yaml): apply prettier formatting

* fix(scripts): address remaining code review findings

- Python: use list comprehension to filter empty strings instead of
  slicing off the last element
- create-wezterm-keymaps: write to temp file and mv for atomic updates
- install-xcode-cli-tools: fix shellcheck source directive path

* fix(python): sort imports alphabetically in x-git-largest-files

* fix(lint): disable PYTHON_ISORT in MegaLinter, ruff handles it

* chore(git): add __pycache__ to gitignore

* fix(python): rename ambiguous variable l to line (E741)

* style: remove trailing whitespace and blank lines

* style(fzf): apply shfmt formatting

* style(shell): apply shfmt formatting

* docs(plans): add design documents

* style(docs): add language specifier to fenced code block

* feat(lint): add markdown-table-formatter to dev tooling

Add markdown-table-formatter as a dev dependency with yarn scripts
(lint:md-table, fix:md-table) and a local pre-commit hook to
automatically format markdown tables on commit.
2026-02-07 19:01:02 +02:00

4.6 KiB

.dotfiles

Welcome to ivuorinen's .dotfiles repository. It's a hodgepodge of scripts and configurations, tests and mistakes I'm not aware of yet. As I find more interesting tools, configs and other stuff, this repository will live accordingly.

Please for the love of everything good do not use these 1:1 as your own dotfiles, fork or download the repository as a zip and go from there with your own configs.

It would be nice if you'd add an issue linking to your fork or repo so I can see what interesting stuff you've done with it. Sharing is caring.

Setup

First time setup

  1. Clone this repository to $HOME/.dotfiles
  2. ./install
  3. ???
  4. Profit

Updates

cd $HOME/.dotfiles && git pull && ./install

The looks

screenshot of the oh-my-posh shell

screenshot of light version of tmux with nvim editing this repository

screenshot of dark version of tmux with nvim editing this repository

Interesting files and locations

Interesting folders

Path Description
.github GitHub Repository configuration files, meta.
hosts/{hostname}/ Configs that should apply to that host only.
local/bin Helper scripts that I've collected or wrote.
scripts Setup scripts.

Host specific configuration

Configurations under hosts/<hostname> are applied only when running on the matching machine. Each host folder contains its own install.conf.yaml that is processed by Dotbot during installation.

dotfile folders

Repo Destination Description
base/ .* $HOME level files.
config/ .config/ Configurations for applications.
local/ .local/ XDG Base folder: bin, share and state
ssh/ .ssh/ SSH Configurations.

dfm - the dotfiles manager

.local/bin/dfm is a shell script that has some tools that help with dotfiles management.

Running dfm gives you a list of available commands.

Documentation generation

dfm docs generates Markdown documentation under the docs/ directory. The subcommands are:

dfm docs alias        # regenerate alias table
dfm docs folders      # document interesting folders
dfm docs keybindings  # update keybinding docs for tmux, nvim and others
dfm docs all          # run every docs task

The docs/ folder contains generated cheat sheets, keybindings and other reference files. New documentation can be added without modifying this README.

Configuration

The folder structure follows XDG Base Directory Specification where possible.

XDG Variables

Env Default Short description
$XDG_BIN_HOME $HOME/.local/bin Local binaries
$XDG_CONFIG_HOME $HOME/.config User-specific configs
$XDG_DATA_HOME $HOME/.local/share User-specific data files
$XDG_STATE_HOME $HOME/.local/state App state that should persist between restarts

Please see docs/folders.md for more information.

Managing submodules

This repository uses Git submodules for external dependencies. After cloning, run:

git submodule update --init --recursive

To pull submodule updates later use:

git submodule update --remote --merge

The helper script add-submodules.sh documents how each submodule is added and configured. Submodules are automatically updated by the update-submodules.yml workflow.

Testing

Shell scripts under local/bin are validated with Bats. Run yarn test to execute every test file. Bats is installed as a development dependency, so run yarn install first if needed.