These are my dotfiles. There are many like 'em, but these are mine.
  • Shell 77.3%
  • Vim Script 11.6%
  • Lua 5.6%
  • Perl 2.6%
  • Python 2.5%
  • Other 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
renovate[bot] ad43be6181
chore(deps): update dependency difftastic (0.70.0 → 0.71.0) (#716)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-26 03:11:29 +00:00
.claude refactor: drop the vendored fzf and iTerm2 files 2026-09-24 21:58:20 +03:00
.github refactor: drop the vendored fzf and iTerm2 files 2026-09-24 21:58:20 +03:00
.sonarlint feat: switch to biome, apply formatting, shellcheck (#227) 2025-12-17 16:03:29 +02:00
base fix(shell): resolve the open SonarCloud code smells 2026-07-28 15:03:36 +02:00
config chore(deps): update dependency difftastic (0.70.0 → 0.71.0) (#716) 2026-09-26 03:11:29 +00:00
docs refactor: drop the vendored fzf and iTerm2 files 2026-09-24 21:58:20 +03:00
hosts chore(exports): drop variables nothing reads 2026-09-24 22:04:14 +03:00
local refactor: drop the vendored fzf and iTerm2 files 2026-09-24 21:58:20 +03:00
scripts fix(python): target py312 so scripts parse on the CI interpreter 2026-09-24 22:35:50 +02:00
secrets chore: more cleanup, linting and fixes 2024-09-19 12:40:16 +03:00
ssh chore(ssh): turingpi ips 2026-09-07 21:05:28 +03:00
tests fix(tests): make the suite pass from the commit hook 2026-09-24 22:04:06 +02:00
tools refactor: remove dotbot-brew, dotbot-pip submodules and pipx 2026-02-05 22:07:03 +02:00
.actrc feat(github): Update changelog workflow and config 2023-05-22 17:52:43 +03:00
.bandit fix(lint): pass bandit an explicit --ini 2026-09-24 21:51:54 +03:00
.browserslistrc feat: prettier-plugin-sh + tweaks and codefixes 2024-07-16 23:00:36 +03:00
.codacy.yml refactor: drop the vendored fzf and iTerm2 files 2026-09-24 21:58:20 +03:00
.commitlintrc.json feat(lint): added my linting configs 2023-09-27 14:25:53 +03:00
.ecrc feat(theme): orchestrator (apply/watcher/handlers.d) replaces tmux-coupled chain (#363) 2026-04-27 23:24:30 +03:00
.editorconfig feat(udev): add hwdb rule to fix UHK 60 v2 ISO key (#343) 2026-04-12 23:07:45 +03:00
.editorconfig-checker.json refactor: drop the vendored fzf and iTerm2 files 2026-09-24 21:58:20 +03:00
.exclusion-baseline.json refactor: drop the vendored fzf and iTerm2 files 2026-09-24 21:58:20 +03:00
.gitattributes chore(config): remove the act, husky and amethyst configs 2026-09-24 22:04:07 +03:00
.gitignore refactor: drop the vendored fzf and iTerm2 files 2026-09-24 21:58:20 +03:00
.gitmodules feat(tmux): migrate plugins from git submodules to TPM (#335) 2026-04-06 23:38:23 +03:00
.grype.yaml chore(security): scope grype scans to authored content 2026-07-11 12:40:43 +02:00
.ignore feat(tmux): migrate plugins from git submodules to TPM (#335) 2026-04-06 23:38:23 +03:00
.luarc.json chore(nvim): expand lua_ls globals for hammerspoon and mini 2026-04-17 21:31:01 +03:00
.markdownlint.json chore: onboard repository to Copilot cloud agent (#355) 2026-04-25 18:19:11 +03:00
.markdownlintignore chore(gitignore): ignore local CodeQL run artifacts 2026-09-24 18:01:46 +02:00
.mega-linter.yml refactor: drop the vendored fzf and iTerm2 files 2026-09-24 21:58:20 +03:00
.mise.toml chore(deps): update dependency editorconfig-checker (4.0.1 → 4.0.2) (#712) 2026-09-26 03:10:53 +00:00
.pre-commit-config.yaml fix(tests): make the suite pass from the commit hook 2026-09-24 22:04:06 +02:00
.prettierignore refactor: drop the vendored fzf and iTerm2 files 2026-09-24 21:58:20 +03:00
.prettierrc.json fix(lint): fix all sonarcloud detected issues (#279) 2026-02-07 19:01:02 +02:00
.shellcheckrc fix(dfm): asdf plugin-install, docs translations 2024-12-30 11:26:54 +02:00
.sonarcloud.properties refactor: drop the vendored fzf and iTerm2 files 2026-09-24 21:58:20 +03:00
.yamlignore refactor: drop the vendored fzf and iTerm2 files 2026-09-24 21:58:20 +03:00
.yamllint.yml chore(tooling): use yarn for linting scripts (#149) 2025-08-15 09:06:22 +03:00
.yarnrc.yml fix: close audit findings across security, CI, and the hook chain (#626) 2026-08-19 12:54:22 +03:00
add-submodules.sh feat(tmux): migrate plugins from git submodules to TPM (#335) 2026-04-06 23:38:23 +03:00
biome.json refactor: drop the vendored fzf and iTerm2 files 2026-09-24 21:58:20 +03:00
CLAUDE.md refactor: drop the vendored fzf and iTerm2 files 2026-09-24 21:58:20 +03:00
cspell.config.yaml feat: switch to biome, apply formatting, shellcheck (#227) 2025-12-17 16:03:29 +02:00
dotbot-links.yaml feat(herdr): link the portable config, install plugins per machine 2026-09-24 18:02:31 +02:00
install feat(install): run host before.d/after.d hook scripts around install 2026-07-17 21:09:43 +02:00
install.conf.yaml fix(install): enforce declared modes on every run 2026-08-25 19:16:59 +02:00
LICENSE docs(notice): update third-party licensing 2026-09-24 22:09:50 +03:00
NOTICE docs(notice): update third-party licensing 2026-09-24 22:09:50 +03:00
package.json fix(lint): pass bandit an explicit --ini 2026-09-24 21:51:54 +03:00
phpcs.xml Chore(lint): Change name for Codacy 2023-05-08 13:24:47 +03:00
pyproject.toml fix(python): target py312 so scripts parse on the CI interpreter 2026-09-24 22:35:50 +02:00
README.md feat(dfm): generalize dfm docs to list and render any docs/*.md 2026-07-03 19:09:33 +03:00
stylua.toml feat(nvim): reworked lsp, theme, cleanup 2025-04-19 04:04:26 +03:00
test-all.sh chore(mise): move npm-installed tooling from package.json to mise 2026-05-25 13:26:53 +03:00
uv.lock fix(deps): track uv.lock 2026-06-08 17:38:59 +03:00
yarn.lock chore(deps): remove unused typescript and @types/node 2026-07-11 12:27:31 +02:00

.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. git submodule update --init --recursive
  3. ./install
  4. ???
  5. Profit

Updates

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

To refresh symlinks only (faster, skips package installs and provisioning):

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

The looks

tmux with nvim, light theme

tmux with nvim, dark theme

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 man
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

dfm docs lists every file under docs/ with its first header as the description; dfm docs <file> renders one (via glow, falling back to bat, then cat). dfm helpers docs-* regenerates the generated docs.

dfm docs                     # list all docs
dfm docs aliases             # show the shell aliases doc
dfm docs tmux-keybindings    # show tmux keybindings
dfm docs mise                # show the mise tool guide

dfm helpers docs-all      # regenerate every doc
dfm helpers docs-aliases  # regenerate docs/aliases.md
dfm helpers docs-tmux     # tmux keybindings only
dfm helpers docs-nvim     # nvim keybindings only
dfm helpers docs-wezterm  # wezterm keybindings only

The docs/ folder also contains other reference files (folder layout, command catalogue) that are maintained directly rather than via dfm.

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.