{"id":16895765,"url":"https://github.com/ytti/koti","last_synced_at":"2026-04-18T06:02:26.976Z","repository":{"id":67967295,"uuid":"50300564","full_name":"ytti/koti","owner":"ytti","description":"dotfile manager","archived":false,"fork":false,"pushed_at":"2016-02-01T11:56:17.000Z","size":186,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-25T10:44:03.712Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Crystal","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ytti.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-01-24T18:11:13.000Z","updated_at":"2016-01-24T18:12:47.000Z","dependencies_parsed_at":"2023-04-24T04:43:14.350Z","dependency_job_id":null,"html_url":"https://github.com/ytti/koti","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ytti%2Fkoti","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ytti%2Fkoti/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ytti%2Fkoti/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ytti%2Fkoti/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ytti","download_url":"https://codeload.github.com/ytti/koti/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244592018,"owners_count":20477833,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T17:25:59.354Z","updated_at":"2026-04-18T06:02:21.944Z","avatar_url":"https://github.com/ytti.png","language":"Crystal","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Koti #\nKoti is simple hack to fetch my dotfiles from github and create symlinks for them.\n\n# Typical directory stucture #\n```\n[ytti@lintukoto ~/.koti]% find .|grep -v .git\n.\n./composite\n./composite/mutt\n./composite/mutt/main\n./composite/zsh\n./composite/zsh/main\n./composite/zsh/poop\n./repository\n./repository/main\n./repository/main/app\n./repository/main/app/zsh\n./repository/main/app/zsh/config.yaml\n./repository/main/app/zsh/host\n./repository/main/app/zsh/host/lintukoto\n./repository/main/app/zsh/host/lintukoto/lintukoto\n./repository/main/app/zsh/host/lintukoto/lintukoto2\n./repository/main/app/zsh/host/muu\n./repository/main/app/zsh/host/muu/ei\n./repository/main/app/zsh/main\n./repository/main/app/zsh/main/main1\n./repository/main/app/zsh/main/main2\n./repository/main/app/zsh/os\n./repository/main/app/zsh/os/linux\n./repository/main/app/zsh/os/linux/ei_tätä\n./repository/main/app/zsh/os/osx\n./repository/main/app/zsh/os/osx/jee\n./repository/main/app/zsh/os/osx/moi\n./repository/main/koti.yaml\n./repository/main/LICENSE\n./repository/muttpaske\n./repository/muttpaske/app\n./repository/muttpaske/app/mutt\n./repository/muttpaske/app/mutt/config.yaml\n./repository/muttpaske/app/mutt/main\n./repository/muttpaske/app/mutt/main/moi.rc\n[ytti@lintukoto ~/.koti]%\n```\n\nrepository 'main' is something you must have, other repositories are optional. 'main' repo should contain 'koti.yaml' file and 'app' directory with subdirectory per managed application.\n\n* Application's main config is under app/name/main/ files, as many files as you wish.\n* ```app/name/os/OSNAME/files``` are included only if operating system (uname) is osname\n* ```app/nae/host/OSNAME/files``` are included only if hostname (uname) is hostname\n* same structure can be inside ```app/name/something```, this is used if app needs \u003e1 configuration file\n\n# koti.yaml #\n```\n[ytti@lintukoto ~/.koti/repository/main]% cat koti.yaml\n---\nrepository:\n  \"main\": \"git@github.com:ytti/dot.git\"\n  \"muttpaske\": \"/Users/ytti/tmp/repo2\"\n[ytti@lintukoto ~/.koti/repository/main]%\n```\n\nSo far it only iterates all repos you have\n\n# app config #\n```\n[ytti@lintukoto ~/.koti/repository/main/app/zsh]% cat config.yaml\n---\nfiles:\n  main: ~/.zshrc_main\n  poop: ~/.zshrc_poop\n[ytti@lintukoto ~/.koti/repository/main/app/zsh]%\n```\n\n* ```main``` is compiled from the app root, i.e. ```app/zsh```\n* ```poop``` is compiled from the app root+poop, i.e. ```app/zsh/poop```\n\n\n# example #\n```\n[ytti@lintukoto ~]% ./koti\nkoti not installed, try 'koti --install git@github.com:user/repo'\n[ytti@lintukoto ~]% ls -lad .koti\nls: .koti: No such file or directory\n[1 ytti@lintukoto ~]% ./koti --install git@github.com:ytti/dot\nInstalling from git@github.com:ytti/dot... done\nUpdating repo main... ok\nUpdating repo muttpaske... ok\nBuilding zsh config main from main... done\nBuilding zsh config poop from main... done\nBuilding mutt config main from muttpaske... done\nLinking /Users/ytti/.koti/composite/zsh/main to /Users/ytti/.zshrc_main\nLinking /Users/ytti/.koti/composite/zsh/poop to /Users/ytti/.zshrc_poop\nLinking /Users/ytti/.koti/composite/mutt/main to /Users/ytti/.muttrc\n[ytti@lintukoto ~]% ./koti\nUpdating repo main... ok\nUpdating repo muttpaske... ok\nBuilding zsh config main from main... done\nBuilding zsh config poop from main... done\nBuilding mutt config main from muttpaske... done\nLinking /Users/ytti/.koti/composite/zsh/main to /Users/ytti/.zshrc_main\nLinking /Users/ytti/.koti/composite/zsh/poop to /Users/ytti/.zshrc_poop\nLinking /Users/ytti/.koti/composite/mutt/main to /Users/ytti/.muttrc\n[ytti@lintukoto ~]%\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fytti%2Fkoti","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fytti%2Fkoti","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fytti%2Fkoti/lists"}