Skip to content

Commit ee796cd

Browse files
committed
Add commands
1 parent 79768b6 commit ee796cd

5 files changed

Lines changed: 481 additions & 0 deletions

File tree

assets/commands/fungible.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# TAGLINE
2+
3+
Local-first personal finance app in the terminal
4+
5+
# TLDR
6+
7+
**Launch** the main app
8+
9+
```fungible```
10+
11+
**Run the first-time** setup wizard
12+
13+
```fungible --setup```
14+
15+
**Start a demo instance** pre-loaded with fake data
16+
17+
```fungible --demo```
18+
19+
**Install** via Homebrew
20+
21+
```brew install fungible```
22+
23+
**Print the version**
24+
25+
```fungible --version```
26+
27+
# SYNOPSIS
28+
29+
**fungible** [_--setup_ | _--demo_ | _--version_ | _--help_]
30+
31+
# DESCRIPTION
32+
33+
**fungible** is a keyboard-driven personal finance application that runs entirely inside the terminal. It manages bank accounts, transactions, budgets, categories, and net-worth tracking from a single TUI, with all data stored locally under **~/.fungible/**.
34+
35+
Accounts are populated either by linking real institutions through **Plaid** (transactions refresh roughly every 15 minutes) or by importing CSV statements. Manual asset entries cover holdings that have no bank feed, such as property or vehicles. Transactions can be categorised manually or via substring and regular-expression rules, and arbitrary tags can be applied across accounts for cross-cutting analysis.
36+
37+
The reporting views break spending down by category, by flexibility tier (fixed / flexible / discretionary), and over time, and surface higher-level metrics such as net worth, cash runway, projected FIRE number, and estimated years to retirement under adjustable assumptions.
38+
39+
# PARAMETERS
40+
41+
**--setup**
42+
> Run the first-time configuration wizard: pick a base currency, set up the encryption key, and optionally link a Plaid item.
43+
44+
**--demo**
45+
> Launch a pre-populated demo instance with fake accounts, transactions, categories, tags, and rules. The demo profile is isolated from real data.
46+
47+
**--version**
48+
> Print the **fungible** version and exit.
49+
50+
**--help**
51+
> Show CLI help.
52+
53+
# CONFIGURATION
54+
55+
All state lives under **~/.fungible/**:
56+
57+
**~/.fungible/db.sqlite**
58+
> SQLite database with accounts, transactions, categories, rules, and tags.
59+
60+
**~/.fungible/key**
61+
> Encryption key protecting Plaid access tokens. Back this up: losing it requires re-linking every Plaid account.
62+
63+
**~/.fungible/config.json**
64+
> User preferences (default views, tier definitions, currency, etc.).
65+
66+
# CAVEATS
67+
68+
**Plaid** integration requires a Plaid developer account and an API key configured during **--setup**; without it, only CSV import and manual asset tracking are available.
69+
70+
The encryption key in **~/.fungible/key** is the only thing that protects stored Plaid access tokens. Treat it as a secret: include it in encrypted backups, never commit it to a repository.
71+
72+
**fungible** is a single-user, single-machine app. It does not sync between devices, although the SQLite database can be copied if the key file is copied alongside it.
73+
74+
# HISTORY
75+
76+
**fungible** is an MIT-licensed project published by **tomfunk** on GitHub in **2026**, written in **TypeScript** on **Node.js 22+**. It bundles a TUI, an embedded API server, and an MCP (Model Context Protocol) server so AI assistants can read and categorise transactions on request.
77+
78+
# SEE ALSO
79+
80+
[ledger](/man/ledger)(1), [hledger](/man/hledger)(1), [beancount](/man/beancount)(1), [gnucash-cli](/man/gnucash-cli)(1)

assets/commands/index.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2341,6 +2341,7 @@ fuck.md
23412341
fulcio.md
23422342
func.md
23432343
function.md
2344+
fungible.md
23442345
funzip.md
23452346
fuser.md
23462347
fusermount.md
@@ -3731,6 +3732,7 @@ kimi.md
37313732
kind.md
37323733
kinfocenter.md
37333734
kinit.md
3735+
kioclient.md
37343736
kismet.md
37353737
kite.md
37363738
kiterunner-brute.md
@@ -3751,6 +3753,7 @@ knife.md
37513753
knock.md
37523754
knockd.md
37533755
knotc.md
3756+
ko.md
37543757
koboldcpp.md
37553758
kodi-send.md
37563759
koji-build.md
@@ -6661,6 +6664,7 @@ samba.md
66616664
samhain.md
66626665
sample.md
66636666
sampler.md
6667+
samply.md
66646668
samtools.md
66656669
sane-find-scanner.md
66666670
saned.md

assets/commands/kioclient.md

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# TAGLINE
2+
3+
KDE command-line client for KIO network-transparent file operations
4+
5+
# TLDR
6+
7+
**Open a URL** with its default KDE handler
8+
9+
```kioclient exec [url]```
10+
11+
**Print the contents** of a remote file to stdout
12+
13+
```kioclient cat [sftp://user@host/path/to/file]```
14+
15+
**List the contents** of a remote directory
16+
17+
```kioclient ls [smb://server/share]```
18+
19+
**Copy one or more files** via KIO
20+
21+
```kioclient cp [path/to/source1] [path/to/source2] [path/to/destination]```
22+
23+
**Move a file** via KIO
24+
25+
```kioclient mv [path/to/source] [path/to/destination]```
26+
27+
**Remove a file** via KIO
28+
29+
```kioclient rm [url]```
30+
31+
**Create a new directory** via KIO
32+
33+
```kioclient mkdir [url]```
34+
35+
**Open the KDE Properties dialog** for a URL
36+
37+
```kioclient5 openProperties [url]```
38+
39+
# SYNOPSIS
40+
41+
**kioclient** _command_ [_arguments_] [_options_]
42+
43+
**kioclient5** _command_ [_arguments_] [_options_]
44+
45+
**kioclient6** _command_ [_arguments_] [_options_]
46+
47+
# COMMANDS
48+
49+
**exec** _url_ [_mimetype_]
50+
> Open _url_ with the default handler registered for its MIME type. If _mimetype_ is given, that handler is used instead of the detected type.
51+
52+
**cat** _url_
53+
> Write the contents of the file at _url_ to standard output.
54+
55+
**ls** _url_
56+
> List entries in the directory at _url_.
57+
58+
**cp** _source_ ... _destination_
59+
> Copy one or more sources to _destination_ via KIO. Sources and destination may be any supported URL scheme.
60+
61+
**mv** _source_ ... _destination_
62+
> Move sources to _destination_ via KIO.
63+
64+
**rm** _url_
65+
> Delete the file or directory at _url_ via KIO.
66+
67+
**mkdir** _url_
68+
> Create a new directory at _url_.
69+
70+
**download** [_url_]
71+
> Copy _url_ to a local file selected through a save dialog. If no URL is given, a file picker opens.
72+
73+
**openProperties** _url_
74+
> Display the KDE Properties dialog for _url_.
75+
76+
# PARAMETERS
77+
78+
**--commands**
79+
> Print the list of available commands.
80+
81+
**--overwrite**
82+
> Overwrite destination files when copying or moving.
83+
84+
**--interactive**
85+
> Use interactive dialogs (default for GUI usage).
86+
87+
**--noninteractive**
88+
> Suppress dialogs; useful for scripts.
89+
90+
**--platform** _name_
91+
> Choose the Qt Platform Abstraction plugin (e.g. _xcb_, _wayland_, _offscreen_).
92+
93+
**--help**
94+
> Print help and exit.
95+
96+
**--version**
97+
> Print the program version.
98+
99+
# DESCRIPTION
100+
101+
**kioclient** is a thin command-line front-end to the **KIO** framework that powers file access throughout KDE (Dolphin, Konqueror, Gwenview, and many others). It lets shell scripts and users invoke the same network-transparent virtual filesystem that KDE applications use, treating remote shares, archives, and even the trash bin as if they were local paths.
102+
103+
Any URL scheme implemented by an installed KIO worker can be used: **file:** for local paths, **sftp:** and **fish:** for SSH-based access, **smb:** for Windows shares, **ftp:** and **webdav:** for legacy network shares, **trash:** for the recycle bin, **tar:** and **zip:** for archive contents, and protocol-specific schemes such as **man:**, **info:**, **mtp:**, **gdrive:**, and many more. The available list depends on which **kio-extras** plugins are installed.
104+
105+
In addition to plain file operations (**cp**, **mv**, **rm**, **mkdir**, **ls**, **cat**, **download**), kioclient can launch the default GUI handler for a resource through **exec**, which is the easiest way to script "open this URL in the right KDE app". The **openProperties** command displays the same Properties dialog that Dolphin shows on right-click.
106+
107+
On modern distributions, **kioclient** is split into a Qt5 binary (**kioclient5**) and a Qt6 binary (**kioclient6**). The unversioned **kioclient** symlink, where present, points at whichever build the distribution treats as default.
108+
109+
# CAVEATS
110+
111+
**kioclient** requires a running D-Bus session and the appropriate Qt platform plugin. On a headless server, set _QT_QPA_PLATFORM=offscreen_ or pass **--platform offscreen**, otherwise the command may fail to connect to the display.
112+
113+
Authentication for remote protocols is delegated to **kwalletd** / **kwallet6**. The first time a credential is needed, a graphical password dialog is shown; in non-interactive shells the operation will hang or fail unless the credential is already cached.
114+
115+
The set of usable URL schemes depends on installed KIO worker packages. A scheme that works in Dolphin but not from a fresh **kioclient** invocation usually means the worker plugin is installed but its D-Bus session has not been started.
116+
117+
# HISTORY
118+
119+
**kioclient** has shipped with KDE since the **KDE 3** era as a way for shell scripts and other applications to drive the **KIO** framework that Konqueror introduced. It was rewritten for **KDE 4** alongside KIO itself and renamed to **kioclient4** to coexist with the KDE 3 version. The Qt5-based **kioclient5** appeared with **KDE Frameworks 5** in **2014**, and **kioclient6** followed the **KDE Frameworks 6** release in **2024**.
120+
121+
# SEE ALSO
122+
123+
[dolphin](/man/dolphin)(1), [konqueror](/man/konqueror)(1), [kdialog](/man/kdialog)(1), [xdg-open](/man/xdg-open)(1), [gio](/man/gio)(1)

assets/commands/ko.md

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
# TAGLINE
2+
3+
Build and deploy Go container images without a Dockerfile
4+
5+
# TLDR
6+
7+
**Build and publish** a container image from a Go import path to _$KO_DOCKER_REPO_
8+
9+
```ko build [./cmd/app]```
10+
11+
**Build into the local Docker daemon** instead of pushing
12+
13+
```ko build --local [./cmd/app]```
14+
15+
**Build a multi-platform image**
16+
17+
```ko build --platform=linux/amd64,linux/arm64 [./cmd/app]```
18+
19+
**Resolve Kubernetes manifests**, replacing _ko://_ image refs with built digests
20+
21+
```ko resolve -f [path/to/manifest.yaml]```
22+
23+
**Build, push, and apply** a manifest to the current cluster
24+
25+
```ko apply -f [path/to/manifest.yaml]```
26+
27+
**Run** a Go package as an ephemeral pod in the cluster
28+
29+
```ko run [./cmd/app]```
30+
31+
**Log in** to a container registry
32+
33+
```ko login [registry.example.com] -u [username] -p [password]```
34+
35+
**Print the version**
36+
37+
```ko version```
38+
39+
# SYNOPSIS
40+
41+
**ko** _command_ [_flags_] [_import-path_]
42+
43+
# COMMANDS
44+
45+
**ko build** [_import-path_ ...]
46+
> Build OCI images for one or more Go _main_ packages and push them to **$KO_DOCKER_REPO**. Aliases: **publish**.
47+
48+
**ko resolve** **-f** _file_
49+
> Read Kubernetes YAML, build every **ko://** image reference, push it, and print the manifest with each reference rewritten to its image digest.
50+
51+
**ko apply** **-f** _file_
52+
> Like **resolve**, then pipe the rewritten manifest into **kubectl apply**.
53+
54+
**ko create** **-f** _file_
55+
> Like **resolve**, then pipe into **kubectl create**.
56+
57+
**ko delete** **-f** _file_
58+
> Delete resources defined in the manifest from the cluster.
59+
60+
**ko run** _import-path_
61+
> Build the binary, push the image, and run it as a Pod in the cluster.
62+
63+
**ko login** _registry_
64+
> Authenticate to a container registry; credentials are stored in the standard Docker config file.
65+
66+
**ko deps** _import-path_
67+
> Print the Go module dependency tree that would be baked into the image.
68+
69+
**ko version**
70+
> Print client version.
71+
72+
# PARAMETERS
73+
74+
**-B**, **--base-import-paths**
75+
> Tag images with only the final path component (e.g. _app_).
76+
77+
**-P**, **--preserve-import-paths**
78+
> Tag images with the full import path.
79+
80+
**--bare**
81+
> Use _$KO_DOCKER_REPO_ as the image name verbatim, with no suffix.
82+
83+
**--platform** _list_
84+
> Comma-separated platforms (e.g. _linux/amd64,linux/arm64,linux/arm/v7_). Use _all_ for every platform the base image supports.
85+
86+
**-t**, **--tags** _list_
87+
> Comma-separated tags applied to the published image (default: _latest_).
88+
89+
**-L**, **--local**
90+
> Load the built image into the local Docker daemon instead of pushing.
91+
92+
**--image-refs** _file_
93+
> Write the published image references to _file_, one per line.
94+
95+
**--sbom** _format_
96+
> SBOM format to embed: _spdx_ (default), _cyclonedx_, _go.version-m_, or _none_.
97+
98+
**--push** _bool_
99+
> When _false_, build without pushing. Useful with **--tarball**.
100+
101+
**--tarball** _file_
102+
> Write the image to a tarball loadable by **docker load**.
103+
104+
**--kubeconfig** _file_
105+
> Path to a kubeconfig used by **apply**, **create**, **run**, **delete**.
106+
107+
**--selector** _label=value_
108+
> Apply only to resources matching the label selector.
109+
110+
# CONFIGURATION
111+
112+
**ko** reads a per-project **.ko.yaml** at the repository root. Common keys:
113+
114+
**defaultBaseImage**: _registry/image:tag_
115+
> Distroless image used as the base layer (default: _cgr.dev/chainguard/static_).
116+
117+
**baseImageOverrides**: _map_
118+
> Per-import-path base images.
119+
120+
**builds**: _list_
121+
> Per-import-path build settings (env, flags, ldflags, main, dir).
122+
123+
**defaultPlatforms**: _list_
124+
> Default value for **--platform**.
125+
126+
**ko** also honors these environment variables:
127+
128+
**KO_DOCKER_REPO**
129+
> Target registry/repo. Set to _ko.local_ to write to the local Docker daemon, or _kind.local_ to load into a Kind cluster.
130+
131+
**KO_DEFAULTBASEIMAGE**
132+
> Overrides _defaultBaseImage_ from **.ko.yaml**.
133+
134+
**KOCACHE**
135+
> Directory used to cache built layers; speeds up incremental builds.
136+
137+
**KO_CONFIG_PATH**
138+
> Path to **.ko.yaml** when it is not at the repo root.
139+
140+
# DESCRIPTION
141+
142+
**ko** is a container image builder dedicated to Go. It compiles a Go _main_ package with the local **go** toolchain, lays the resulting static binary on top of a small distroless base image, and produces an OCI image, all without spawning **docker** or executing a Dockerfile. Because the build is just **go build**, cross-compilation, reproducible builds, and Go module caching all work as they do outside of containers.
143+
144+
A typical workflow stores a fragment of YAML such as _image: ko://github.com/me/app/cmd/server_ in a Kubernetes manifest. **ko resolve** reads the manifest, runs **ko build** for every such reference, pushes the resulting images to **$KO_DOCKER_REPO**, and emits a new manifest where each **ko://** reference has been rewritten to an immutable digest. **ko apply** does the same and pipes the output to **kubectl apply**, giving GitOps-style deployment in a single command.
145+
146+
Images include an SBOM by default (SPDX) and are reproducible across machines because the Go binary, base image digest, and entrypoint are the only inputs. Multi-platform images are built in parallel and assembled into an OCI image index.
147+
148+
# CAVEATS
149+
150+
**ko** only ships Go binaries; cgo, system packages, and arbitrary RUN steps are not supported. Projects that need glibc, system tools, or a custom base layer must pick an alternate distroless or **cgr.dev/chainguard/\*** base via _defaultBaseImage_, or use a different builder.
151+
152+
The **--local** flag requires a running Docker daemon; without it, **ko** talks directly to the registry and never touches Docker.
153+
154+
# HISTORY
155+
156+
**ko** was created at **Google** in **2018** by **Jason Hall**, **Matt Moore**, and others on the **Knative** team to publish their Go services without writing Dockerfiles. It was donated to the **ko-build** GitHub organization in **2021** and accepted into the **CNCF Sandbox** in **2022**.
157+
158+
# SEE ALSO
159+
160+
[docker](/man/docker)(1), [buildah](/man/buildah)(1), [crane](/man/crane)(1), [kubectl](/man/kubectl)(1), [skaffold](/man/skaffold)(1)

0 commit comments

Comments
 (0)