{"id":28759705,"url":"https://github.com/cemkeylan/pm","last_synced_at":"2025-06-17T05:08:02.863Z","repository":{"id":215865110,"uuid":"246359012","full_name":"cemkeylan/pm","owner":"cemkeylan","description":"barebones password manager","archived":false,"fork":false,"pushed_at":"2020-03-10T20:26:45.000Z","size":5,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-01-08T04:21:11.749Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cemkeylan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-03-10T17:00:27.000Z","updated_at":"2020-03-24T15:29:40.000Z","dependencies_parsed_at":"2024-01-07T04:05:33.136Z","dependency_job_id":"3ec1cda2-14d0-4506-9135-db2c8b44f5bd","html_url":"https://github.com/cemkeylan/pm","commit_stats":null,"previous_names":["cemkeylan/pm"],"tags_count":0,"template":null,"template_full_name":null,"purl":"pkg:github/cemkeylan/pm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cemkeylan%2Fpm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cemkeylan%2Fpm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cemkeylan%2Fpm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cemkeylan%2Fpm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cemkeylan","download_url":"https://codeload.github.com/cemkeylan/pm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cemkeylan%2Fpm/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260294461,"owners_count":22987624,"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":"2025-06-17T05:08:02.424Z","updated_at":"2025-06-17T05:08:02.847Z","avatar_url":"https://github.com/cemkeylan.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Password Manager\n\nBarebones password manager with absolutely no fancy features. By\nthat I mean,\n\n- No password generation\n- No git integration\n- No questions asked\n- No grepping/finding passwords\n- No clipboard support\n- No tree view\n- Does not ask for password input (reads from stdin)\n- Does not check for 'sneaky paths?'\n\nSupports adding/deleting/listing/showing passwords. I don't\nintend on implementing any more features. You can wrap this\nscript with something other to make use of it. See the contrib\ndirectory for that.\n\nCurrently less than 35 SLOC. It's almost 20 times smaller\nthan `pass` which has a little less than 600 SLOC.\n\n\nTo install run, as root if necessary\n\n    make install\n\nYou really do think that asking for password for twice blah\nblah is a really important feature? Okay, then add a function\nto your shellrc/profile like this.\n\n    pmask() {\n        [ \"$1\" ] || return 1\n        printf 'Enter your password: '\n        read pass\n        printf 'Enter your password again: '\n        read pass2\n        [ \"$pass\" = \"$pass2\" ] \u0026\u0026 {\n            printf '%s' \"$pass\" | pm a \"$1\" \u0026\u0026 return 0\n        }\n        printf \"Passwords don't match\\n\"\n        return 1\n    }\n\nYou want to copy to clipboard? That's easy! You just need\nto do a `pm s passname | xclip -sel c`. You can still make\nit a function by doing this\n\n    copypass() {\n        [ \"$1\" ] || return 1\n        pm s \"$1\" | xclip -sel c\n    }\n\nThe whole rationale is that you can already do that with simple\ncommands. Why complicate (and possibly break) things by introducing\nthem into a single script? If you want some function that is\na must for you, implement it yourself with some script or\na shell function. This way, it works just as you intended it. Or use\nhelper functions that are located in contrib.\n\nYou can install contrib scripts by running\n\n    make -C contrib install\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcemkeylan%2Fpm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcemkeylan%2Fpm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcemkeylan%2Fpm/lists"}