HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
c-blake
lc
Nim2020–2025
c-blake / lc

lc

A post-modern, "multi-dimensional", configurable, abbreviating, extensible ls/file lister in Nim

3Distinct people
18Mentions
0Explicit recommenders
70GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A post-modern, "multi-dimensional", configurable, abbreviating, extensible ls/file lister in Nim

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:03:16 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year18 dated mentions

Observed mentions: 2020-08-16 20:43:28 UTC to 2025-06-14 10:14:16 UTC.

02462020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20202021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20222023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 6 mentions; 0 submissions, 6 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2025

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC101
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC404
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC101
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC404
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC606
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC202

What Hacker News says

18 sources
Interesting project. You might check out Arcan (https://arcan-fe.com/) if you've never heard of it. (EDIT: I see author recently added a link: https://github.com/tattoy-org/tattoy/blob/main/website/conte... ) A couple of points related to contrast ratio management: - The Mynex answer here is very informative: https://stackoverflow.com/questions/596216/formula-to-determ... - The "limit/bound" on the contrast ratio has a "polarity" (a +- sense). At least for "text", in almost every font there are many more background pixels than foreground pixels. So, for example, your human eyes can tolerate a lower text cell fg-bg contrast with a dark background color for the text cell on an all-black background than they can for a dark foreground color on an all-black background. Part of this relates to "shared discrimination work" that the outside-t
Read the rest
he-text cell background pixels are doing. So, really "ratio" of just two things is somewhat of an oversimplification. - XTerm OSC 4 may have a very limited ability to probe the color palette. At least on `st` I can only see default foreground, background and cursor colors, not the full 16-color palette. This mostly just amplifies the point elsethread by @hnlmorg. - At least until more recent ssh's, default configs on Linux would pass through all "LC_*" environment variables. So, if you adjust your shell rc/configs to key off of, say, $LC_THEME having, e.g., "light" or "dark" in them, you can perhaps re-polarize everything with a much lower tech solution. I do this all the time as I like to run some terminals with a black background and some with a white background. (Paper white black & white displays were all the rage in the 90s, but these days "color hackers" seem to prefer dark backgrounds. I have theories as to why, but it's pretty off topic.) https://github.com/c-blake/lc configs have more fully fleshed out examples, and hey, you might also like that color-ls. (And I'm aware of the ancient & to my mind ugly 1980s ideas of "stuff everything into $TERM and parse it apart again". Security concerns may push us back that way.)
In Show HN: Tattoy – a text-based terminal compositor
Not to be confused with another lc, which is a highly configurable "multi-dimensional"[1] file lister focused on flexibility and configurability, written in Nim. https://github.com/c-blake/lc Key features: - Multi-level sorting by combinations of attributes like size, time, and file type, with user-defined precedence - Configurable file kind sorting order - Value-dependent coloring for file attributes such as timestamps, permissions, or sizes. - Abbreviations: Automatically shorten filenames, user/group names or symlink targets. - File type classification: Integrates libmagic for file type inspection. - Hyperlink support - Per-directory configs: custom behaviors for specific directories using local tweak files (.lc). - Lightweight (~900 lines of code) with only author's CLI library "cligen" and Nim's stdlib as dependencies. and more. [1]:
Read the rest
In lc: List files in categories (and columns) – from Coherent Unix clone
I notice prior HN comments of yours mention the physical design of the NeXT cube. I cannot say it will make you not hate software, but you still might appreciate that another alternative ls, https://github.com/c-blake/lc, both re-thinks/breaks more radically with ls-tradition and adapts well to something very similar to a terminal variant of the https://en.wikipedia.org/wiki/Miller_columns used in the NeXT file tree graphical browser/navigator via simple shell process substitution composition. E.g., a 3-level scenario on an 80-column looks like: paste <(lc -1m25 ../..) <(lc -1m25 ..) <(lc -1m25 .) Some shell script that uses $((COLUMNS)) arithmetic to do 2 or 4 or whatever terminal width is a pretty simple exercise for the reader and one might want to pipe to less.
In Show HN: I made an ls alternative for my personal use
If you run `dircolors --print-database|less` you will see that GNU ls only highlights/colors the path/filenames according to a simplistic scheme where a file can only resolve to one type even though on many terminals today "foreground overlays background overlays bold/italic/etc". (https://github.com/c-blake/lc#vector-typemulti-dimensionalit... has a more advanced idea.) This tool by triyanox -- just from the screen shot if you click through -- will also colorize permission masks and sizes, dates, user & group.
In Show HN: I made an ls alternative for my personal use
Take a look at lc (but not the terminal screenshots! ;)): https://github.com/c-blake/lc lc is a highly configurable "multi-dimensional"[1] file lister written in Nim focused on flexibility and configurability. Key features: - Multi-level sorting by combinations of attributes like size, time, and file type, with user-defined precedence - Configurable file kind sorting order - Value-dependent coloring for file attributes such as timestamps, permissions, or sizes. - Abbreviations: Automatically shorten filenames, user/group names or symlink targets. - File type classification: Integrates libmagic for file type inspection. - Hyperlink support - Per-directory configs: custom behaviors for specific directories using local tweak files (.lc). - Lightweight (~900 lines of code) with only author's CLI library "cligen" and Nim's stdlib as dependenc
Read the rest
In Show HN: I made an ls alternative for my personal use
https://github.com/c-blake/lc shows all files, including hidden files (starting with dot aka dot files) by default, suppressible in output with -xdot or a shell/internal alias to the same effect. It helps to start with a more extensible/less built-in idea of "file type". "odd permissions" are another type that might interest someone, for example, such as "setgid but not group-executable" or "writable but not readable" or etc. Yes, I know one can also use `find` or etc. for that, but there's no crime in there being >1 way to see things and, for some people, colors can make things really stand out - as can sort order which is another more color-blind possibility in `lc` as well as the simple filter-or-not of ls -a/-A.
In Show HN: I made an ls alternative for my personal use
This kind of thing should probably be generalized so that any new parameter can be seamlessly woven into your `ls-like` reports. https://github.com/c-blake/lc/blob/master/extensions/fe1 does `du` (like your example) as a f)ormat e)xtension, but you could use `ffprobe` to do the run-time in hours:minutes:seconds for media files (or maybe 0sec for non-media) or number of git commits or age of last VC commit as an extra timestamp or numerous other things.
In Exa Is Deprecated
It's also a whole other tool and in Nim to boot, but https://github.com/c-blake/lc allows you to group "dot-directories" before "dot-files" before "non-dot directories" before non-dot files. There might be enough other new functionality such as abbreviation or multi-attribute colorization schemes to motivate learning a new tool. E.g., neither "dot-ness" nor "directory-ness" in the above is hard-coded. They could be any other convenient elements of the typology / taxonomy.
In Exa Is Deprecated
https://github.com/c-blake/lc in Nim might interest someone interested in a latterday 'ls'. The screenshots should probably show underlined hard-links or italicized symlinks or other examples of "multi-file-attribute" -to- "multi-text-attribute" mapping. That kind of multi-ness seems generally neglected in this report generation space.
In Exa Is Deprecated
I don't know about all your other questions, and I realize your post was more about "why Rust?" rather than "why not Nim?", but that said the https://github.com/c-blake/cligen Nim CLI framework seems much lower effort / ceremony than even Rust's `argh` and is just about as old as `clap` (both cligen & clap started 8 years ago in 2015 - Rust argh is much newer). There are over 50 CLI utilities in Nim at https://github.com/c-blake/bu, many of which do something novel rather than just "re-doing ls/find/cat with a twist". While they are really more "ls/ps construction toolkits" with some default configs to get people going, I think https://github.com/c-blake/lc and https://github.com/c-blake/procs are nicer than Rust alternatives. I mention these since you seem interested in such tools.
In Ask HN: Why did Nim not catch on like Rust did?
Since `ps` is featuring prominently here, folks might be interested in https://github.com/c-blake/procs which is a color ps (Linux-only right now). It has a more canonical CLI since it is based upon the Nim CLI generator https://github.com/c-blake/cligen. It also uses cligen's subcommand feature (display, find, scrollsys) and so it can replace pgrep, pkill, ps, top, vmstat, etc., etc. Uses the same color scheme as https://github.com/c-blake/lc which re-organizes the mismash ls CLI quite a bit.
In Unix command line conventions over time
https://github.com/c-blake/lc can do that and more; Indeed you can group "dot directories" differently than "non-dot directories". When I sat down to write `lc` I went through all of exas issues and features and included as much as I felt reasonable. I never liked the graphical tree mode, though. I prefer packing as much information as possible into small real estate (like cell phone terminal screens). https://github.com/c-blake/procs does include some "indentation" oriented tree viewing, though, and uses much of the same kind of classification-colorization as `lc`, just for process table listings (on Linux only for now). It also has "user tweakable aggregation" (kind of the reverse of listing the sub-threads in process).
In Exa: An alternative to Ls
Actually, I did at first look into this kind of a modification of GNU ls, but its internal concepts of how to classify files is just not amenable to generalization along the lines of https://github.com/c-blake/lc . Basically, the patch would be to thoroughly overhaul guts of the command and libraries it uses and be so unclean that starting from scratch is better, even if you wanted to "stay in C". It's not like the patch would be installed 100% of the time anyway, and shell aliases can paper over divergent installations. So, it's 100% fine if none of these features matter to you - to each his own indeed - but I thought your point deserved a reply. (EDIT: also, `lc` is < 1000 lines of pretty tabular Nim code; Nim is a very high productivity language; exa and GNU ls are both effectively like 10x more code, IIRC. But yeah, you do need to h
Read the rest
ave the Nim compiler installed)
In Exa: An alternative to Ls

Showing the 15 most recent of 18 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.