features
- organize with groups - create folders to organize your configs (hyprland/, nvim/, etc)
- collapsible groups - expand/collapse groups to keep your view clean
- search - real-time fuzzy search through all your configs
- multiple sort modes - sort by name, date modified, or file size
- open in $EDITOR - edit files with one keypress
- elevated editing -
:suopens the selected file with root via polkit - remote profiles -
:device <host>mounts and browses another machine's tracked configs over sshfs - live preview pane - toggle a side-by-side file preview with
p - built-in themes - catppuccin, dracula, gruvbox, nord, tokyo-night, one-dark, switch with
:theme - remembers last file - quick access to recently edited configs
- built-in file picker - navigate with vim keys, no external dependencies
- rollback - automatic compressed backups before every edit, restore with
:rb - custom colors - set colors via config.json, supports hex and named colors
- vim-style keybinds - j/k navigation, command mode
- git integration - sync your dotfiles to a git repo with
:git, commit and push without leaving confy - streamer mode - hide paths and timestamps with
:streamerso nothing leaks on stream - lightweight and fast - single native binary, zero runtime dependencies
installation
from AUR (arch linux)
from nixpkgs (unstable)
confy is in nixpkgs under the name confy-tui.
from cargo
build from source
# optionally install the man page
dependencies
none required for core functionality.
two commands need optional system tools:
:device(remote profiles) needssshfsinstalled:su(elevated editing) needspkexec(polkit), and for use with:device,user_allow_otherset in/etc/fuse.confon your local machine:git commit/:git pushneedgitinstalled
confy will tell you clearly if any of these are missing rather than crashing.
usage
just run confy in your terminal.
navigation
j/korarrow keys- move up/downenter- open file in $EDITOR (or toggle group)space- toggle group expand/collapsep- toggle live preview pane/- search mode:- command modeq- quit
commands
file management
:ac- add config to ungrouped:ac <group>- add config to specific group:rm- remove selected file from tracking (does not delete the file):l- open last edited file:rb- rollback selected file to last backup:su- open selected file with root via pkexec (needs polkit)
remote profiles
:device <host>or:ssh <host>- mount and browse a remote host's tracked configs over sshfs (accepts an~/.ssh/configalias or a literaluser@host):device local- switch back to your local configs:device(no args) - show the currently active device, if any
git integration
:git sync- copy all tracked configs into your dotfiles repo (organized by group):git commit- sync + prompt for a commit message:git push- sync + commit + push to remote:git dir- change the dotfiles repo path interactively:git dir <path>- set the dotfiles repo path directly:git reset- reset dotfiles repo path to~/dotfiles-git:bl- toggle git blacklist on the selected file or group (blacklisted items are skipped by:git sync):bouncer- open a menu to bulk-manage the git blacklist (space to toggle, Z to confirm)
appearance
:theme <name>- switch color theme (catppuccin,dracula,gruvbox,nord,tokyo-night,one-dark):theme(no args) - list available themes:streamer- toggle streamer mode (hides paths and timestamps)
group management
:ag <group>- add new group:mg <group>- move selected file to group:rg <group>- remove group (moves files to ungrouped)
sorting & filtering
:sort name- sort alphabetically:sort date- sort by last modified:sort size- sort by file size:reverse- toggle ascending/descending order/then type - search files and groups in real-time
configuration
:cd- change config directory (opens built-in file picker):cd <path>- set config directory directly:cd reset- reset to ~/.config:q- quit
rollback
confy automatically saves a compressed backup of any file to /tmp/<filename>.confbak before you open it for editing. if you make a mess of your config, select the file and run :rb to restore it.
rollback can be disabled in config.json:
"settings":
git integration
:git sync copies your tracked configs into ~/dotfiles-git (or wherever git_dir points), organized by group name. files in named groups go into a folder with the group's name. ungrouped files with a shared filename prefix (e.g. hyprland.conf and hyprlock.conf) get auto-sorted into a folder named after that prefix.
:git commit and :git push sync first, then prompt for a commit message in the terminal. :git push requires at least one prior commit to exist. make your initial commit manually.
use :bl on any file or group to exclude it from syncing (useful for .env files or anything sensitive). :bouncer gives you a full menu to manage the blacklist in bulk.
git settings in config.json:
"git_dir": "~/dotfiles-git",
"git_blacklist": ,
"git_blacklist_groups": ,
"git_auto_push": false,
"git_auto_commit": false
themes
confy ships with six built-in themes: catppuccin (default), dracula, gruvbox, nord, tokyo-night, and one-dark. switch with:
:theme dracula
applies instantly and persists to config.json, no restart needed. run :theme with no arguments to list all available themes.
streamer mode
:streamer toggles streamer mode, which hides full file paths and timestamps. only filenames are shown. useful if you're on stream and don't want your username or directory structure visible. persists to config.json, or set it directly:
"settings":
preview pane
press p to toggle a live preview pane alongside your file list. it shows the first lines of the selected file, updating as you move the selection. works correctly on a mounted :device too. your preference persists across restarts.
remote profiles (:device)
:device <host> mounts a remote machine's entire filesystem over sshfs and switches confy's view to that host's tracked configs, letting you browse and edit them exactly like local files.
:device phluxjr # resolves an alias from ~/.ssh/config
:device phluxjr@exam.ple # or connect directly
:device local # switch back to your own configs
requires sshfs installed locally. if the remote host is running an older confy that predates config.json (i.e. still on tracked.json), confy will refuse to connect and ask you to update confy there first.
while on a device, the header shows [remote: <host>] so it's always clear you're not looking at your local files. edits, previews, sorting, and rollback all work through the mount.
elevated editing (:su)
select a file and run :su to open it with root via pkexec. works on local files and on files viewed through a mounted :device.
needs pkexec (polkit) installed. for :su to work while a device is mounted, your local machine also needs user_allow_other uncommented in /etc/fuse.conf. confy will tell you if it's missing.
search mode
press / to enter search mode, then start typing:
- filters both files and groups in real-time
- case-insensitive matching
enterto confirm,escto clear and show all files
groups
groups are purely organizational. your actual config files stay in their original locations. ungrouped always appears at the bottom of the list regardless of sort mode.
groups are collapsible, press space or enter on a group header to toggle.
configuration file
confy stores everything in ~/.config/confy/config.json. upgrading from an older version with tracked.json? confy migrates it automatically on first run.
full example config.json:
settings reference
| key | description | default |
|---|---|---|
rollback |
save a backup before every edit | true |
theme |
active color theme | "catppuccin" |
background_enable |
draw a solid background instead of terminal default | false |
background_color |
background color (hex) | "#1e1e2e" |
streamer_mode |
hide paths and timestamps in the file list | false |
streamer_hide_git |
also hide git-blacklisted files in streamer mode | true |
editor |
override $EDITOR (useful for .desktop launchers) |
null |
ssh_allow |
enable :device / sshfs integration |
true |
why confy?
tired of doing cd ~/.config/whatever a million times a day? same. confy keeps all your important configs in one list so you can jump to them instantly.
organize related configs into groups, search through everything, sort however you want, and open files in your editor with a single keypress. if you break something, roll it back. if you want your dotfiles in git, :git push and you're done.
simple, fast, does one thing well.
examples
# start confy
confy
# create some groups and add configs
:ag hyprland
:ac hyprland
# move a file between groups
:mg shell
# search for configs
/hypr
# sort by recently modified, newest first
:sort date
:reverse
# oops, broke your config
:rb
# switch theme
:theme tokyo-night
# toggle preview pane
p
# check on your server's configs
:device phluxjr
:su
:device local
# sync dotfiles to git
:git push
# going live? hide your paths
:streamer
tips
- set
export EDITOR=nvimin your shell rc, or use theeditorsetting in config.json - use groups to organize by application (hyprland/, nvim/, kitty/)
- use
:sort dateto quickly find recently edited configs - use
:blon.envfiles or anything sensitive before running:git sync - collapse groups you don't use often to keep the view clean
- missing files show up in red so you know when a config has moved