A collection of easy-to-understand, easy-to-use scripts and functions. Designed to be beginner-friendly but also useful
Find a file
Sam Hardeman ab730db2f7 Major chhanges: daisy.source renamed to ld.source.
All files have been prettified by making sure we use 2-space indent.

agenda:
Instead of the hidden .tree file, a file created "More..." is made.
You can use (ex) "agenda --view "2026" to get a full list of files from that
year/date/day.
Additionally, minor fixes have been made.

clip:
You can now use "-c" to clear the clipbaord.
2026-05-05 15:42:34 +02:00
agenda Major chhanges: daisy.source renamed to ld.source. 2026-05-05 15:42:34 +02:00
cdz Major chhanges: daisy.source renamed to ld.source. 2026-05-05 15:42:34 +02:00
daisy.command.source Major chhanges: daisy.source renamed to ld.source. 2026-05-05 15:42:34 +02:00
editx Major chhanges: daisy.source renamed to ld.source. 2026-05-05 15:42:34 +02:00
filewait Major chhanges: daisy.source renamed to ld.source. 2026-05-05 15:42:34 +02:00
LICENSE Major chhanges: daisy.source renamed to ld.source. 2026-05-05 15:42:34 +02:00
own Major chhanges: daisy.source renamed to ld.source. 2026-05-05 15:42:34 +02:00
README.md Major chhanges: daisy.source renamed to ld.source. 2026-05-05 15:42:34 +02:00
scriptbox Major chhanges: daisy.source renamed to ld.source. 2026-05-05 15:42:34 +02:00
shrc Complete overhaul of how daisy core tools are called, as well as changes to the help system 2026-03-30 01:48:18 +02:00
squasher Major chhanges: daisy.source renamed to ld.source. 2026-05-05 15:42:34 +02:00
sshp Major chhanges: daisy.source renamed to ld.source. 2026-05-05 15:42:34 +02:00
sw Major chhanges: daisy.source renamed to ld.source. 2026-05-05 15:42:34 +02:00
what Major chhanges: daisy.source renamed to ld.source. 2026-05-05 15:42:34 +02:00

Please do not delete this file, as it is used to display help information.

L A C K A D A I S I C A L

A collection of easy-to-understand, easy-to-use scripts, functions and aliases. Designed to be beginner-friendly but also useful! Contains several tools you 0ccould

Disclaimer

Some aspects of this project were generated by Google Gemini (in particular, daisy_help and daisy_liist). While we are generally against using LLMs for code, the added functionality of being able to easily update information for individual tools is useful and not considered to be vital functionality.

How to use

Simply open your shell's RC-file (.bashrc, .zshrc, etc) and include source <lackadaisical-folder>/ld.source, preferably at the bottom of the file. We recommend setting your editor before sourcing lackadaisical. For instance, putting export EDITOR=/usr/bin/nano near the top of your RC-file. It may later be overridden by lackadaisical itself if you use (or have used) ched.

You can also try out the utilities by simply sourcing the file while running your shell of choice. It will automatically include itself into your PATH variable.

At first use, lackadaisical will provide you with some information. This information is identical to what can be read in the Getting Started section below.

Please use daisy help to see this message again if you get lost!

Getting started

<!-- --- BEGIN OF DAISY HELP --- -->
===============================================================================
These are the included binaries and utilities:
················································································
< cdz >
················································································
This utility extracts an archive to /tmp and changes directory to it in a new
shell instance. Upon exit, the files are wiped. If `archivemount` is present,
it will be used to mount the archive instead! You can bypass this behavior by
specifying an env value of; NO_ARCHIVEMOUNT=1. The standard script supports
zip, tarballs, and rar archives. We recommend relying on archivemount` if you
have it installed. Use "--check" to only check if a file is an archive. It
returns 0 if it is, 1 otherwise.

Usage:   cdz <archive>
   cdz --check <archive>
Returns: (with --check) 0 if file is archive, 1 if it is not.
················································································

< squasher >
················································································
These convenient set of tools allow you to easily create XZ-compressed SquashFS
images from existing folders to save disk space. The resulting folder is still
writable since it is mounted using an 'overlay' system. You can use 'squasher
make' to compresses an existing folder. These folders are automatically mounted
when you use 'cd' to navigate to them (via the 'multicd' alias). When using
'make-squash-image' on an already mounted folder, it will update the existing
image. As of writing, we do not have a SystemD service to auto-mount, however,
you cam easily add auto-mount as a cron job. Here is a list of tools, they all
take the same folder argument:
 - squasher make:    Converts the folder into an image on the same disk as the
 folder.
 - squasher mount:   Sets up a mount for the XZ image alongside
                     OverlayFS for changes.
 - squasher umount:  Fully unmounts the image and overlay filesystem.
 - squasher destroy: Extracts the image and essentially reverts everything.
                     All file changes are kept and applied to the unextracted
                     data.
················································································

< editx >
················································································
Uses your standard CLI editor to create/modify a file and make it executable.
If the executable already exists in path, it will edit that instead.
Should you not want this behavior, call the utility with the -n switch.

Usage:   editx <file_local_or_in_path>
         editx -n <file>
················································································

< filewait >
················································································
This tool is given a filename of a file that does not exist yet. When the file
appears on disk, the tool quits and simply returns the filename. This can be
used in personal workflows to stall a longer command that relies on the
existence of said file.

Usage:   filewait <inexistant_file>
Returns: filename specified as argument
················································································

< agenda >
················································································
Sets up a folder that is backed by a date-based tree directory structure.
Requires an argument for the name of the folder to generate. Generates a
symlink in this name to a date sub-folder in a local '.daisy' folder. Format is
<dir> -> .daisy/<dir>/<year>/<month>/<day>. Recommended to run via crontab -
automatically cleans up empty folders. A symbolic link to the base of the
folder's tree, ".tree", is created in the root of the specified directly. Can
be used for everything you'd like to sort by date. For example; a diary,
browser downloads, backups, code.

There is a switch available:
--view <date>: Lists all entries recursively. For example, if used with a year
               like "agenda --view "2026" <folder>", you will get a full
               directory listing of all entries in 2026 recursively.
               If you specify a month as well, you get all the entries from
               said month. You can also select a specific date, but it it does
               not exist, you will not get any results. Additionally, you need
               to use the date structure YYYY/MM/DD.
               Each day will be listed with a full path, allowing you to cd to
               them (hint: The ".tree" symlink in your folder also allows you
               to browse the tree).

Usage:   agenda <folder>
         agenda --view <folder>
················································································

< own >
················································································
A simple utility. It's effectively an alias for "sudo chown -R user:user" on
the target dir/file. Root permissions required!
················································································

< sshp >
················································································
This is a wrapper for `ssh`, the meaning of the 'p' is "Plus". Integrates SSHFS
support. If both client and host have SSHFS, this wrapper can be used to
connect their file systems. For example, if you need to move files from one
machine to another, you could do something like this: "sshp -m /:/mnt/pc -m
/home/claire:/home/claire claire@pyon.net". Each "-m" switch indicates a
Docker-style mapping from a local directory to a remote directory.
If privilege escalation is necessary for FS access, you will be asked for a
password.

Usage:   sshp -m <local>:<remote> [user@]host [ssh_options]
················································································

< shrc >
················································································
This tool allows you to edit the RC file for your shell in your preferred
editor. After saving, the file is sourced by your shell if modified.
················································································

< sw >
················································································
A basic function that swaps two files by content. Useful for restoring backups.
················································································

< what >
················································································
This is a tool similar to which and others, the key difference is that it
returns partial matches. It can be used to search for binaries.
················································································

< scriptbox >
························································q························
This tool can be used to pack bash scripts into one big megascript, much like
how `busybox` works. You can also make symlinks to it to invoke a specific
script. Standard binaries are not supported.

Usage:
Creating boxed binary: scriptbox -o <BOXED_BIN> <-s source files>
                       <-p include files verbatim> -i INPUT_BINS ...
More information:      scriptbox <no-args>
················································································

< bak/unbak >
················································································
These small utilities make backups of files by making a copy with a .bak
suffix. Unbak reverses the process by using sw and removes the backup.
················································································

< lsa >
················································································
A simple alias for `ls -lah`.
················································································

< lsn >
················································································
A simple alias for `ls -lah --sort=time --reverse`.
················································································

< lss >
················································································
A simple alias for `ls -lah --sort=size --reverse`.
················································································

< editpeco >
················································································
This function uses peco+tree like `cdp`, but opens your editor on the selected
file(s). After you exit your editor(s), you are returned to peco where you left
off.
················································································

< ched >
················································································
Like chsh but for your editor (EDITOR env). A list from which you can choose an
installed editor (CLI or GUI) is shown. This list is by no means complete. The
editor for LACKADAISICAL and the global editor are separate. If the EDITOR
variable is already defined, only LD_EDITOR will be changed. LD_EDITOR is the
editor used by LACKADAISICAL utilities. To override the global EDITOR variable,
pass "-g". To restore the normal behavior of checking for an earlier definition
of EDITOR after passing "-g", run `ched` without arguments.
················································································

< cdf >
················································································
Use fzf to find a file and then cd to its location.
················································································

< cdp >
················································································
Similar to `cdf` but uses tree+peco for the query.
················································································

< clip >
················································································
An extremely simple utility that functions as a clipboard of sorts. To set the
variable, run "clip <data>" or provide data via stdin. To get the variable,
simply run clip without any arguments. The variable is stored locally in the
shell as "LD_CLIP". Run with switch "-c" to clear LD_CLIP.

Usage:   clip <anystring>
         clip -c
         clip
Returns: Without arguments, the contents of LD_CLIP.
················································································

< ldrc >
················································································
Edits ld.source and re-sources it, similarly to shrc. Append "-e" to edit
"extra.src", to add custom functions in the lackadaisical namespace.
Append "-d" to edit "daisy.command.source".
················································································

< daisy reload >
················································································
Re-sources ld.source. Essentially `ldrc` without editing.
················································································

< grab >
················································································
Alias for `awk '{print $x}'`, where x is a number. E.g. `echo 'a b c' | grab 2`
returns 'b'.
················································································

< daisy enc >
················································································
Converts a file/stdin to a base64 block that can be decoded by passing the
output(s) to `daisy_dec`. The output of `daisy_enc` can be concatenated with
the output of another encoded file to create a multi-file base64 archive
similar to `daisy_enc_multi`. Does not support symlinks yet, and will instead
treat it as a full input file (reads the data of the linked file). When using
stdin, please provide a filename as argument.
················································································

< daisy enc multi >
················································································
A version of `daisy_enc` that encodes multiple files and outputs
`daisy_base64_data` blocks to a file or stdout. These outputs can be
concatenated as well.
················································································

< daisy enc folder >
················································································
A version of `daisy_enc` that encodes a whole folder into a series of
`daisy_base64_data` blocks. Requires the `tree` utility.
················································································

< daisy dec >
················································································
Converts `daisy_base64_data` blocks back to the form it was in originally.
················································································

< daisy dec multi >
················································································
A version of daisy_dec that runs on multiple input blocks that are either
stored in a file or stdin.
················································································

< daisy alias >
················································································
This utility sets persistent user aliases stored in
"~/.config/lackadaisical/aliases.src". They will remain persistent until
unaliased with daisy_unalias. Call daisy_alias using '' instead of "". E.g.
`daisy_alias hello='echo "Hello!"' - instead of `daisy_alias hello="echo
\"Hello!\"". This prevents an early invocation of possible nested aliases. Call
this function without arguments to get a list of registered aliases as well as
indices for easy unaliasing using `daisy_unalias`.
················································································

< daisy unalias >
················································································
This utility removes an alias from those registered with daisy_alias. It
accepts either an alias name, or an index given by calling `daisy_alias`
without arguments. In case of a mistake, a backup is made under the filename
"~/.config/lackadaisical/aliases.src.bak". To restore this file, you can use
these commands: `unbak ~/.config/lackadaisical/aliases.src' `daisy_reload`
················································································

< daisy list >
················································································
List all available commands, utilities and tools - without description.
················································································

< daisy clear >
················································································
Removes all configuration, including aliases. A backup is made and can be
restored using "daisy_restore". Triggers a reload.
················································································

< daisy backup >
················································································
Backs up all config files. These can be restored using "daisy_restore".
················································································

< daisy restore >
················································································
Undoes "daisy_clear" by restoring config files. Triggers a reload.
················································································

< daisy_* /ld_* >
················································································
All functions prefixed by "daisy" are also available as alias with the prefixes
"daisy_" and "ld_".
················································································

< daisy help >
················································································
Shows this exact interface for information about different utilities and
functions provided by `lackadaisical`.
 - help <command|utility|tool>: Shows a help entry for a particular command,
                                including allternative function names.
 - help                         Shows fully formatted help entries for every
                                function listed by "daisy list" (recommended
                                for first-time users).
················································································
<!-- --- END OF DAISY HELP --- -->

Future plans

We will keep improving and enhancing the scripts. Possibly, we will add new utilities. We hope you found LACKADAISICAL useful.