diff --git a/science/math/Binary System.md b/science/math/Binary System.md index 37b59d4..a77f0ef 100644 --- a/science/math/Binary System.md +++ b/science/math/Binary System.md @@ -10,14 +10,14 @@ Negative numbers are commonly represented in binary using two's complement. Two's complement of an integer number is achieved by: - Step 1: Start with the absolute value of the number. - Step 2: inverting (or flipping) all bits – changing every 0 to 1, and every 1 to 0; -- Step 3: adding 1 to the entire inverted number, ignoring any overflow. Accounting for overflow will produce the wrong value for the result. +- Step 3: adding 1 to the entire inverted number, ignoring any overflow. Accounting for overflow will produce the wrong value for the result. -For example, to calculate the decimal number **−6** in binary: -- Step 1: _+6_ in decimal is _0110_ in binary; the leftmost significant bit (the first 0) is the sign (just _110_ in binary would be -2 in decimal). -- Step 2: flip all bits in _0110_, giving _1001_. -- Step 3: add the place value 1 to the flipped number _1001_, giving _1010_. +For example, to calculate the decimal number **−6** in binary: +- Step 1: _+6_ in decimal is _0110_ in binary; the leftmost significant bit (the first 0) is the sign (just _110_ in binary would be -2 in decimal). +- Step 2: flip all bits in _0110_, giving _1001_. +- Step 3: add the place value 1 to the flipped number _1001_, giving _1010_. -To verify that _1010_ indeed has a value of _−6_, add the place values together, but _subtract_ the sign value from the final calculation. Because the most significant value is the sign value, it must be subtracted to produce the correct result: **1010** = **−**(**1**×23) + (**0**×22) + (**1**×21) + (**0**×20) = **1**×−8 + **0** + **1**×2 + **0** = −6. +To verify that _1010_ indeed has a value of _−6_, add the place values together, but _subtract_ the sign value from the final calculation. Because the most significant value is the sign value, it must be subtracted to produce the correct result: **1010** = **−**(**1**×23) + (**0**×22) + (**1**×21) + (**0**×20) = **1**×−8 + **0** + **1**×2 + **0** = −6. | Bits: | 1 | 0 | 1 | 0 | | -------------------- | --------------- | ---------- | ---------- | ---------- | diff --git a/technology/Cryptography/GPG.md b/technology/Cryptography/GPG.md index 98338b6..6f9687b 100644 --- a/technology/Cryptography/GPG.md +++ b/technology/Cryptography/GPG.md @@ -60,8 +60,8 @@ gpg --import **Key selection:** ```shell - -r, --recipient KEY # Encrypt for key - -u, --local-user KEY # Use this key + -r, --recipient KEY # Encrypt for key + -u, --local-user KEY # Use this key ``` diff --git a/technology/applications/backup/borg.md b/technology/applications/backup/borg.md index c320fa9..95a03a7 100644 --- a/technology/applications/backup/borg.md +++ b/technology/applications/backup/borg.md @@ -16,12 +16,12 @@ All Borg commands share these options: | Option | Description | | ----------------------- | ------------------------------------------------------------------------------------- | -| `--info, -v, --verbose` | work on log level INFO | -| `-p, --progress` | show progress information | +| `--info, -v, --verbose` | work on log level INFO | +| `-p, --progress` | show progress information | | `--log-json` | Output one [JSON](../../files/JSON.md) object per log line instead of formatted text. | | `--bypass-lock` | Bypass locking mechanism | -| `--remote-path PATH` | use PATH as borg executable on the remote (default: “borg”) | -| `--rsh RSH` | Use this command to connect to the ‘borg serve’ process (default: ‘ssh’) | +| `--remote-path PATH` | use PATH as borg executable on the remote (default: “borg”) | +| `--rsh RSH` | Use this command to connect to the ‘borg serve’ process (default: ‘ssh’) | ### `borg init` This command initializes an empty repository. A repository is a filesystem directory containing the deduplicated data from zero or more archives. @@ -31,7 +31,7 @@ Usage: `borg [common options] init [options] [REPOSITORY]` | Option | Description | | ------------------------------ | ----------------------------------------- | -| `-e MODE`, `--encryption MODE` | select encryption key mode **(required)** | +| `-e MODE`, `--encryption MODE` | select encryption key mode **(required)** | #### Examples ```shell @@ -57,31 +57,31 @@ Usage: `borg [common options] create [options] ARCHIVE [PATH...]` #### Options | Option | Description | | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| ` -n`, `--dry-run` | do not create a backup archive | -| `-s`, `--stats` | print statistics for the created archive | +| ` -n`, `--dry-run` | do not create a backup archive | +| `-s`, `--stats` | print statistics for the created archive | | `--list` | output verbose list of items (files, dirs, …) | -| `--json` | output stats as JSON. Implies `--stats`. | -| `--stdin-name NAME` | use NAME in archive for stdin data (default: `stdin`) | -| `--stdin-user USER` | set user USER in archive for stdin data (default: `root`) | -| `--stdin-group GROUP` | set group GROUP in archive for stdin data (default: `wheel`) | -| `--stdin-mode M` | set mode to M in archive for stdin data (default: 0660) | +| `--json` | output stats as JSON. Implies `--stats`. | +| `--stdin-name NAME` | use NAME in archive for stdin data (default: `stdin`) | +| `--stdin-user USER` | set user USER in archive for stdin data (default: `root`) | +| `--stdin-group GROUP` | set group GROUP in archive for stdin data (default: `wheel`) | +| `--stdin-mode M` | set mode to M in archive for stdin data (default: 0660) | | `--content-from-command` | interpret PATH as command and store its stdout. | | `--paths-from-stdin` | read DELIM-separated list of paths to backup from stdin. All control is external: it will back up all files given - no more, no less. | -| `--paths-from-command` | interpret PATH as command and treat its output as `--paths-from-stdin` | -| `--paths-delimiter DELIM` | set path delimiter for `--paths-from-stdin` and `--paths-from-command` (default: `\n`) | -| `-e PATTERN`, `--exclude PATTERN` | exclude paths matching PATTERN | -| `--exclude-from EXCLUDEFILE` | read exclude patterns from EXCLUDEFILE, one per line | -| `--pattern PATTERN` | include/exclude paths matching PATTERN | -| `--patterns-from PATTERNFILE` | read include/exclude patterns from PATTERNFILE, one per line | +| `--paths-from-command` | interpret PATH as command and treat its output as `--paths-from-stdin` | +| `--paths-delimiter DELIM` | set path delimiter for `--paths-from-stdin` and `--paths-from-command` (default: `\n`) | +| `-e PATTERN`, `--exclude PATTERN` | exclude paths matching PATTERN | +| `--exclude-from EXCLUDEFILE` | read exclude patterns from EXCLUDEFILE, one per line | +| `--pattern PATTERN` | include/exclude paths matching PATTERN | +| `--patterns-from PATTERNFILE` | read include/exclude patterns from PATTERNFILE, one per line | | `--exclude-caches` | exclude directories that contain a CACHEDIR.TAG file | -| `--exclude-if-present NAME` | exclude directories that are tagged by containing a filesystem object with the given NAME | -| `--keep-exclude-tags` | if tag objects are specified with `--exclude-if-present`, don’t omit the tag objects themselves from the backup archive | +| `--exclude-if-present NAME` | exclude directories that are tagged by containing a filesystem object with the given NAME | +| `--keep-exclude-tags` | if tag objects are specified with `--exclude-if-present`, don’t omit the tag objects themselves from the backup archive | | `--exclude-nodump` | exclude files flagged NODUMP | -| `-x`, `--one-file-system` | stay in the same file system and do not store mount points of other file systems | -| `--comment COMMENT` | add a comment text to the archive | -| `--timestamp TIMESTAMP` | manually specify the archive creation date/time (UTC, yyyy-mm-ddThh:mm:ss format). Alternatively, give a reference file/directory. | -| `-c SECONDS`, `--checkpoint-interval SECONDS` | write checkpoint every SECONDS seconds (Default: 1800) | -| `-C COMPRESSION`, `--compression COMPRESSION` | select compression algorithm, see the output of the “borg help compression” command for details. | +| `-x`, `--one-file-system` | stay in the same file system and do not store mount points of other file systems | +| `--comment COMMENT` | add a comment text to the archive | +| `--timestamp TIMESTAMP` | manually specify the archive creation date/time (UTC, yyyy-mm-ddThh:mm:ss format). Alternatively, give a reference file/directory. | +| `-c SECONDS`, `--checkpoint-interval SECONDS` | write checkpoint every SECONDS seconds (Default: 1800) | +| `-C COMPRESSION`, `--compression COMPRESSION` | select compression algorithm, see the output of the “borg help compression” command for details. | #### Examples ```shell @@ -158,19 +158,19 @@ $ borg create /path/to/repo::daily-projectA-{now:%Y-%m-%d} projectA ``` ### `borg extract` -This command extracts the contents of an archive. By default the entire archive is extracted but a subset of files and directories can be selected by passing a list of `PATHs` as arguments. The file selection can further be restricted by using the `--exclude` option. +This command extracts the contents of an archive. By default the entire archive is extracted but a subset of files and directories can be selected by passing a list of `PATHs` as arguments. The file selection can further be restricted by using the `--exclude` option. Usage: `borg [common options] extract [options] ARCHIVE [PATH...]` #### Options | Option | Description | | --------------------------------- | --------------------------------------------------------------------------------------------------------- | | `--list` | output verbose list of items (files, dirs, …) | -| `-n`, `--dry-run` | do not actually change any files | -| `-e PATTERN`, `--exclude PATTERN` | exclude paths matching PATTERN | -| `--exclude-from EXCLUDEFILE` | read exclude patterns from EXCLUDEFILE, one per line | -| `--pattern PATTERN` | include/exclude paths matching PATTERN | -| `--patterns-from PATTERNFILE` | read include/exclude patterns from PATTERNFILE, one per line | -| `--strip-components NUMBER` | Remove the specified number of leading path elements. Paths with fewer elements will be silently skipped. | +| `-n`, `--dry-run` | do not actually change any files | +| `-e PATTERN`, `--exclude PATTERN` | exclude paths matching PATTERN | +| `--exclude-from EXCLUDEFILE` | read exclude patterns from EXCLUDEFILE, one per line | +| `--pattern PATTERN` | include/exclude paths matching PATTERN | +| `--patterns-from PATTERNFILE` | read include/exclude patterns from PATTERNFILE, one per line | +| `--strip-components NUMBER` | Remove the specified number of leading path elements. Paths with fewer elements will be silently skipped. | #### Examples ```shell @@ -203,10 +203,10 @@ Usage: `borg [common options] check [options] [REPOSITORY_OR_ARCHIVE]` | ------------------------ | ---------------------------------------------------------------------------------------------- | | `--repository-only` | only perform repository checks | | `--archives-only` | only perform archives checks | -| `--verify-data` | perform cryptographic archive data integrity verification (conflicts with `--repository-only`) | +| `--verify-data` | perform cryptographic archive data integrity verification (conflicts with `--repository-only`) | | `--repair` | attempt to repair any inconsistencies found | | `--save-space` | work slower, but using less space | -| `--max-duration SECONDS` | do only a partial repo check for max. SECONDS seconds (Default: unlimited) | +| `--max-duration SECONDS` | do only a partial repo check for max. SECONDS seconds (Default: unlimited) | ### `borg rename` This command renames an archive in the repository. @@ -232,18 +232,18 @@ Usage: `borg [common options] list [options] [REPOSITORY_OR_ARCHIVE] [PATH...]` | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `--consider-checkpoints` | Show checkpoint archives in the repository contents list (default: hidden). | | `--short` | only print file/directory names, nothing else | -| `--format FORMAT` | specify format for file or archive listing (default for files: `{mode} {user:6} {group:6} {size:8} {mtime} {path}{extra}{NL}`; for archives: `{archive:<36} {time} [{id}]{NL}`) | -| `--json` | Only valid for listing repository contents. Format output as [JSON](../../files/JSON.md). The form of `--format` is ignored, but keys used in it are added to the [JSON](../../files/JSON.md) output. Some keys are always present. Note: [JSON](../../files/JSON.md) can only represent text. A “barchive” key is therefore not available. | -| `--json-lines` | Only valid for listing archive contents. Format output as [JSON](../../files/JSON.md) Lines. The form of `--format` is ignored, but keys used in it are added to the [JSON](../../files/JSON.md) output. Some keys are always present. Note: [JSON](../../files/JSON.md) can only represent text. A “bpath” key is therefore not available. | -| `-P PREFIX`, `--prefix PREFIX` | only consider archive names starting with this prefix. (deprecated) | -| `-a GLOB`, `--glob-archives GLOB` | only consider archive names matching the glob. sh: rules apply (without actually using the sh: prefix), see “borg help patterns”. | -| `--sort-by KEYS` | Comma-separated list of sorting keys; valid keys are: timestamp, archive, name, id; default is: timestamp | -| `--first N` | consider first N archives after other filters were applied | -| `--last N` | consider last N archives after other filters were applied | -| `-e PATTERN`, `--exclude PATTERN` | exclude paths matching PATTERN | -| `--exclude-from EXCLUDEFILE` | read exclude patterns from EXCLUDEFILE, one per line | -| `--pattern PATTERN` | include/exclude paths matching PATTERN | -| `--patterns-from PATTERNFILE` | read include/exclude patterns from PATTERNFILE, one per line | +| `--format FORMAT` | specify format for file or archive listing (default for files: `{mode} {user:6} {group:6} {size:8} {mtime} {path}{extra}{NL}`; for archives: `{archive:<36} {time} [{id}]{NL}`) | +| `--json` | Only valid for listing repository contents. Format output as [JSON](../../files/JSON.md). The form of `--format` is ignored, but keys used in it are added to the [JSON](../../files/JSON.md) output. Some keys are always present. Note: [JSON](../../files/JSON.md) can only represent text. A “barchive” key is therefore not available. | +| `--json-lines` | Only valid for listing archive contents. Format output as [JSON](../../files/JSON.md) Lines. The form of `--format` is ignored, but keys used in it are added to the [JSON](../../files/JSON.md) output. Some keys are always present. Note: [JSON](../../files/JSON.md) can only represent text. A “bpath” key is therefore not available. | +| `-P PREFIX`, `--prefix PREFIX` | only consider archive names starting with this prefix. (deprecated) | +| `-a GLOB`, `--glob-archives GLOB` | only consider archive names matching the glob. sh: rules apply (without actually using the sh: prefix), see “borg help patterns”. | +| `--sort-by KEYS` | Comma-separated list of sorting keys; valid keys are: timestamp, archive, name, id; default is: timestamp | +| `--first N` | consider first N archives after other filters were applied | +| `--last N` | consider last N archives after other filters were applied | +| `-e PATTERN`, `--exclude PATTERN` | exclude paths matching PATTERN | +| `--exclude-from EXCLUDEFILE` | read exclude patterns from EXCLUDEFILE, one per line | +| `--pattern PATTERN` | include/exclude paths matching PATTERN | +| `--patterns-from PATTERNFILE` | read include/exclude patterns from PATTERNFILE, one per line | #### Examples ```shell @@ -313,9 +313,9 @@ Usage: `borg [common options] delete [options] [REPOSITORY_OR_ARCHIVE] [ARCHIVE. #### Options | Option | Description | | ----------------- | ---------------------------------------- | -| `-n`, `--dry-run` | do not change repository | +| `-n`, `--dry-run` | do not change repository | | `--list` | output verbose list of archives | -| `-s`, `--stats` | print statistics for the deleted archive | +| `-s`, `--stats` | print statistics for the deleted archive | #### Examples ```shell @@ -341,18 +341,18 @@ Usage: `borg [common options] prune [options] [REPOSITORY]` #### Options | Option | Description | | -------------------------------- | ------------------------------------------------------------------------------------------- | -| `-n`, `--dry-run` | do not change repository | -| `--force` | force pruning of corrupted archives, use `--force --force` in case `--force` does not work. | -| `-s`, `--stats` | print statistics for the deleted archive | +| `-n`, `--dry-run` | do not change repository | +| `--force` | force pruning of corrupted archives, use `--force --force` in case `--force` does not work. | +| `-s`, `--stats` | print statistics for the deleted archive | | `--list` | output verbose list of archives it keeps/prunes | -| `--keep-within INTERVAL` | keep all archives within this time interval | -| `--keep-last`, `--keep-secondly` | number of secondly archives to keep | +| `--keep-within INTERVAL` | keep all archives within this time interval | +| `--keep-last`, `--keep-secondly` | number of secondly archives to keep | | `--keep-minutely` | number of minutely archives to keep | -| `-H`, `--keep-hourly` | number of hourly archives to keep | -| `-d`, `--keep-daily` | number of daily archives to keep | -| `-w`, `--keep-weekly` | number of weekly archives to keep | -| `-m`, `--keep-monthly` | number of monthly archives to keep | -| `-y`, `--keep-yearly` | number of yearly archives to keep | +| `-H`, `--keep-hourly` | number of hourly archives to keep | +| `-d`, `--keep-daily` | number of daily archives to keep | +| `-w`, `--keep-weekly` | number of weekly archives to keep | +| `-m`, `--keep-monthly` | number of monthly archives to keep | +| `-y`, `--keep-yearly` | number of yearly archives to keep | #### Examples ```shell @@ -398,13 +398,13 @@ Usage: `borg [common options] info [options] [REPOSITORY_OR_ARCHIVE]` | `--json` | format output as JSON | ### `borg mount` -This command mounts an archive as a FUSE filesystem. This can be useful for browsing an archive or restoring individual files. Unless the `--foreground` option is given the command will run in the background until the filesystem is `umounted`. +This command mounts an archive as a FUSE filesystem. This can be useful for browsing an archive or restoring individual files. Unless the `--foreground` option is given the command will run in the background until the filesystem is `umounted`. Usage: `borg [common options] mount [options] REPOSITORY_OR_ARCHIVE MOUNTPOINT [PATH...]` #### Options | Option | Description | | -------------------- | ------------------------------------------------------ | -| `-f`, `--foreground` | stay in foreground, do not daemonize | +| `-f`, `--foreground` | stay in foreground, do not daemonize | | `-o` | Extra mount options | | `--numeric-ids` | use numeric user and group identifiers from archive(s) | @@ -427,7 +427,7 @@ $ borg umount /tmp/mymountpoint ``` ### `borg unmount` -This command un-mounts a FUSE filesystem that was mounted with `borg mount`. +This command un-mounts a FUSE filesystem that was mounted with `borg mount`. Usage: `borg [common options] umount [options] MOUNTPOINT` ### `borg key change-passphrase` @@ -441,5 +441,5 @@ Usage: `borg [common options] serve [options]` #### Options | Option | Description | | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `--restrict-to-path PATH` | restrict repository access to PATH. Can be specified multiple times to allow the client access to several directories. Access to all sub-directories is granted implicitly; PATH doesn’t need to directly point to a repository. | -| `--restrict-to-repository PATH` | restrict repository access. Only the repository located at PATH (no sub-directories are considered) is accessible. Can be specified multiple times to allow the client access to several repositories. Unlike `--restrict-to-path` sub-directories are not accessible; PATH needs to directly point at a repository location. PATH may be an empty directory or the last element of PATH may not exist, in which case the client may initialize a repository there. | +| `--restrict-to-path PATH` | restrict repository access to PATH. Can be specified multiple times to allow the client access to several directories. Access to all sub-directories is granted implicitly; PATH doesn’t need to directly point to a repository. | +| `--restrict-to-repository PATH` | restrict repository access. Only the repository located at PATH (no sub-directories are considered) is accessible. Can be specified multiple times to allow the client access to several repositories. Unlike `--restrict-to-path` sub-directories are not accessible; PATH needs to directly point at a repository location. PATH may be an empty directory or the last element of PATH may not exist, in which case the client may initialize a repository there. | diff --git a/technology/applications/clamav.md b/technology/applications/clamav.md index c5eb5dc..fc50262 100644 --- a/technology/applications/clamav.md +++ b/technology/applications/clamav.md @@ -22,7 +22,7 @@ The database files are saved in: /var/lib/clamav/bytecode.cvd ``` -Start/Enable`clamav-freshclam.service` so that the virus definitions are kept recent. +Start/Enable`clamav-freshclam.service` so that the virus definitions are kept recent. ### Starting the daemon diff --git a/technology/applications/cli/Shell.md b/technology/applications/cli/Shell.md index 4962bfb..02729eb 100644 --- a/technology/applications/cli/Shell.md +++ b/technology/applications/cli/Shell.md @@ -133,7 +133,7 @@ command2 < mypipe # Reading from the pipe ### **tee Command** The `tee` command reads from standard input and writes to standard output and files simultaneously. ```shell -echo "Hello, World!" | tee output.txt | wc -l +echo "Hello, World!" | tee output.txt | wc -l ``` ### **/dev/null** @@ -210,7 +210,7 @@ esac #### Operators ##### Arithmetic Operators -Assume variable **a** holds 10 and variable **b** holds 20 then − +Assume variable **a** holds 10 and variable **b** holds 20 then − | Operator | Description | Example | | ------------------ | --------------------------------------------------------------------- | --------------------------------------- | @@ -226,7 +226,7 @@ Assume variable **a** holds 10 and variable **b** holds 20 then − ##### Relational Operators For example, following operators will work to check a relation between 10 and 20 as well as in between "10" and "20" but not in between "ten" and "twenty". -Assume variable **a** holds 10 and variable **b** holds 20 then − +Assume variable **a** holds 10 and variable **b** holds 20 then − | Operator | Description | Example | | -------- | ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------- | @@ -238,18 +238,18 @@ Assume variable **a** holds 10 and variable **b** holds 20 then − | **-le** | Checks if the value of left operand is less than or equal to the value of right operand; if yes, then the condition becomes true. | `[ $a -le $b ]` is true. | ##### Boolean Operators -Assume variable **a** holds 10 and variable **b** holds 20 then − +Assume variable **a** holds 10 and variable **b** holds 20 then − | Operator | Description | Example | | -------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------- | | **!** | This is logical negation. This inverts a true condition into false and vice versa. | `[ ! false ]` is true. | -| **-o** | This is logical **OR**. If one of the operands is true, then the condition becomes true. | `[ $a -lt 20 -o $b -gt 100 ]` is true. | -| **-a** | This is logical **AND**. If both the operands are true, then the condition becomes true otherwise false. | `[ $a -lt 20 -a $b -gt 100 ]` is false. | +| **-o** | This is logical **OR**. If one of the operands is true, then the condition becomes true. | `[ $a -lt 20 -o $b -gt 100 ]` is true. | +| **-a** | This is logical **AND**. If both the operands are true, then the condition becomes true otherwise false. | `[ $a -lt 20 -a $b -gt 100 ]` is false. | ##### File Test Operators We have a few operators that can be used to test various properties associated with a Unix file. -Assume a variable **file** holds an existing file name "test" the size of which is 100 bytes and has **read**, **write** and **execute** permission. +Assume a variable **file** holds an existing file name "test" the size of which is 100 bytes and has **read**, **write** and **execute** permission. | Operator | Description | Example | | ----------- | ---------------------------------------------------------------------------------------------------------------------- | --------------------------- | diff --git a/technology/applications/cli/choose.md b/technology/applications/cli/choose.md index bcabc91..6fdc454 100644 --- a/technology/applications/cli/choose.md +++ b/technology/applications/cli/choose.md @@ -7,7 +7,7 @@ os: repo: https://github.com/theryangeary/choose --- # choose -`choose`, a human-friendly and fast alternative to `cut` and (sometimes) `awk` +`choose`, a human-friendly and fast alternative to `cut` and (sometimes) `awk` ## Usage ```shell diff --git a/technology/applications/cli/compression/tar.md b/technology/applications/cli/compression/tar.md index f25d65d..2c86756 100644 --- a/technology/applications/cli/compression/tar.md +++ b/technology/applications/cli/compression/tar.md @@ -5,7 +5,7 @@ website: https://savannah.gnu.org/projects/tar repo: https://git.savannah.gnu.org/cgit/tar.git --- # Tar -Tar is the most widely used command in Unix and Linux like operating system for creating archive of multiple files and folders into a single archive file and that archive file can be further compressed using other compression techniques +Tar is the most widely used command in Unix and Linux like operating system for creating archive of multiple files and folders into a single archive file and that archive file can be further compressed using other compression techniques Creating Archives: ```shell diff --git a/technology/applications/cli/crunch.md b/technology/applications/cli/crunch.md index 42eb9c3..a91db5e 100644 --- a/technology/applications/cli/crunch.md +++ b/technology/applications/cli/crunch.md @@ -19,5 +19,5 @@ Usage: `crunch [] [options]` | `-i` | Inverts the output so instead of aaa,aab,aac,aad, etc you get aaa,baa,caa,daa,aba,bba | | `-o wordlist.txt` | Specifies the file to write the output to, eg: wordlist.txt | | `-s startblock` | Specifies a starting string, eg: 03god22fs | -| `-t @,%^` | Specifies a pattern, eg: @@god@@@@ where the only the @'s, ,'s, %'s, and ^'s  will change.
`@` will insert lower case characters
`,` will insert upper case characters
`%` will insert numbers
`^` will insert symbols | +| `-t @,%^` | Specifies a pattern, eg: @@god@@@@ where the only the @'s, ,'s, %'s, and ^'s will change.
`@` will insert lower case characters
`,` will insert upper case characters
`%` will insert numbers
`^` will insert symbols | | `-z gzip, bzip2, lzma, and 7z` | Compresses the output from the -o option. Valid parameters are gzip, bzip2, lzma, and [7z](compression/p7zip.md). | diff --git a/technology/applications/cli/eza.md b/technology/applications/cli/eza.md index 389b757..3b7ac86 100644 --- a/technology/applications/cli/eza.md +++ b/technology/applications/cli/eza.md @@ -4,17 +4,17 @@ os: linux repo: https://github.com/eza-community/eza --- # exa -[**eza**](https://eza.rocks/) is a modern replacement for the venerable file-listing command-line program `ls` that ships with Unix and Linux operating systems, giving it more features and better defaults. It uses colours to distinguish file types and metadata. It knows about symlinks, extended attributes, and Git. And it’s **small**, **fast**, and just **one single binary**. +[**eza**](https://eza.rocks/) is a modern replacement for the venerable file-listing command-line program `ls` that ships with Unix and Linux operating systems, giving it more features and better defaults. It uses colours to distinguish file types and metadata. It knows about symlinks, extended attributes, and Git. And it’s **small**, **fast**, and just **one single binary**. ## Usage Flags: ```shell --l, --long         display extended file metadata as a table --R, --recurse      recurse into directories +-l, --long display extended file metadata as a table +-R, --recurse recurse into directories -L, --level DEPTH limit the depth of recursion --T, --tree         recurse into directories as a tree --a, --all          show hidden and 'dot' files --r, --reverse      reverse the sort order --D, --only-dirs    list only directories ---git-ignore       ignore files mentioned in '.gitignore' +-T, --tree recurse into directories as a tree +-a, --all show hidden and 'dot' files +-r, --reverse reverse the sort order +-D, --only-dirs list only directories +--git-ignore ignore files mentioned in '.gitignore' ``` \ No newline at end of file diff --git a/technology/applications/cli/fd.md b/technology/applications/cli/fd.md index 995bae8..7d918df 100644 --- a/technology/applications/cli/fd.md +++ b/technology/applications/cli/fd.md @@ -4,7 +4,7 @@ os: linux repo: https://github.com/sharkdp/fd --- # fd -`fd` is a program to find entries in your filesystem. It is a simple, fast and user-friendly alternative to [`find`](https://www.gnu.org/software/findutils/). While it does not aim to support all of `find`'s powerful functionality, it provides sensible (opinionated) defaults for a majority of use cases. +`fd` is a program to find entries in your filesystem. It is a simple, fast and user-friendly alternative to [`find`](https://www.gnu.org/software/findutils/). While it does not aim to support all of `find`'s powerful functionality, it provides sensible (opinionated) defaults for a majority of use cases. ## Usage Usage: `fd [OPTIONS] [pattern] [path]...` diff --git a/technology/applications/cli/handlr.md b/technology/applications/cli/handlr.md index e2c7e02..b0baeb2 100644 --- a/technology/applications/cli/handlr.md +++ b/technology/applications/cli/handlr.md @@ -4,7 +4,7 @@ os: linux repo: https://github.com/chmln/handlr --- # Handlr -Manage your default applications with ease using `handlr`! +Manage your default applications with ease using `handlr`! Open files in default application: ```shell diff --git a/technology/applications/cli/hck.md b/technology/applications/cli/hck.md index 66980f3..ad1a644 100644 --- a/technology/applications/cli/hck.md +++ b/technology/applications/cli/hck.md @@ -4,11 +4,11 @@ os: linux repo: https://github.com/sstadick/hck --- # hck -_`hck` is a shortening of `hack`, a rougher form of `cut`._ +_`hck` is a shortening of `hack`, a rougher form of `cut`._ A close to drop in replacement for cut that can use a regex delimiter instead of a fixed string. Additionally this tool allows for specification of the order of the output columns using the same column selection syntax as cut (see below for examples). -No single feature of `hck` on its own makes it stand out over `awk`, `cut`, `xsv` or other such tools. Where `hck` excels is making common things easy, such as reordering output fields, or splitting records on a weird delimiter. It is meant to be simple and easy to use while exploring datasets. Think of this as filling a gap between `cut` and `awk`. +No single feature of `hck` on its own makes it stand out over `awk`, `cut`, `xsv` or other such tools. Where `hck` excels is making common things easy, such as reordering output fields, or splitting records on a weird delimiter. It is meant to be simple and easy to use while exploring datasets. Think of this as filling a gap between `cut` and `awk`. ## Usage Usage: `hck [options]` diff --git a/technology/applications/cli/hexyl.md b/technology/applications/cli/hexyl.md index 908e207..7b4a33a 100644 --- a/technology/applications/cli/hexyl.md +++ b/technology/applications/cli/hexyl.md @@ -5,7 +5,7 @@ os: repo: https://github.com/sharkdp/hexyl --- # Hexyl -`hexyl` is a simple hex viewer for the terminal. It uses a colored output to distinguish different categories of bytes (NULL bytes, printable [ASCII](../../files/ASCII.md) characters, [ASCII](../../files/ASCII.md) whitespace characters, other [ASCII](../../files/ASCII.md) characters and non-[ASCII](../../files/ASCII.md)). +`hexyl` is a simple hex viewer for the terminal. It uses a colored output to distinguish different categories of bytes (NULL bytes, printable [ASCII](../../files/ASCII.md) characters, [ASCII](../../files/ASCII.md) whitespace characters, other [ASCII](../../files/ASCII.md) characters and non-[ASCII](../../files/ASCII.md)). ## Usage Usage: `hexyl [OPTIONS] [FILE]` diff --git a/technology/applications/cli/huniq.md b/technology/applications/cli/huniq.md index 8b35348..b67a8fd 100644 --- a/technology/applications/cli/huniq.md +++ b/technology/applications/cli/huniq.md @@ -10,11 +10,11 @@ Command line utility to remove duplicates from the given input. Note that huniq ## Usage Flags: ```shell --c, --count      Output the amount of times a line was encountered +-c, --count Output the amount of times a line was encountered --d, --delim         Which delimiter between elements to use. [default: "\n"] +-d, --delim Which delimiter between elements to use. [default: "\n"] --s, --sort                     Sort output by the number of occurences, in ascending order +-s, --sort Sort output by the number of occurences, in ascending order --S, --sort-descending          Order output by the number of occurences, in descending order +-S, --sort-descending Order output by the number of occurences, in descending order ``` \ No newline at end of file diff --git a/technology/applications/cli/intermodal.md b/technology/applications/cli/intermodal.md index e428695..fbd9880 100644 --- a/technology/applications/cli/intermodal.md +++ b/technology/applications/cli/intermodal.md @@ -5,7 +5,7 @@ repo: https://github.com/casey/intermodal --- # Intermodal [Repo](https://github.com/casey/intermodal) -Intermodal is a user-friendly and featureful command-line [BitTorrent](../../internet/BitTorrent.md) metainfo utility. The binary is called `imdl` and runs on [Linux](../../linux/Linux.md), [Windows](../../windows/Windows.md), and [macOS](../../macos/macOS.md). +Intermodal is a user-friendly and featureful command-line [BitTorrent](../../internet/BitTorrent.md) metainfo utility. The binary is called `imdl` and runs on [Linux](../../linux/Linux.md), [Windows](../../windows/Windows.md), and [macOS](../../macos/macOS.md). ## Usage ### Create torrent file: diff --git a/technology/applications/cli/jless.md b/technology/applications/cli/jless.md index 9795aec..da8f31c 100644 --- a/technology/applications/cli/jless.md +++ b/technology/applications/cli/jless.md @@ -3,4 +3,4 @@ obj: application os: linux --- # Jless -[`jless`](https://jless.io/) is a command-line [JSON](../../files/JSON.md) viewer. Use it as a replacement for whatever combination of `less`, `jq`, `cat` and your editor you currently use for viewing [JSON](../../files/JSON.md) files. It is written in [Rust](../../dev/programming/languages/Rust.md) and can be installed as a single standalone binary. \ No newline at end of file +[`jless`](https://jless.io/) is a command-line [JSON](../../files/JSON.md) viewer. Use it as a replacement for whatever combination of `less`, `jq`, `cat` and your editor you currently use for viewing [JSON](../../files/JSON.md) files. It is written in [Rust](../../dev/programming/languages/Rust.md) and can be installed as a single standalone binary. \ No newline at end of file diff --git a/technology/applications/cli/jq.md b/technology/applications/cli/jq.md index e457dc6..fc8f8fb 100644 --- a/technology/applications/cli/jq.md +++ b/technology/applications/cli/jq.md @@ -8,7 +8,7 @@ jq is a lightweight and flexible command-line [JSON](../../files/JSON.md) proces ## Usage ```shell -cat data.json | jq [FILTER] +cat data.json | jq [FILTER] # Raw Data cat data.json | jq -r [FILTER] @@ -16,67 +16,67 @@ cat data.json | jq -r [FILTER] ## Filters ### Identity -The absolute simplest filter is `.` . This filter takes its input and produces the same value as output. That is, this is the identity operator. +The absolute simplest filter is `.` . This filter takes its input and produces the same value as output. That is, this is the identity operator. ### Object Identifier -The simplest _useful_ filter has the form `.foo`. When given a [JSON](../../files/JSON.md) object (aka dictionary or hash) as input, `.foo` produces the value at the key "foo" if the key is present, or null otherwise. +The simplest _useful_ filter has the form `.foo`. When given a [JSON](../../files/JSON.md) object (aka dictionary or hash) as input, `.foo` produces the value at the key "foo" if the key is present, or null otherwise. -The `.foo` syntax only works for simple, identifier-like keys, that is, keys that are all made of alphanumeric characters and underscore, and which do not start with a digit. +The `.foo` syntax only works for simple, identifier-like keys, that is, keys that are all made of alphanumeric characters and underscore, and which do not start with a digit. -If the key contains special characters or starts with a digit, you need to surround it with double quotes like this: `."foo$"`, or else `.["foo$"]`. +If the key contains special characters or starts with a digit, you need to surround it with double quotes like this: `."foo$"`, or else `.["foo$"]`. ### Array Index -When the index value is an integer, `.[]` can index arrays. Arrays are zero-based, so `.[2]` returns the third element. +When the index value is an integer, `.[]` can index arrays. Arrays are zero-based, so `.[2]` returns the third element. Negative indices are allowed, with -1 referring to the last element, -2 referring to the next to last element, and so on. ### Array/String Slice -The `.[:]` syntax can be used to return a subarray of an array or substring of a string. The array returned by `.[10:15]` will be of length 5, containing the elements from index 10 (inclusive) to index 15 (exclusive). Either index may be negative (in which case it counts backwards from the end of the array), or omitted (in which case it refers to the start or end of the array). Indices are zero-based. +The `.[:]` syntax can be used to return a subarray of an array or substring of a string. The array returned by `.[10:15]` will be of length 5, containing the elements from index 10 (inclusive) to index 15 (exclusive). Either index may be negative (in which case it counts backwards from the end of the array), or omitted (in which case it refers to the start or end of the array). Indices are zero-based. ### Array/Object Value Iterator -If you use the `.[index]` syntax, but omit the index entirely, it will return _all_ of the elements of an array. Running `.[]` with the input `[1,2,3]` will produce the numbers as three separate results, rather than as a single array. A filter of the form `.foo[]` is equivalent to `.foo | .[]`. +If you use the `.[index]` syntax, but omit the index entirely, it will return _all_ of the elements of an array. Running `.[]` with the input `[1,2,3]` will produce the numbers as three separate results, rather than as a single array. A filter of the form `.foo[]` is equivalent to `.foo | .[]`. You can also use this on an object, and it will return all the values of the object. Note that the iterator operator is a generator of values. ### Comma -If two filters are separated by a comma, then the same input will be fed into both and the two filters' output value streams will be concatenated in order: first, all of the outputs produced by the left expression, and then all of the outputs produced by the right. For instance, filter `.foo, .bar`, produces both the "foo" fields and "bar" fields as separate outputs. +If two filters are separated by a comma, then the same input will be fed into both and the two filters' output value streams will be concatenated in order: first, all of the outputs produced by the left expression, and then all of the outputs produced by the right. For instance, filter `.foo, .bar`, produces both the "foo" fields and "bar" fields as separate outputs. -The `,` operator is one way to contruct generators. +The `,` operator is one way to contruct generators. ### Pipe The `|` operator combines two filters by feeding the output(s) of the one on the left into the input of the one on the right. It's similar to the Unix [shell](Shell.md)'s pipe, if you're used to that. -If the one on the left produces multiple results, the one on the right will be run for each of those results. So, the expression `.[] | .foo` retrieves the "foo" field of each element of the input array. This is a cartesian product, which can be surprising. +If the one on the left produces multiple results, the one on the right will be run for each of those results. So, the expression `.[] | .foo` retrieves the "foo" field of each element of the input array. This is a cartesian product, which can be surprising. -Note that `.a.b.c` is the same as `.a | .b | .c`. +Note that `.a.b.c` is the same as `.a | .b | .c`. -Note too that `.` is the input value at the particular stage in a "pipeline", specifically: where the `.` expression appears. Thus `.a | . | .b` is the same as `.a.b`, as the `.` in the middle refers to whatever value `.a` produced. +Note too that `.` is the input value at the particular stage in a "pipeline", specifically: where the `.` expression appears. Thus `.a | . | .b` is the same as `.a.b`, as the `.` in the middle refers to whatever value `.a` produced. ### Array Construction: `[]` -As in [JSON](../../files/JSON.md), `[]` is used to construct arrays, as in `[1,2,3]`. The elements of the arrays can be any jq expression, including a pipeline. All of the results produced by all of the expressions are collected into one big array. You can use it to construct an array out of a known quantity of values (as in `[.foo, .bar, .baz]`) or to "collect" all the results of a filter into an array (as in `[.items[].name]`) +As in [JSON](../../files/JSON.md), `[]` is used to construct arrays, as in `[1,2,3]`. The elements of the arrays can be any jq expression, including a pipeline. All of the results produced by all of the expressions are collected into one big array. You can use it to construct an array out of a known quantity of values (as in `[.foo, .bar, .baz]`) or to "collect" all the results of a filter into an array (as in `[.items[].name]`) -Once you understand the "," operator, you can look at jq's array syntax in a different light: the expression `[1,2,3]` is not using a built-in syntax for comma-separated arrays, but is instead applying the `[]` operator (collect results) to the expression 1,2,3 (which produces three different results). +Once you understand the "," operator, you can look at jq's array syntax in a different light: the expression `[1,2,3]` is not using a built-in syntax for comma-separated arrays, but is instead applying the `[]` operator (collect results) to the expression 1,2,3 (which produces three different results). -If you have a filter `X` that produces four results, then the expression `[X]` will produce a single result, an array of four elements. +If you have a filter `X` that produces four results, then the expression `[X]` will produce a single result, an array of four elements. ### Object Construction: `{}` -Like [JSON](../../files/JSON.md), `{}` is for constructing objects (aka dictionaries or hashes), as in: `{"a": 42, "b": 17}`. +Like [JSON](../../files/JSON.md), `{}` is for constructing objects (aka dictionaries or hashes), as in: `{"a": 42, "b": 17}`. -If the keys are "identifier-like", then the quotes can be left off, as in `{a:42, b:17}`. Variable references as key expressions use the value of the variable as the key. Key expressions other than constant literals, identifiers, or variable references, need to be parenthesized, e.g., `{("a"+"b"):59}`. +If the keys are "identifier-like", then the quotes can be left off, as in `{a:42, b:17}`. Variable references as key expressions use the value of the variable as the key. Key expressions other than constant literals, identifiers, or variable references, need to be parenthesized, e.g., `{("a"+"b"):59}`. The value can be any expression (although you may need to wrap it in parentheses if, for example, it contains colons), which gets applied to the {} expression's input (remember, all filters have an input and an output). ``` {foo: .bar} ``` -will produce the [JSON](../../files/JSON.md) object `{"foo": 42}` if given the [JSON](../../files/JSON.md) object `{"bar":42, "baz":43}` as its input. You can use this to select particular fields of an object: if the input is an object with "user", "title", "id", and "content" fields and you just want "user" and "title", you can write +will produce the [JSON](../../files/JSON.md) object `{"foo": 42}` if given the [JSON](../../files/JSON.md) object `{"bar":42, "baz":43}` as its input. You can use this to select particular fields of an object: if the input is an object with "user", "title", "id", and "content" fields and you just want "user" and "title", you can write ``` {user: .user, title: .title} ``` -Because that is so common, there's a shortcut syntax for it: `{user, title}`. +Because that is so common, there's a shortcut syntax for it: `{user, title}`. If one of the expressions produces multiple results, multiple dictionaries will be produced. If the input's ``` @@ -106,55 +106,55 @@ produces ## Functions ### `has(key)` -The builtin function `has` returns whether the input object has the given key, or the input array has an element at the given index. +The builtin function `has` returns whether the input object has the given key, or the input array has an element at the given index. ### `map(f)`, `map_values(f)` -For any filter `f`, `map(f)` and `map_values(f)` apply `f` to each of the values in the input array or object, that is, to the values of `.[]`. +For any filter `f`, `map(f)` and `map_values(f)` apply `f` to each of the values in the input array or object, that is, to the values of `.[]`. -In the absence of errors, `map(f)` always outputs an array whereas `map_values(f)` outputs an array if given an array, or an object if given an object. +In the absence of errors, `map(f)` always outputs an array whereas `map_values(f)` outputs an array if given an array, or an object if given an object. -When the input to `map_values(f)` is an object, the output object has the same keys as the input object except for those keys whose values when piped to `f` produce no values at all. +When the input to `map_values(f)` is an object, the output object has the same keys as the input object except for those keys whose values when piped to `f` produce no values at all. -`map(f)` is equivalent to `[.[] | f]` and `map_values(f)` is equivalent to `.[] |= f`. +`map(f)` is equivalent to `[.[] | f]` and `map_values(f)` is equivalent to `.[] |= f`. ### `del(path)` -The builtin function `del` removes a key and its corresponding value from an object. +The builtin function `del` removes a key and its corresponding value from an object. ### `reverse` This function reverses an array. ### `contains(element)` -The filter `contains(b)` will produce true if b is completely contained within the input. A string B is contained in a string A if B is a substring of A. An array B is contained in an array A if all elements in B are contained in any element in A. An object B is contained in object A if all of the values in B are contained in the value in A with the same key. All other types are assumed to be contained in each other if they are equal. +The filter `contains(b)` will produce true if b is completely contained within the input. A string B is contained in a string A if B is a substring of A. An array B is contained in an array A if all elements in B are contained in any element in A. An object B is contained in object A if all of the values in B are contained in the value in A with the same key. All other types are assumed to be contained in each other if they are equal. ### `startswith(str)` -Outputs `true` if . starts with the given string argument. +Outputs `true` if . starts with the given string argument. -### `endswith(str)`  -Outputs `true` if . ends with the given string argument. +### `endswith(str)` +Outputs `true` if . ends with the given string argument. ### `split(str)` Splits an input string on the separator argument. ### `join(str)` -Joins the array of elements given as input, using the argument as separator. It is the inverse of `split`: that is, running `split("foo") | join("foo")` over any input string returns said input string. +Joins the array of elements given as input, using the argument as separator. It is the inverse of `split`: that is, running `split("foo") | join("foo")` over any input string returns said input string. ## Conditionals ### if-then-else-end -`if A then B else C end` will act the same as `B` if `A` produces a value other than false or null, but act the same as `C` otherwise. +`if A then B else C end` will act the same as `B` if `A` produces a value other than false or null, but act the same as `C` otherwise. -`if A then B end` is the same as `if A then B else . end`. That is, the `else` branch is optional, and if absent is the same as `.`. This also applies to `elif` with absent ending `else` branch. +`if A then B end` is the same as `if A then B else . end`. That is, the `else` branch is optional, and if absent is the same as `.`. This also applies to `elif` with absent ending `else` branch. -Checking for false or null is a simpler notion of "truthiness" than is found in JavaScript or [Python](../../dev/programming/languages/Python.md), but it means that you'll sometimes have to be more explicit about the condition you want. You can't test whether, e.g. a string is empty using `if .name then A else B end`; you'll need something like `if .name == "" then A else B end` instead. +Checking for false or null is a simpler notion of "truthiness" than is found in JavaScript or [Python](../../dev/programming/languages/Python.md), but it means that you'll sometimes have to be more explicit about the condition you want. You can't test whether, e.g. a string is empty using `if .name then A else B end`; you'll need something like `if .name == "" then A else B end` instead. -If the condition `A` produces multiple results, then `B` is evaluated once for each result that is not false or null, and `C` is evaluated once for each false or null. +If the condition `A` produces multiple results, then `B` is evaluated once for each result that is not false or null, and `C` is evaluated once for each false or null. -More cases can be added to an if using `elif A then B` syntax. +More cases can be added to an if using `elif A then B` syntax. Example: `jq 'if . == 0 then "zero" elif . == 1 then "one" else "many" end'` ### Alternative Operator `//` -The `//` operator produces all the values of its left-hand side that are neither `false` nor `null`, or, if the left-hand side produces no values other than `false` or `null`, then `//` produces all the values of its right-hand side. +The `//` operator produces all the values of its left-hand side that are neither `false` nor `null`, or, if the left-hand side produces no values other than `false` or `null`, then `//` produces all the values of its right-hand side. -A filter of the form `a // b` produces all the results of `a` that are not `false` or `null`. If `a` produces no results, or no results other than `false` or `null`, then `a // b` produces the results of `b`. +A filter of the form `a // b` produces all the results of `a` that are not `false` or `null`. If `a` produces no results, or no results other than `false` or `null`, then `a // b` produces the results of `b`. -This is useful for providing defaults: `.foo // 1` will evaluate to `1` if there's no `.foo` element in the input. \ No newline at end of file +This is useful for providing defaults: `.foo // 1` will evaluate to `1` if there's no `.foo` element in the input. \ No newline at end of file diff --git a/technology/applications/cli/just.md b/technology/applications/cli/just.md index 178662d..450a077 100644 --- a/technology/applications/cli/just.md +++ b/technology/applications/cli/just.md @@ -4,12 +4,12 @@ website: https://just.systems/ repo: https://github.com/casey/just --- # just -`just` is a handy way to save and run project-specific commands. -Commands, called recipes, are stored in a file called `justfile` with syntax inspired by `make`: +`just` is a handy way to save and run project-specific commands. +Commands, called recipes, are stored in a file called `justfile` with syntax inspired by `make`: ![Screenshot][Screenshot] -You can then run them with `just RECIPE`: +You can then run them with `just RECIPE`: ```shell $ just test-all cc *.c -o main @@ -50,7 +50,7 @@ just --variables | `-d, --working-directory ` | Use \ as working directory. `--justfile` must also be set | ## Quick Start -Create a file named `justfile` in the root of your project with the following contents: +Create a file named `justfile` in the root of your project with the following contents: ``` recipe-name: echo 'This is a recipe!' @@ -60,11 +60,11 @@ another-recipe: @echo 'This is another recipe.' ``` -When you invoke `just` it looks for file `justfile` in the current directory and upwards, so you can invoke it from any subdirectory of your project. +When you invoke `just` it looks for file `justfile` in the current directory and upwards, so you can invoke it from any subdirectory of your project. -The search for a `justfile` is case insensitive, so any case, like `Justfile`, `JUSTFILE`, or `JuStFiLe`, will work. `just` will also look for files with the name `.justfile`, in case you’d like to hide a `justfile`. +The search for a `justfile` is case insensitive, so any case, like `Justfile`, `JUSTFILE`, or `JuStFiLe`, will work. `just` will also look for files with the name `.justfile`, in case you’d like to hide a `justfile`. -Running `just` with no arguments runs the first recipe in the `justfile`: +Running `just` with no arguments runs the first recipe in the `justfile`: ```shell $ just echo 'This is a recipe!' @@ -77,16 +77,16 @@ $ just another-recipe This is another recipe. ``` -`just` prints each command to standard error before running it, which is why `echo 'This is a recipe!'` was printed. This is suppressed for lines starting with `@`, which is why `echo 'This is another recipe.'` was not printed. +`just` prints each command to standard error before running it, which is why `echo 'This is a recipe!'` was printed. This is suppressed for lines starting with `@`, which is why `echo 'This is another recipe.'` was not printed. -Recipes stop running if a command fails. Here `cargo publish` will only run if `cargo test` succeeds: +Recipes stop running if a command fails. Here `cargo publish` will only run if `cargo test` succeeds: ``` publish: cargo test # tests passed, time to publish! cargo publish ``` -Recipes can depend on other recipes. Here the `test` recipe depends on the `build` recipe, so `build` will run before `test`: +Recipes can depend on other recipes. Here the `test` recipe depends on the `build` recipe, so `build` will run before `test`: ``` build: @@ -115,7 +115,7 @@ cc main.c foo.c bar.c -o main ## Features ### Default Recipe -When `just` is invoked without a recipe, it runs the first recipe in the `justfile`. This recipe might be the most frequently run command in the project, like running the tests: +When `just` is invoked without a recipe, it runs the first recipe in the `justfile`. This recipe might be the most frequently run command in the project, like running the tests: ``` test: cargo test @@ -135,14 +135,14 @@ lint: echo Linting ``` -If no recipe makes sense as the default recipe, you can add a recipe to the beginning of your `justfile` that lists the available recipes: +If no recipe makes sense as the default recipe, you can add a recipe to the beginning of your `justfile` that lists the available recipes: ``` default: @just --list ``` ### Listing Available Recipes -Recipes can be listed in alphabetical order with `just --list`: +Recipes can be listed in alphabetical order with `just --list`: ```shell $ just --list Available recipes: @@ -152,21 +152,21 @@ Available recipes: lint ``` -`just --summary` is more concise: +`just --summary` is more concise: ```shell $ just --summary build test deploy lint ``` -If you'd like `just` to default to listing the recipes in the `justfile`, you can use this as your default recipe: +If you'd like `just` to default to listing the recipes in the `justfile`, you can use this as your default recipe: ```just default: @just --list ``` -> Note that you may need to add `--justfile {{justfile()}}` to the line above above. Without it, if you executed `just -f /some/distant/justfile -d .` or `just -f ./non-standard-justfile`, the plain `just --list` inside the recipe would not necessarily use the file you provided. It would try to find a justfile in your current path, maybe even resulting in a `No justfile found` error. +> Note that you may need to add `--justfile {{justfile()}}` to the line above above. Without it, if you executed `just -f /some/distant/justfile -d .` or `just -f ./non-standard-justfile`, the plain `just --list` inside the recipe would not necessarily use the file you provided. It would try to find a justfile in your current path, maybe even resulting in a `No justfile found` error. -The heading text can be customized with `--list-heading`: +The heading text can be customized with `--list-heading`: ```shell $ just --list --list-heading $'Cool stuff…\n' Cool stuff… @@ -191,7 +191,7 @@ Building! ``` ### Settings -Settings control interpretation and execution. Each setting may be specified at most once, anywhere in the `justfile`. +Settings control interpretation and execution. Each setting may be specified at most once, anywhere in the `justfile`. For example: ```just @@ -205,36 +205,36 @@ foo: #### Table of Settings | Name | Value | Default | Description | | ------------------------- | ------------------ | ------- | --------------------------------------------------------------------------------------------- | -| `allow-duplicate-recipes` | boolean | `false` | Allow recipes appearing later in a `justfile` to override earlier recipes with the same name. | -| `dotenv-filename` | string | - | Load a `.env` file with a custom name, if present. | -| `dotenv-load` | boolean | `false` | Load a `.env` file, if present. | -| `dotenv-path` | string | - | Load a `.env` file from a custom path, if present. Overrides `dotenv-filename`. | +| `allow-duplicate-recipes` | boolean | `false` | Allow recipes appearing later in a `justfile` to override earlier recipes with the same name. | +| `dotenv-filename` | string | - | Load a `.env` file with a custom name, if present. | +| `dotenv-load` | boolean | `false` | Load a `.env` file, if present. | +| `dotenv-path` | string | - | Load a `.env` file from a custom path, if present. Overrides `dotenv-filename`. | | `export` | boolean | `false` | Export all variables as [environment variables](../../linux/Environment%20Variables.md). | -| `fallback` | boolean | `false` | Search `justfile` in parent directory if the first recipe on the command line is not found. | -| `ignore-comments` | boolean | `false` | Ignore recipe lines beginning with `#`. | +| `fallback` | boolean | `false` | Search `justfile` in parent directory if the first recipe on the command line is not found. | +| `ignore-comments` | boolean | `false` | Ignore recipe lines beginning with `#`. | | `positional-arguments` | boolean | `false` | Pass positional arguments. | | `shell` | `[COMMAND, ARGS…]` | - | Set the command used to invoke recipes and evaluate backticks. | -| `tempdir` | string | - | Create temporary directories in `tempdir` instead of the system default temporary directory. | -| `windows-powershell` | boolean | `false` | Use PowerShell on [Windows](../../windows/Windows.md) as default [shell](Shell.md). (Deprecated. Use `windows-shell` instead. | +| `tempdir` | string | - | Create temporary directories in `tempdir` instead of the system default temporary directory. | +| `windows-powershell` | boolean | `false` | Use PowerShell on [Windows](../../windows/Windows.md) as default [shell](Shell.md). (Deprecated. Use `windows-shell` instead. | | `windows-shell` | `[COMMAND, ARGS…]` | - | Set the command used to invoke recipes and evaluate backticks. | #### Dotenv Settings -If `dotenv-load`, `dotenv-filename` or `dotenv-path` is set, `just` will load [environment variables](../../linux/Environment%20Variables.md) from a file. +If `dotenv-load`, `dotenv-filename` or `dotenv-path` is set, `just` will load [environment variables](../../linux/Environment%20Variables.md) from a file. -If `dotenv-path` is set, `just` will look for a file at the given path. +If `dotenv-path` is set, `just` will look for a file at the given path. -Otherwise, `just` looks for a file named `.env` by default, unless `dotenv-filename` set, in which case the value of `dotenv-filename` is used. This file can be located in the same directory as your `justfile` or in a parent directory. +Otherwise, `just` looks for a file named `.env` by default, unless `dotenv-filename` set, in which case the value of `dotenv-filename` is used. This file can be located in the same directory as your `justfile` or in a parent directory. -The loaded variables are [environment variables](../../linux/Environment%20Variables.md), not `just` variables, and so must be accessed using `$VARIABLE_NAME` in recipes and backticks. +The loaded variables are [environment variables](../../linux/Environment%20Variables.md), not `just` variables, and so must be accessed using `$VARIABLE_NAME` in recipes and backticks. -For example, if your `.env` file contains: +For example, if your `.env` file contains: ```shell # a comment, will be ignored DATABASE_ADDRESS=localhost:6379 SERVER_PORT=1337 ``` -And your `justfile` contains: +And your `justfile` contains: ```just set dotenv-load @@ -243,7 +243,7 @@ serve: ./server --database $DATABASE_ADDRESS --port $SERVER_PORT ``` -`just serve` will output: +`just serve` will output: ```shell $ just serve Starting server with database localhost:6379 on port 1337… @@ -251,7 +251,7 @@ Starting server with database localhost:6379 on port 1337… ``` #### Positional Arguments -If `positional-arguments` is `true`, recipe arguments will be passed as positional arguments to commands. For linewise recipes, argument `$0` will be the name of the recipe. +If `positional-arguments` is `true`, recipe arguments will be passed as positional arguments to commands. For linewise recipes, argument `$0` will be the name of the recipe. For example, running this recipe: ```just @@ -269,7 +269,7 @@ foo hello ``` -When using an `sh`-compatible [shell](Shell.md), such as [`bash`](bash.md) or [`zsh`](zsh.md), `$@` expands to the positional arguments given to the recipe, starting from one. When used within double quotes as `"$@"`, arguments including whitespace will be passed on as if they were double-quoted. That is, `"$@"` is equivalent to `"$1" "$2"`… When there are no positional parameters, `"$@"` and `$@` expand to nothing (i.e., they are removed). +When using an `sh`-compatible [shell](Shell.md), such as [`bash`](bash.md) or [`zsh`](zsh.md), `$@` expands to the positional arguments given to the recipe, starting from one. When used within double quotes as `"$@"`, arguments including whitespace will be passed on as if they were double-quoted. That is, `"$@"` is equivalent to `"$1" "$2"`… When there are no positional parameters, `"$@"` and `$@` expand to nothing (i.e., they are removed). This example recipe will print arguments one by one on separate lines: ```just @@ -279,7 +279,7 @@ set positional-arguments bash -c 'while (( "$#" )); do echo - $1; shift; done' -- "$@" ``` -Running it with _two_ arguments: +Running it with _two_ arguments: ```shell $ just test foo "bar baz" - foo @@ -287,7 +287,7 @@ $ just test foo "bar baz" ``` #### Shell -The `shell` setting controls the command used to invoke recipe lines and backticks. Shebang recipes are unaffected. +The `shell` setting controls the command used to invoke recipe lines and backticks. Shebang recipes are unaffected. ```just # use python3 to execute recipe lines and backticks set shell := ["python3", "-c"] @@ -300,10 +300,10 @@ foo: print("{{foos}}") ``` -`just` passes the command to be executed as an argument. Many shells will need an additional flag, often `-c`, to make them evaluate the first argument. +`just` passes the command to be executed as an argument. Many shells will need an additional flag, often `-c`, to make them evaluate the first argument. ### Documentation Comments -Comments immediately preceding a recipe will appear in `just --list`: +Comments immediately preceding a recipe will appear in `just --list`: ```just # build stuff build: @@ -322,7 +322,7 @@ Available recipes: ``` ### Variables and Substitution -Variables, strings, concatenation, path joining, and substitution using `{{…}}` are supported: +Variables, strings, concatenation, path joining, and substitution using `{{…}}` are supported: ```just tmpdir := `mktemp -d` version := "0.2.7" @@ -339,7 +339,7 @@ publish: ``` #### Joining Paths -The `/` operator can be used to join two strings with a slash: +The `/` operator can be used to join two strings with a slash: ```just foo := "a" / "b" ``` @@ -349,7 +349,7 @@ $ just --evaluate foo a/b ``` -Note that a `/` is added even if one is already present: +Note that a `/` is added even if one is already present: ```just foo := "a/" bar := foo / "b" @@ -370,14 +370,14 @@ $ just --evaluate foo /b ``` -#### Escaping `{{` -To write a recipe containing `{{`, use `{{{{`: +#### Escaping `{{` +To write a recipe containing `{{`, use `{{{{`: ```just braces: echo 'I {{{{LOVE}} curly braces!' ``` -(An unmatched `}}` is ignored, so it doesn't need to be escaped.) +(An unmatched `}}` is ignored, so it doesn't need to be escaped.) Another option is to put all the text you'd like to escape inside of an interpolation: ```just @@ -385,14 +385,14 @@ braces: echo '{{'I {{LOVE}} curly braces!'}}' ``` -Yet another option is to use `{{ "{{" }}`: +Yet another option is to use `{{ "{{" }}`: ```just braces: echo 'I {{ "{{" }}LOVE}} curly braces!' ``` ### Ignoring Errors -Normally, if a command returns a non-zero exit status, execution will stop. To continue execution after a command, even if it fails, prefix the command with `-`: +Normally, if a command returns a non-zero exit status, execution will stop. To continue execution after a command, even if it fails, prefix the command with `-`: ```just foo: -cat foo @@ -408,13 +408,13 @@ Done! ``` ### Functions -`just` provides a few built-in functions that might be useful when writing recipes. +`just` provides a few built-in functions that might be useful when writing recipes. #### System Information -- `arch()` — Instruction set architecture. Possible values are: `"aarch64"`, `"arm"`, `"asmjs"`, `"hexagon"`, `"mips"`, `"msp430"`, `"powerpc"`, `"powerpc64"`, `"s390x"`, `"sparc"`, `"wasm32"`, `"x86"`, `"x86_64"`, and `"xcore"`. -- `num_cpus()` - Number of logical CPUs. -- `os()` — Operating system. Possible values are: `"android"`, `"bitrig"`, `"dragonfly"`, `"emscripten"`, `"freebsd"`, `"haiku"`, `"ios"`, `"linux"`, `"macos"`, `"netbsd"`, `"openbsd"`, `"solaris"`, and `"windows"`. -- `os_family()` — Operating system family; possible values are: `"unix"` and `"windows"`. +- `arch()` — Instruction set architecture. Possible values are: `"aarch64"`, `"arm"`, `"asmjs"`, `"hexagon"`, `"mips"`, `"msp430"`, `"powerpc"`, `"powerpc64"`, `"s390x"`, `"sparc"`, `"wasm32"`, `"x86"`, `"x86_64"`, and `"xcore"`. +- `num_cpus()` - Number of logical CPUs. +- `os()` — Operating system. Possible values are: `"android"`, `"bitrig"`, `"dragonfly"`, `"emscripten"`, `"freebsd"`, `"haiku"`, `"ios"`, `"linux"`, `"macos"`, `"netbsd"`, `"openbsd"`, `"solaris"`, and `"windows"`. +- `os_family()` — Operating system family; possible values are: `"unix"` and `"windows"`. For example: ```just @@ -428,7 +428,7 @@ This is an x86_64 machine ``` #### [Environment Variables](../../linux/Environment%20Variables.md) -- `env_var(key)` — Retrieves the environment variable with name `key`, aborting if it is not present. +- `env_var(key)` — Retrieves the environment variable with name `key`, aborting if it is not present. ```just home_dir := env_var('HOME') @@ -442,14 +442,14 @@ $ just /home/user1 ``` -- `env_var_or_default(key, default)` — Retrieves the environment variable with name `key`, returning `default` if it is not present. -- `env(key)` — Alias for `env_var(key)`. -- `env(key, default)` — Alias for `env_var_or_default(key, default)`. +- `env_var_or_default(key, default)` — Retrieves the environment variable with name `key`, returning `default` if it is not present. +- `env(key)` — Alias for `env_var(key)`. +- `env(key, default)` — Alias for `env_var_or_default(key, default)`. #### Invocation Directory -- `invocation_directory()` - Retrieves the absolute path to the current directory when `just` was invoked. +- `invocation_directory()` - Retrieves the absolute path to the current directory when `just` was invoked. -For example, to call `rustfmt` on files just under the "current directory" (from the user/invoker's perspective), use the following rule: +For example, to call `rustfmt` on files just under the "current directory" (from the user/invoker's perspective), use the following rule: ```just rustfmt: find {{invocation_directory()}} -name \*.rs -exec rustfmt {} \; @@ -462,17 +462,17 @@ build: ``` #### Justfile and Justfile Directory -- `justfile()` - Retrieves the path of the current `justfile`. -- `justfile_directory()` - Retrieves the path of the parent directory of the current `justfile`. +- `justfile()` - Retrieves the path of the current `justfile`. +- `justfile_directory()` - Retrieves the path of the parent directory of the current `justfile`. -For example, to run a command relative to the location of the current `justfile`: +For example, to run a command relative to the location of the current `justfile`: ```just script: ./{{justfile_directory()}}/scripts/some_script ``` #### Just Executable -- `just_executable()` - Absolute path to the `just` executable. +- `just_executable()` - Absolute path to the `just` executable. For example: ```just @@ -486,54 +486,54 @@ The executable is at: /bin/just ``` #### String Manipulation -- `quote(s)` - Replace all single quotes with `'\''` and prepend and append single quotes to `s`. This is sufficient to escape special characters for many shells, including most Bourne [shell](Shell.md) descendants. -- `replace(s, from, to)` - Replace all occurrences of `from` in `s` to `to`. -- `replace_regex(s, regex, replacement)` - Replace all occurrences of `regex` in `s` to `replacement`. Regular expressions are provided by the [Rust `regex` crate](https://docs.rs/regex/latest/regex/). See the [syntax documentation](https://docs.rs/regex/latest/regex/#syntax) for usage examples. Capture groups are supported. The `replacement` string uses [Replacement string syntax](https://docs.rs/regex/latest/regex/struct.Regex.html#replacement-string-syntax). -- `trim(s)` - Remove leading and trailing whitespace from `s`. -- `trim_end(s)` - Remove trailing whitespace from `s`. -- `trim_end_match(s, pat)` - Remove suffix of `s` matching `pat`. -- `trim_end_matches(s, pat)` - Repeatedly remove suffixes of `s` matching `pat`. -- `trim_start(s)` - Remove leading whitespace from `s`. -- `trim_start_match(s, pat)` - Remove prefix of `s` matching `pat`. -- `trim_start_matches(s, pat)` - Repeatedly remove prefixes of `s` matching `pat`. +- `quote(s)` - Replace all single quotes with `'\''` and prepend and append single quotes to `s`. This is sufficient to escape special characters for many shells, including most Bourne [shell](Shell.md) descendants. +- `replace(s, from, to)` - Replace all occurrences of `from` in `s` to `to`. +- `replace_regex(s, regex, replacement)` - Replace all occurrences of `regex` in `s` to `replacement`. Regular expressions are provided by the [Rust `regex` crate](https://docs.rs/regex/latest/regex/). See the [syntax documentation](https://docs.rs/regex/latest/regex/#syntax) for usage examples. Capture groups are supported. The `replacement` string uses [Replacement string syntax](https://docs.rs/regex/latest/regex/struct.Regex.html#replacement-string-syntax). +- `trim(s)` - Remove leading and trailing whitespace from `s`. +- `trim_end(s)` - Remove trailing whitespace from `s`. +- `trim_end_match(s, pat)` - Remove suffix of `s` matching `pat`. +- `trim_end_matches(s, pat)` - Repeatedly remove suffixes of `s` matching `pat`. +- `trim_start(s)` - Remove leading whitespace from `s`. +- `trim_start_match(s, pat)` - Remove prefix of `s` matching `pat`. +- `trim_start_matches(s, pat)` - Repeatedly remove prefixes of `s` matching `pat`. #### Case Conversion -- `capitalize(s)` - Convert first character of `s` to uppercase and the rest to lowercase. -- `kebabcase(s)` - Convert `s` to `kebab-case`. -- `lowercamelcase(s)` - Convert `s` to `lowerCamelCase`. -- `lowercase(s)` - Convert `s` to lowercase. -- `shoutykebabcase(s)` - Convert `s` to `SHOUTY-KEBAB-CASE`. -- `shoutysnakecase(s)` - Convert `s` to `SHOUTY_SNAKE_CASE`. -- `snakecase(s)` - Convert `s` to `snake_case`. -- `titlecase(s)` - Convert `s` to `Title Case`. -- `uppercamelcase(s)` - Convert `s` to `UpperCamelCase`. -- `uppercase(s)` - Convert `s` to uppercase. +- `capitalize(s)` - Convert first character of `s` to uppercase and the rest to lowercase. +- `kebabcase(s)` - Convert `s` to `kebab-case`. +- `lowercamelcase(s)` - Convert `s` to `lowerCamelCase`. +- `lowercase(s)` - Convert `s` to lowercase. +- `shoutykebabcase(s)` - Convert `s` to `SHOUTY-KEBAB-CASE`. +- `shoutysnakecase(s)` - Convert `s` to `SHOUTY_SNAKE_CASE`. +- `snakecase(s)` - Convert `s` to `snake_case`. +- `titlecase(s)` - Convert `s` to `Title Case`. +- `uppercamelcase(s)` - Convert `s` to `UpperCamelCase`. +- `uppercase(s)` - Convert `s` to uppercase. #### Path Manipulation ##### Fallible -- `absolute_path(path)` - Absolute path to relative `path` in the working directory. `absolute_path("./bar.txt")` in directory `/foo` is `/foo/bar.txt`. -- `extension(path)` - Extension of `path`. `extension("/foo/bar.txt")` is `txt`. -- `file_name(path)` - File name of `path` with any leading directory components removed. `file_name("/foo/bar.txt")` is `bar.txt`. -- `file_stem(path)` - File name of `path` without extension. `file_stem("/foo/bar.txt")` is `bar`. -- `parent_directory(path)` - Parent directory of `path`. `parent_directory("/foo/bar.txt")` is `/foo`. -- `without_extension(path)` - `path` without extension. `without_extension("/foo/bar.txt")` is `/foo/bar`. +- `absolute_path(path)` - Absolute path to relative `path` in the working directory. `absolute_path("./bar.txt")` in directory `/foo` is `/foo/bar.txt`. +- `extension(path)` - Extension of `path`. `extension("/foo/bar.txt")` is `txt`. +- `file_name(path)` - File name of `path` with any leading directory components removed. `file_name("/foo/bar.txt")` is `bar.txt`. +- `file_stem(path)` - File name of `path` without extension. `file_stem("/foo/bar.txt")` is `bar`. +- `parent_directory(path)` - Parent directory of `path`. `parent_directory("/foo/bar.txt")` is `/foo`. +- `without_extension(path)` - `path` without extension. `without_extension("/foo/bar.txt")` is `/foo/bar`. These functions can fail, for example if a path does not have an extension, which will halt execution. ##### Infallible -- `clean(path)` - Simplify `path` by removing extra path separators, intermediate `.` components, and `..` where possible. `clean("foo//bar")` is `foo/bar`, `clean("foo/..")` is `.`, `clean("foo/./bar")` is `foo/bar`. -- `join(a, b…)` - _This function uses `/` on Unix and `\` on [Windows](../../windows/Windows.md), which can be lead to unwanted behavior. The `/` operator, e.g., `a / b`, which always uses `/`, should be considered as a replacement unless `\`s are specifically desired on [Windows](../../windows/Windows.md)._ Join path `a` with path `b`. `join("foo/bar", "baz")` is `foo/bar/baz`. Accepts two or more arguments. +- `clean(path)` - Simplify `path` by removing extra path separators, intermediate `.` components, and `..` where possible. `clean("foo//bar")` is `foo/bar`, `clean("foo/..")` is `.`, `clean("foo/./bar")` is `foo/bar`. +- `join(a, b…)` - _This function uses `/` on Unix and `\` on [Windows](../../windows/Windows.md), which can be lead to unwanted behavior. The `/` operator, e.g., `a / b`, which always uses `/`, should be considered as a replacement unless `\`s are specifically desired on [Windows](../../windows/Windows.md)._ Join path `a` with path `b`. `join("foo/bar", "baz")` is `foo/bar/baz`. Accepts two or more arguments. #### Filesystem Access -- `path_exists(path)` - Returns `true` if the path points at an existing entity and `false` otherwise. Traverses symbolic links, and returns `false` if the path is inaccessible or points to a broken symlink. +- `path_exists(path)` - Returns `true` if the path points at an existing entity and `false` otherwise. Traverses symbolic links, and returns `false` if the path is inaccessible or points to a broken symlink. #### Error Reporting -- `error(message)` - Abort execution and report error `message` to user. +- `error(message)` - Abort execution and report error `message` to user. #### UUID and Hash Generation -- `sha256(string)` - Return the [SHA](../../cryptography/SHA.md)-256 hash of `string` as a hexadecimal string. -- `sha256_file(path)` - Return the [SHA](../../cryptography/SHA.md)-256 hash of the file at `path` as a hexadecimal string. -- `uuid()` - Return a randomly generated UUID. +- `sha256(string)` - Return the [SHA](../../cryptography/SHA.md)-256 hash of `string` as a hexadecimal string. +- `sha256_file(path)` - Return the [SHA](../../cryptography/SHA.md)-256 hash of the file at `path` as a hexadecimal string. +- `uuid()` - Return a randomly generated UUID. ### Recipe Attributes Recipes may be annotated with attributes that change their behavior. @@ -546,7 +546,7 @@ Recipes may be annotated with attributes that change their behavior. | `[macos]` | Enable recipe on [MacOS](../../macos/macOS.md). | | `[unix]` | Enable recipe on Unixes. (Includes [MacOS](../../macos/macOS.md)). | | `[windows]` | Enable recipe on [Windows](../../windows/Windows.md). | -| `[private]`1 | See Private Recipes. | +| `[private]`1 | See Private Recipes. | A recipe can have multiple attributes, either on multiple lines: ```just @@ -564,9 +564,9 @@ foo: ``` #### Enabling and Disabling Recipes -The `[linux]`, `[macos]`, `[unix]`, and `[windows]` attributes are configuration attributes. By default, recipes are always enabled. A recipe with one or more configuration attributes will only be enabled when one or more of those configurations is active. +The `[linux]`, `[macos]`, `[unix]`, and `[windows]` attributes are configuration attributes. By default, recipes are always enabled. A recipe with one or more configuration attributes will only be enabled when one or more of those configurations is active. -This can be used to write `justfile`s that behave differently depending on which operating system they run on. The `run` recipe in this `justfile` will compile and run `main.c`, using a different C compiler and using the correct output binary name for that compiler depending on the operating system: +This can be used to write `justfile`s that behave differently depending on which operating system they run on. The `run` recipe in this `justfile` will compile and run `main.c`, using a different C compiler and using the correct output binary name for that compiler depending on the operating system: ```just [unix] @@ -581,9 +581,9 @@ run: ``` #### Disabling Changing Directory -`just` normally executes recipes with the current directory set to the directory that contains the `justfile`. This can be disabled using the `[no-cd]` attribute. This can be used to create recipes which use paths relative to the invocation directory, or which operate on the current directory. +`just` normally executes recipes with the current directory set to the directory that contains the `justfile`. This can be disabled using the `[no-cd]` attribute. This can be used to create recipes which use paths relative to the invocation directory, or which operate on the current directory. -For example, this `commit` recipe: +For example, this `commit` recipe: ```just [no-cd] commit file: @@ -591,7 +591,7 @@ commit file: git commit ``` -Can be used with paths that are relative to the current directory, because `[no-cd]` prevents `just` from changing the current directory when executing `commit`. +Can be used with paths that are relative to the current directory, because `[no-cd]` prevents `just` from changing the current directory when executing `commit`. ### Command Evaluation Using Backticks Backticks can be used to store the result of commands: @@ -612,7 +612,7 @@ stuff := ``` ### Conditional Expressions -`if`/`else` expressions evaluate different branches depending on if two expressions evaluate to the same value: +`if`/`else` expressions evaluate different branches depending on if two expressions evaluate to the same value: ```just foo := if "2" == "2" { "Good!" } else { "1984" } @@ -651,7 +651,7 @@ $ just bar match ``` -Regular expressions are provided by the [regex crate](https://github.com/rust-lang/regex), whose syntax is documented on [docs.rs](https://docs.rs/regex/1.5.4/regex/#syntax). Since regular expressions commonly use backslash escape sequences, consider using single-quoted string literals, which will pass slashes to the regex parser unmolested. +Regular expressions are provided by the [regex crate](https://github.com/rust-lang/regex), whose syntax is documented on [docs.rs](https://docs.rs/regex/1.5.4/regex/#syntax). Since regular expressions commonly use backslash escape sequences, consider using single-quoted string literals, which will pass slashes to the regex parser unmolested. Conditional expressions short-circuit, which means they only evaluate one of their branches. This can be used to make sure that backtick expressions don't run when they shouldn't. ```just @@ -664,7 +664,7 @@ bar foo: echo {{ if foo == "bar" { "hello" } else { "goodbye" } }} ``` -> Note the space after the final `}`! Without the space, the interpolation will be prematurely closed. +> Note the space after the final `}`! Without the space, the interpolation will be prematurely closed. Multiple conditionals can be chained: ```just @@ -686,7 +686,7 @@ abc ``` ### Stopping execution with error -Execution can be halted with the `error` function. For example: +Execution can be halted with the `error` function. For example: ```just foo := if "hello" == "goodbye" { "xyz" @@ -722,14 +722,14 @@ $ just ./test --test linux ``` -Any number of arguments of the form `NAME=VALUE` can be passed before recipes: +Any number of arguments of the form `NAME=VALUE` can be passed before recipes: ```shell $ just os=plan9 ./build plan9 ./test --test plan9 ``` -Or you can use the `--set` flag: +Or you can use the `--set` flag: ```shell $ just --set os bsd ./build bsd @@ -737,8 +737,8 @@ $ just --set os bsd ``` ### Getting and Setting [Environment Variables](../../linux/Environment%20Variables.md) -#### Exporting `just` Variables -Assignments prefixed with the `export` keyword will be exported to recipes as [environment variables](../../linux/Environment%20Variables.md): +#### Exporting `just` Variables +Assignments prefixed with the `export` keyword will be exported to recipes as [environment variables](../../linux/Environment%20Variables.md): ```just export RUST_BACKTRACE := "1" @@ -747,7 +747,7 @@ test: cargo test ``` -Parameters prefixed with a `$` will be exported as [environment variables](../../linux/Environment%20Variables.md): +Parameters prefixed with a `$` will be exported as [environment variables](../../linux/Environment%20Variables.md): ```just test $RUST_BACKTRACE="1": # will print a stack trace if it crashes @@ -767,7 +767,7 @@ a $A $B=`echo $A`: echo $A $B ``` -When `export` is set, all `just` variables are exported as [environment variables](../../linux/Environment%20Variables.md). +When `export` is set, all `just` variables are exported as [environment variables](../../linux/Environment%20Variables.md). #### Getting [Environment Variables](../../linux/Environment%20Variables.md) from the environment [Environment variables](../../linux/Environment%20Variables.md) from the environment are passed automatically to the recipes. @@ -782,11 +782,11 @@ $ just HOME is '/home/myuser' ``` -#### Setting `just` Variables from [Environment Variables](../../linux/Environment%20Variables.md) -[Environment variables](../../linux/Environment%20Variables.md) can be propagated to `just` variables using the functions `env_var()` and `env_var_or_default()`. +#### Setting `just` Variables from [Environment Variables](../../linux/Environment%20Variables.md) +[Environment variables](../../linux/Environment%20Variables.md) can be propagated to `just` variables using the functions `env_var()` and `env_var_or_default()`. ### Recipe Parameters -Recipes may have parameters. Here recipe `build` has a parameter called `target`: +Recipes may have parameters. Here recipe `build` has a parameter called `target`: ```just build target: @echo 'Building {{target}}…' @@ -860,13 +860,13 @@ test triple=(arch + "-unknown-unknown") input=(arch / "input.dat"): ./test {{triple}} ``` -The last parameter of a recipe may be variadic, indicated with either a `+` or a `*` before the argument name: +The last parameter of a recipe may be variadic, indicated with either a `+` or a `*` before the argument name: ```just backup +FILES: scp {{FILES}} me@server.com: ``` -Variadic parameters prefixed with `+` accept _one or more_ arguments and expand to a string containing those arguments separated by spaces: +Variadic parameters prefixed with `+` accept _one or more_ arguments and expand to a string containing those arguments separated by spaces: ```shell $ just backup FAQ.md GRAMMAR.md scp FAQ.md GRAMMAR.md me@server.com: @@ -874,7 +874,7 @@ FAQ.md 100% 1831 1.8KB/s 00:00 GRAMMAR.md 100% 1666 1.6KB/s 00:00 ``` -Variadic parameters prefixed with `*` accept _zero or more_ arguments and expand to a string containing those arguments separated by spaces, or an empty string if no arguments are present: +Variadic parameters prefixed with `*` accept _zero or more_ arguments and expand to a string containing those arguments separated by spaces, or an empty string if no arguments are present: ```just commit MESSAGE *FLAGS: git commit {{FLAGS}} -m "{{MESSAGE}}" @@ -886,7 +886,7 @@ test +FLAGS='-q': cargo test {{FLAGS}} ``` -`{{…}}` substitutions may need to be quoted if they contain spaces. For example, if you have the following recipe: +`{{…}}` substitutions may need to be quoted if they contain spaces. For example, if you have the following recipe: ```just search QUERY: lynx https://www.google.com/?q={{QUERY}} @@ -897,7 +897,7 @@ And you type: $ just search "cat toupee" ``` -`just` will run the command `lynx https://www.google.com/?q=cat toupee`, which will get parsed by `sh` as `lynx`, `https://www.google.com/?q=cat`, and `toupee`, and not the intended `lynx` and `https://www.google.com/?q=cat toupee`. +`just` will run the command `lynx https://www.google.com/?q=cat toupee`, which will get parsed by `sh` as `lynx`, `https://www.google.com/?q=cat`, and `toupee`, and not the intended `lynx` and `https://www.google.com/?q=cat toupee`. You can fix this by adding quotes: ```just @@ -905,7 +905,7 @@ search QUERY: lynx 'https://www.google.com/?q={{QUERY}}' ``` -Parameters prefixed with a `$` will be exported as [environment variables](../../linux/Environment%20Variables.md): +Parameters prefixed with a `$` will be exported as [environment variables](../../linux/Environment%20Variables.md): ```just foo $bar: echo $bar @@ -914,7 +914,7 @@ foo $bar: ### Running Recipes at the End of a Recipe Normal dependencies of a recipes always run before a recipe starts. That is to say, the dependee always runs before the depender. These dependencies are called "prior dependencies". -A recipe can also have subsequent dependencies, which run after the recipe and are introduced with an `&&`: +A recipe can also have subsequent dependencies, which run after the recipe and are introduced with an `&&`: ```just a: echo 'A!' @@ -929,7 +929,7 @@ d: echo 'D!' ``` -…running _b_ prints: +…running _b_ prints: ```shell $ just b echo 'A!' @@ -943,7 +943,7 @@ D! ``` ### Running Recipes in the Middle of a Recipe -`just` doesn't support running recipes in the middle of another recipe, but you can call `just` recursively in the middle of a recipe. Given the following `justfile`: +`just` doesn't support running recipes in the middle of another recipe, but you can call `just` recursively in the middle of a recipe. Given the following `justfile`: ```just a: echo 'A!' @@ -957,7 +957,7 @@ c: echo 'C!' ``` -…running _b_ prints: +…running _b_ prints: ```shell $ just b echo 'A!' @@ -970,10 +970,10 @@ echo 'B end!' B end! ``` -This has limitations, since recipe `c` is run with an entirely new invocation of `just`: Assignments will be recalculated, dependencies might run twice, and command line arguments will not be propagated to the child `just` process. +This has limitations, since recipe `c` is run with an entirely new invocation of `just`: Assignments will be recalculated, dependencies might run twice, and command line arguments will not be propagated to the child `just` process. ### Writing Recipes in Other Languages -Recipes that start with `#!` are called shebang recipes, and are executed by saving the recipe body to a file and running it. This lets you write recipes in different languages: +Recipes that start with `#!` are called shebang recipes, and are executed by saving the recipe body to a file and running it. This lets you write recipes in different languages: ```just polyglot: python js perl sh ruby nu @@ -1014,14 +1014,14 @@ Hola from a nushell script! Hello from ruby! ``` -On Unix-like operating systems, including [Linux](../../linux/Linux.md) and [MacOS](../../macos/macOS.md), shebang recipes are executed by saving the recipe body to a file in a temporary directory, marking the file as executable, and executing it. The OS then parses the shebang line into a command line and invokes it, including the path to the file. For example, if a recipe starts with `#!/usr/bin/env bash`, the final command that the OS runs will be something like `/usr/bin/env bash /tmp/PATH_TO_SAVED_RECIPE_BODY`. Keep in mind that different operating systems split shebang lines differently. +On Unix-like operating systems, including [Linux](../../linux/Linux.md) and [MacOS](../../macos/macOS.md), shebang recipes are executed by saving the recipe body to a file in a temporary directory, marking the file as executable, and executing it. The OS then parses the shebang line into a command line and invokes it, including the path to the file. For example, if a recipe starts with `#!/usr/bin/env bash`, the final command that the OS runs will be something like `/usr/bin/env bash /tmp/PATH_TO_SAVED_RECIPE_BODY`. Keep in mind that different operating systems split shebang lines differently. -[Windows](../../windows/Windows.md) does not support shebang lines. On [Windows](../../windows/Windows.md), `just` splits the shebang line into a command and arguments, saves the recipe body to a file, and invokes the split command and arguments, adding the path to the saved recipe body as the final argument. +[Windows](../../windows/Windows.md) does not support shebang lines. On [Windows](../../windows/Windows.md), `just` splits the shebang line into a command and arguments, saves the recipe body to a file, and invokes the split command and arguments, adding the path to the saved recipe body as the final argument. ### Multi-Line Constructs Recipes without an initial shebang are evaluated and run line-by-line, which means that multi-line constructs probably won't do what you want. -For example, with the following `justfile`: +For example, with the following `justfile`: ```makefile conditional: if true; then @@ -1029,7 +1029,7 @@ conditional: fi ``` -The extra leading whitespace before the second line of the `conditional` recipe will produce a parse error: +The extra leading whitespace before the second line of the `conditional` recipe will produce a parse error: ```shell $ just conditional error: Recipe line has extra leading whitespace @@ -1040,7 +1040,7 @@ error: Recipe line has extra leading whitespace To work around this, you can write conditionals on one line, escape newlines with slashes, or add a shebang to your recipe. Some examples of multi-line constructs are provided for reference. -#### `if` statements +#### `if` statements ```just conditional: if true; then echo 'True!'; fi @@ -1061,7 +1061,7 @@ conditional: fi ``` -#### `for` loops +#### `for` loops ```just for: for file in `ls .`; do echo $file; done @@ -1082,7 +1082,7 @@ for: done ``` -#### `while` loops +#### `while` loops ```just while: while `server-is-dead`; do ping -c 1 server; done @@ -1104,7 +1104,7 @@ while: ``` ### Private Recipes -Recipes and aliases whose name starts with a `_` are omitted from `just --list`: +Recipes and aliases whose name starts with a `_` are omitted from `just --list`: ```just test: _test-helper ./bin/test @@ -1119,7 +1119,7 @@ Available recipes: test ``` -The `[private]` attribute may also be used to hide recipes or aliases without needing to change the name: +The `[private]` attribute may also be used to hide recipes or aliases without needing to change the name: ```just [private] foo: diff --git a/technology/applications/cli/micro.md b/technology/applications/cli/micro.md index 19cf281..3caa8f5 100644 --- a/technology/applications/cli/micro.md +++ b/technology/applications/cli/micro.md @@ -5,7 +5,7 @@ repo: https://github.com/zyedidia/micro website: https://micro-editor.github.io/ --- # micro -**micro** is a terminal-based text editor that aims to be easy to use and intuitive, while also taking advantage of the capabilities of modern terminals. It comes as a single, batteries-included, static binary with no dependencies; you can download and use it right now! +**micro** is a terminal-based text editor that aims to be easy to use and intuitive, while also taking advantage of the capabilities of modern terminals. It comes as a single, batteries-included, static binary with no dependencies; you can download and use it right now! As its name indicates, micro aims to be somewhat of a successor to the nano editor by being easy to install and use. It strives to be enjoyable as a full-time editor for people who prefer to work in a terminal, or those who regularly edit files over [SSH](../network/SSH.md). @@ -283,30 +283,30 @@ MouseWheelRight ``` # Commands -Micro provides the following commands that can be executed at the command-bar by pressing `Ctrl-e` and entering the command. Arguments are placed in single quotes here but these are not necessary when entering the command in micro. +Micro provides the following commands that can be executed at the command-bar by pressing `Ctrl-e` and entering the command. Arguments are placed in single quotes here but these are not necessary when entering the command in micro. -- `bind 'key' 'action'`: creates a keybinding from key to action. See the `keybindings` documentation for more information about binding keys. This command will modify `bindings.json` and overwrite any bindings to `key` that already exist. -- `help 'topic'?`: opens the corresponding help topic. If no topic is provided opens the default help screen. Help topics are stored as `.md` files in the `runtime/help` directory of the source tree, which is embedded in the final binary. +- `bind 'key' 'action'`: creates a keybinding from key to action. See the `keybindings` documentation for more information about binding keys. This command will modify `bindings.json` and overwrite any bindings to `key` that already exist. +- `help 'topic'?`: opens the corresponding help topic. If no topic is provided opens the default help screen. Help topics are stored as `.md` files in the `runtime/help` directory of the source tree, which is embedded in the final binary. - `save 'filename'?`: saves the current buffer. If the file is provided it will 'save as' the filename. - `quit`: quits micro. - `goto 'line'`: jumps to the given line number. A negative number can be passed to jump inward from the end of the file; for example, -5 jumps to the 5th-last line in the file. -- `replace 'search' 'value' 'flags'?`: This will replace `search` with `value`. The `flags` are optional. Possible flags are: +- `replace 'search' 'value' 'flags'?`: This will replace `search` with `value`. The `flags` are optional. Possible flags are: - `-a`: Replace all occurrences at once - `-l`: Do a literal search instead of a [regex](../../tools/Regex.md) search - Note that `search` must be a valid [regex](../../tools/Regex.md) (unless `-l` is passed). If one of the arguments does not have any spaces in it, you may omit the quotes. -- `replaceall 'search' 'value'`: this will replace all occurrences of `search` with `value` without user confirmation. - See `replace` command for more information. -- `set 'option' 'value'`: sets the option to value. See the `options` help topic for a list of options you can set. This will modify your `settings.json` with the new value. -- `setlocal 'option' 'value'`: sets the option to value locally (only in the current buffer). This will _not_ modify `settings.json`. + Note that `search` must be a valid [regex](../../tools/Regex.md) (unless `-l` is passed). If one of the arguments does not have any spaces in it, you may omit the quotes. +- `replaceall 'search' 'value'`: this will replace all occurrences of `search` with `value` without user confirmation. + See `replace` command for more information. +- `set 'option' 'value'`: sets the option to value. See the `options` help topic for a list of options you can set. This will modify your `settings.json` with the new value. +- `setlocal 'option' 'value'`: sets the option to value locally (only in the current buffer). This will _not_ modify `settings.json`. - `show 'option'`: shows the current value of the given option. - `run 'sh-command'`: runs the given [shell](Shell.md) command in the background. The command's output will be displayed in one line when it finishes running. -- `vsplit 'filename'`: opens a vertical split with `filename`. If no filename is provided, a vertical split is opened with an empty buffer. -- `hsplit 'filename'`: same as `vsplit` but opens a horizontal split instead of a vertical split. +- `vsplit 'filename'`: opens a vertical split with `filename`. If no filename is provided, a vertical split is opened with an empty buffer. +- `hsplit 'filename'`: same as `vsplit` but opens a horizontal split instead of a vertical split. - `tab 'filename'`: opens the given file in a new tab. -- `tabmove '[-+]?n'`: Moves the active tab to another slot. `n` is an integer. If `n` is prefixed with `-` or `+`, then it represents a relative position (e.g. `tabmove +2` moves the tab to the right by `2`). If `n` has no prefix, it represents an absolute position (e.g. `tabmove 2` moves the tab to slot `2`). -- `tabswitch 'tab'`: This command will switch to the specified tab. The `tab` can either be a tab number, or a name of a tab. -- `textfilter 'sh-command'`: filters the current selection through a [shell](Shell.md) command as standard input and replaces the selection with the stdout of the [shell](Shell.md) command. For example, to sort a list of numbers, first select them, and then execute `> textfilter sort -n`. +- `tabmove '[-+]?n'`: Moves the active tab to another slot. `n` is an integer. If `n` is prefixed with `-` or `+`, then it represents a relative position (e.g. `tabmove +2` moves the tab to the right by `2`). If `n` has no prefix, it represents an absolute position (e.g. `tabmove 2` moves the tab to slot `2`). +- `tabswitch 'tab'`: This command will switch to the specified tab. The `tab` can either be a tab number, or a name of a tab. +- `textfilter 'sh-command'`: filters the current selection through a [shell](Shell.md) command as standard input and replaces the selection with the stdout of the [shell](Shell.md) command. For example, to sort a list of numbers, first select them, and then execute `> textfilter sort -n`. - `log`: opens a log of all messages and debug statements. - `plugin list`: lists all installed plugins. - `plugin install 'pl'`: install a plugin. @@ -315,13 +315,13 @@ Micro provides the following commands that can be executed at the command-bar by - `plugin search 'pl'`: search available plugins for a keyword. - `plugin available`: show available plugins that can be installed. - `reload`: reloads all runtime files. -- `cd 'path'`: Change the working directory to the given `path`. +- `cd 'path'`: Change the working directory to the given `path`. - `pwd`: Print the current working directory. - `open 'filename'`: Open a file in the current buffer. - `reset 'option'`: resets the given option to its default value -- `retab`: Replaces all leading tabs with spaces or leading spaces with tabs depending on the value of `tabstospaces`. +- `retab`: Replaces all leading tabs with spaces or leading spaces with tabs depending on the value of `tabstospaces`. - `raw`: micro will open a new tab and show the escape sequence for every event it receives from the terminal. This shows you what micro actually sees from the terminal and helps you see which bindings aren't possible and why. This is most useful for debugging keybindings. -- `showkey`: Show the action(s) bound to a given key. For example running `> showkey Ctrl-c` will display `Copy`. +- `showkey`: Show the action(s) bound to a given key. For example running `> showkey Ctrl-c` will display `Copy`. - `term exec?`: Open a terminal emulator running the given executable. If no executable is given, this will open the default [shell](Shell.md) in the terminal emulator. ## Settings diff --git a/technology/applications/cli/network/aria2.md b/technology/applications/cli/network/aria2.md index 5511750..4eb2970 100644 --- a/technology/applications/cli/network/aria2.md +++ b/technology/applications/cli/network/aria2.md @@ -24,7 +24,7 @@ aria2c [] [|||] | `-V, --check-integrity [true/false]` | Check file integrity by validating piece hashes or a hash of entire file. This option has effect only in [BitTorrent](../../../internet/BitTorrent.md), Metalink downloads with checksums or [HTTP](../../../internet/HTTP.md)(S)/[FTP](../../../internet/FTP.md) downloads with --checksum option. If piece hashes are provided, this option can detect damaged portions of a file and re-download them. If a hash of entire file is provided, hash check is only done when file has been already download. This is determined by file length. If hash check fails, file is re-downloaded from scratch. If both piece hashes and a hash of entire file are provided, only piece hashes are used. Default: false | | `-c, --continue [true/false]` | Continue downloading a partially downloaded file. Use this option to resume a download started by a web browser or another program which downloads files sequentially from the beginning. Currently this option is only applicable to [HTTP](../../../internet/HTTP.md)(S)/[FTP](../../../internet/FTP.md) downloads. | | `--checksum==` | Set checksum. TYPE is hash type. The supported hash type is listed in Hash Algorithms in aria2c -v. DIGEST is hex digest. For example, setting sha-1 digest looks like this: `sha-1=0192ba11326fe2298c8cb4de616f4d4140213838` This option applies only to [HTTP](../../../internet/HTTP.md)(S)/[FTP](../../../internet/FTP.md) downloads. | -| `-x, --max-connection-per-server=` | The maximum number of connections to one server for each download.  Default: **1** | +| `-x, --max-connection-per-server=` | The maximum number of connections to one server for each download. Default: **1** | | `-k, --min-split-size=` | aria2 does not split less than 2\*SIZE byte range. For example, let's consider downloading 20MiB file. If SIZE is 10M, aria2 can split file into 2 range (0-10MiB) and (10MiB-20MiB) and download it using 2 sources(if --split >= 2, of course). If SIZE is 15M, since 2\*15M > 20MiB, aria2 does not split file and download it using 1 source. You can append K or M (1K = 1024, 1M = 1024K). Possible Values: 1M -1024M Default: 20M | | `-o, --out=` | The file name of the downloaded file. It is always relative to the directory given in `--dir` option. | | `-s, --split=` | Download a file using N connections. If more than N URIs are given, first N URIs are used and remaining URIs are used for backup. If less than N URIs are given, those URIs are used more than once so that N connections total are made simultaneously. The number of connections to the same host is restricted by the `--max-connection-per-server` option. See also the `--min-split-size` option. Default: 5 | diff --git a/technology/applications/cli/network/netcat.md b/technology/applications/cli/network/netcat.md index 7276bdf..bece0cd 100644 --- a/technology/applications/cli/network/netcat.md +++ b/technology/applications/cli/network/netcat.md @@ -4,7 +4,7 @@ wiki: https://en.wikipedia.org/wiki/Netcat --- # netcat -The `nc` (or `netcat`) utility is used for just about anything under the sun involving [TCP](../../../internet/TCP.md), [UDP](../../../internet/UDP.md), or UNIX-domain sockets. It can open [TCP](../../../internet/TCP.md) connections, send [UDP](../../../internet/UDP.md) packets, listen on arbitrary [TCP](../../../internet/TCP.md) and [UDP](../../../internet/UDP.md) ports, do port scanning, and deal with both IPv4 and IPv6. +The `nc` (or `netcat`) utility is used for just about anything under the sun involving [TCP](../../../internet/TCP.md), [UDP](../../../internet/UDP.md), or UNIX-domain sockets. It can open [TCP](../../../internet/TCP.md) connections, send [UDP](../../../internet/UDP.md) packets, listen on arbitrary [TCP](../../../internet/TCP.md) and [UDP](../../../internet/UDP.md) ports, do port scanning, and deal with both IPv4 and IPv6. Common uses include: - simple [TCP](../../../internet/TCP.md) proxies @@ -19,32 +19,32 @@ Common uses include: | `-6` | Use IPv6 addresses only | | `-b` | Allow broadcast | | `-l` | Listen for an incoming connection rather than initiating a connection to a remote host | -| `-N` | shutdown the network socket after EOF on the input. Some servers require this to finish their work | -| `-p ` | Specify the source port `nc` should use, subject to privilege restrictions and availability | +| `-N` | shutdown the network socket after EOF on the input. Some servers require this to finish their work | +| `-p ` | Specify the source port `nc` should use, subject to privilege restrictions and availability | ## Examples ### Client/Server Model -On one console, start `nc` listening on a specific port for a connection. For example: +On one console, start `nc` listening on a specific port for a connection. For example: ```shell nc -l 1234 ``` -`nc` is now listening on port 1234 for a connection. On a second console (or a second machine), connect to the machine and port being listened on: +`nc` is now listening on port 1234 for a connection. On a second console (or a second machine), connect to the machine and port being listened on: ```shell nc -N 127.0.0.1 1234 ``` -There should now be a connection between the ports. Anything typed at the second console will be concatenated to the first, and vice-versa. After the connection has been set up, `nc` does not really care which side is being used as a ‘server’ and which side is being used as a ‘client’. The connection may be terminated using an `EOF` (`^D`), as the `-N` flag was given. +There should now be a connection between the ports. Anything typed at the second console will be concatenated to the first, and vice-versa. After the connection has been set up, `nc` does not really care which side is being used as a ‘server’ and which side is being used as a ‘client’. The connection may be terminated using an `EOF` (`^D`), as the `-N` flag was given. ### Data Transfer The example in the previous section can be expanded to build a basic data transfer model. Any information input into one end of the connection will be output to the other end, and input and output can be easily captured in order to emulate file transfer. -Start by using `nc` to listen on a specific port, with output captured into a file: +Start by using `nc` to listen on a specific port, with output captured into a file: ```shell nc -l 1234 > filename.out ``` -Using a second machine, connect to the listening `nc` process, feeding it the file which is to be transferred: +Using a second machine, connect to the listening `nc` process, feeding it the file which is to be transferred: ```shell nc -N host.example.com 1234 < filename.in ``` diff --git a/technology/applications/cli/network/wget.md b/technology/applications/cli/network/wget.md index db159a6..f07de91 100644 --- a/technology/applications/cli/network/wget.md +++ b/technology/applications/cli/network/wget.md @@ -17,7 +17,7 @@ Wget has been designed for robustness over slow or unstable network connections; | Option | Description | | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `-b, --background` | Go to background immediately after startup. If no output file is specified via the -o, output is redirected to wget-log. | -| `-e, --execute command` | Execute  command  as  if  it were a part of .wgetrc.  A command thus invoked will be executed after the commands in .wgetrc, thus taking precedence over them.  If you need to specify more than one wgetrc command, use multiple instances of -e. | +| `-e, --execute command` | Execute command as if it were a part of .wgetrc. A command thus invoked will be executed after the commands in .wgetrc, thus taking precedence over them. If you need to specify more than one wgetrc command, use multiple instances of -e. | ### Logging Options | Option | Description | @@ -25,48 +25,48 @@ Wget has been designed for robustness over slow or unstable network connections; | `-o, --output-file=logfile` | Log all messages to logfile. The messages are normally reported to standard error. | | `-a, --append-output=logfile` | Append to logfile. This is the same as -o, only it appends to logfile instead of overwriting the old log file. | | `-q, --quiet` | Turn off Wget's output. | -| `-i, --input-file=file` | Read URLs from a local or external file.  If - is specified as file, URLs are read from the standard input.  (Use ./- to read from a file literally named -.). If this function is used, no URLs need be present on the command line.  If there are URLs both on the command line and in an input file, those on the command lines will be the first ones to be retrieved. If --force-html is not specified, then file should consist of a series of URLs, one per line. However, if you specify --force-html, the document will be regarded as [html](../../../internet/HTML.md).  In that case you may have problems with relative links, which you can solve either by adding "\" to the documents or by specifying --base=url on the command line. If the file is an external one, the document will be automatically treated as [html](../../../internet/HTML.md) if the Content-Type matches text/html. Furthermore, the file's location will be implicitly used as base href if none was specified. | -| `-B, --base=URL` | Resolves relative links using URL as the point of reference, when reading links from an [HTML](../../../internet/HTML.md) file specified via the -i/--input-file option (together with --force-html, or when the input file was fetched remotely from a server describing it as [HTML](../../../internet/HTML.md)). This is equivalent to the presence of a "BASE" tag in the [HTML](../../../internet/HTML.md) input file, with URL as the value for the "href" attribute. | +| `-i, --input-file=file` | Read URLs from a local or external file. If - is specified as file, URLs are read from the standard input. (Use ./- to read from a file literally named -.). If this function is used, no URLs need be present on the command line. If there are URLs both on the command line and in an input file, those on the command lines will be the first ones to be retrieved. If --force-html is not specified, then file should consist of a series of URLs, one per line. However, if you specify --force-html, the document will be regarded as [html](../../../internet/HTML.md). In that case you may have problems with relative links, which you can solve either by adding "\" to the documents or by specifying --base=url on the command line. If the file is an external one, the document will be automatically treated as [html](../../../internet/HTML.md) if the Content-Type matches text/html. Furthermore, the file's location will be implicitly used as base href if none was specified. | +| `-B, --base=URL` | Resolves relative links using URL as the point of reference, when reading links from an [HTML](../../../internet/HTML.md) file specified via the -i/--input-file option (together with --force-html, or when the input file was fetched remotely from a server describing it as [HTML](../../../internet/HTML.md)). This is equivalent to the presence of a "BASE" tag in the [HTML](../../../internet/HTML.md) input file, with URL as the value for the "href" attribute. | ### Download Options | Option | Description | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `-t, --tries=number` | Set number of tries to number. Specify 0 or inf for infinite retrying.  The default is to retry 20 times, with the exception of fatal errors like "connection refused" or "not found" (404), which are not retried. | -| `-O, --output-document=file` | The documents will not be written to the appropriate files, but all will be concatenated together and written to file.  If - is used as file, documents will be printed to standard output, disabling link conversion.  (Use ./- to print to a file literally named -.) | -| `--backups=backups` | Before (over)writing a file, back up an existing file by adding a .1 suffix (\_1 on VMS) to the file name.  Such backup files are rotated to .2, .3, and so on, up to `backups` (and lost beyond that) | -| `-c, --continue` | Continue  getting  a  partially-downloaded file.  This is useful when you want to finish up a download started by a previous instance of Wget, or by another program. | +| `-t, --tries=number` | Set number of tries to number. Specify 0 or inf for infinite retrying. The default is to retry 20 times, with the exception of fatal errors like "connection refused" or "not found" (404), which are not retried. | +| `-O, --output-document=file` | The documents will not be written to the appropriate files, but all will be concatenated together and written to file. If - is used as file, documents will be printed to standard output, disabling link conversion. (Use ./- to print to a file literally named -.) | +| `--backups=backups` | Before (over)writing a file, back up an existing file by adding a .1 suffix (\_1 on VMS) to the file name. Such backup files are rotated to .2, .3, and so on, up to `backups` (and lost beyond that) | +| `-c, --continue` | Continue getting a partially-downloaded file. This is useful when you want to finish up a download started by a previous instance of Wget, or by another program. | | `--show-progress` | Force wget to display the progress bar in any verbosity. | | `-T, --timeout=seconds` | Set the network timeout to `seconds` seconds. | -| `--limit-rate=amount` | Limit the download speed to amount bytes per second.  Amount may be expressed in bytes, kilobytes with the k suffix, or megabytes with the  m  suffix. For example, --limit-rate=20k will limit the retrieval rate to 20KB/s. This is useful when, for whatever reason, you don't want Wget to consume the entire available bandwidth. | -| `-w, --wait=seconds` | Wait the specified number of seconds between the retrievals. Use of this option is recommended, as it lightens the server load by making the requests less frequent. Instead of in seconds, the time can be specified in minutes using the "m" suffix, in hours using "h" suffix, or in days using "d" suffix. | -| `--waitretry=seconds` | If you don't want Wget to wait between every retrieval, but only between retries of failed downloads, you can use this option. Wget  will use linear backoff, waiting 1 second after the first failure on a given file, then waiting 2 seconds after the second failure on  that file, up to the maximum number of seconds you specify. | -| `--random-wait` | Some web sites may perform log analysis to identify retrieval programs such as Wget by looking for statistically significant  similarities in the time between requests. This option causes the time between requests to vary between 0.5 and 1.5 * wait seconds,  where wait was specified using the --wait option, in order to mask Wget's presence from such analysis. | +| `--limit-rate=amount` | Limit the download speed to amount bytes per second. Amount may be expressed in bytes, kilobytes with the k suffix, or megabytes with the m suffix. For example, --limit-rate=20k will limit the retrieval rate to 20KB/s. This is useful when, for whatever reason, you don't want Wget to consume the entire available bandwidth. | +| `-w, --wait=seconds` | Wait the specified number of seconds between the retrievals. Use of this option is recommended, as it lightens the server load by making the requests less frequent. Instead of in seconds, the time can be specified in minutes using the "m" suffix, in hours using "h" suffix, or in days using "d" suffix. | +| `--waitretry=seconds` | If you don't want Wget to wait between every retrieval, but only between retries of failed downloads, you can use this option. Wget will use linear backoff, waiting 1 second after the first failure on a given file, then waiting 2 seconds after the second failure on that file, up to the maximum number of seconds you specify. | +| `--random-wait` | Some web sites may perform log analysis to identify retrieval programs such as Wget by looking for statistically significant similarities in the time between requests. This option causes the time between requests to vary between 0.5 and 1.5 * wait seconds, where wait was specified using the --wait option, in order to mask Wget's presence from such analysis. | | `--user=user, --password=password` | Specify the username and password for both [FTP](../../../internet/FTP.md) and [HTTP](../../../internet/HTTP.md) file retrieval. | | `--ask-password` | Prompt for a password for each connection established. | ### Directory Options | Option | Description | | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `-nH, --no-host-directories` | Disable generation of host-prefixed directories. By default, invoking Wget with -r http://fly.srk.fer.hr/ will create a structure of  directories beginning with fly.srk.fer.hr/. This option disables such behavior. | +| `-nH, --no-host-directories` | Disable generation of host-prefixed directories. By default, invoking Wget with -r http://fly.srk.fer.hr/ will create a structure of directories beginning with fly.srk.fer.hr/. This option disables such behavior. | | `--cut-dirs=number` | Ignore number directory components. This is useful for getting a fine-grained control over the directory where recursive retrieval will be saved. | -| `-P, --directory-prefix=prefix` | Set directory prefix to prefix. The directory prefix is the directory where all other files and subdirectories will be saved to, i.e.  the top of the retrieval tree. The default is . (the current directory). | +| `-P, --directory-prefix=prefix` | Set directory prefix to prefix. The directory prefix is the directory where all other files and subdirectories will be saved to, i.e. the top of the retrieval tree. The default is . (the current directory). | ### HTTP Options | Option | Description | | ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `--no-cookies` | Disable the use of cookies. | -| `--load-cookies file` | Load cookies from file before the first [HTTP](../../../internet/HTTP.md) retrieval.  file is a textual file in the format originally used by Netscape's  cookies.txt file. | +| `--load-cookies file` | Load cookies from file before the first [HTTP](../../../internet/HTTP.md) retrieval. file is a textual file in the format originally used by Netscape's cookies.txt file. | | `--save-cookies file` | Save cookies to file before exiting. This will not save cookies that have expired or that have no expiry time (so-called "session cookies"), but also see --keep-session-cookies. | -| `--keep-session-cookies` | When specified, causes --save-cookies to also save session cookies. Session cookies are normally not saved because they are meant to be  kept in memory and forgotten when you exit the browser. Saving them is useful on sites that require you to log in or to visit the home  page before you can access some pages. With this option, multiple Wget runs are considered a single browser session as far as the site  is concerned. | -| `--header=header-line` | Send header-line along with the rest of the headers in each [HTTP](../../../internet/HTTP.md) request. The supplied header is sent as-is, which means it must  contain name and value separated by colon, and must not contain newlines. | -| `--proxy-user=user, --proxy-password=password` | Specify the username user and password password for authentication on a proxy server. Wget will encode them using the "basic"  authentication scheme. | -| `--referer=url` | Include 'Referer: url' header in [HTTP](../../../internet/HTTP.md) request. Useful for retrieving documents with server-side processing that assume they are always  being retrieved by interactive web browsers and only come out properly when Referer is set to one of the pages that point to them. | +| `--keep-session-cookies` | When specified, causes --save-cookies to also save session cookies. Session cookies are normally not saved because they are meant to be kept in memory and forgotten when you exit the browser. Saving them is useful on sites that require you to log in or to visit the home page before you can access some pages. With this option, multiple Wget runs are considered a single browser session as far as the site is concerned. | +| `--header=header-line` | Send header-line along with the rest of the headers in each [HTTP](../../../internet/HTTP.md) request. The supplied header is sent as-is, which means it must contain name and value separated by colon, and must not contain newlines. | +| `--proxy-user=user, --proxy-password=password` | Specify the username user and password password for authentication on a proxy server. Wget will encode them using the "basic" authentication scheme. | +| `--referer=url` | Include 'Referer: url' header in [HTTP](../../../internet/HTTP.md) request. Useful for retrieving documents with server-side processing that assume they are always being retrieved by interactive web browsers and only come out properly when Referer is set to one of the pages that point to them. | | `-U, --user-agent=agent-string` | Identify as `agent-string` to the [HTTP](../../../internet/HTTP.md) server. | ### HTTPS Options | Option | Description | | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `--no-check-certificate` | Don't check the server certificate against the available certificate authorities. Also don't require the URL host name to match the  common name presented by the certificate. | +| `--no-check-certificate` | Don't check the server certificate against the available certificate authorities. Also don't require the URL host name to match the common name presented by the certificate. | | `--ca-certificate=file` | Use file as the file with the bundle of certificate authorities ("CA") to verify the peers. The certificates must be in PEM format. | | `--ca-directory=directory` | Specifies directory containing CA certificates in PEM format. | @@ -75,5 +75,5 @@ Wget has been designed for robustness over slow or unstable network connections; | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `-r, --recursive` | Turn on recursive retrieving. The default maximum depth is 5. | | `-l, --level=depth` | Set the maximum number of subdirectories that Wget will recurse into to depth. | -| `-k, --convert-links` | After the download is complete, convert the links in the document to make them suitable for local viewing. This affects not only the  visible hyperlinks, but any part of the document that links to external content, such as embedded images, links to style sheets,  hyperlinks to non-[HTML](../../../internet/HTML.md) content, etc. | -| `-p, --page-requisites` | This option causes Wget to download all the files that are necessary to properly display a given [HTML](../../../internet/HTML.md) page. This includes such things  as inlined images, sounds, and referenced stylesheets. | +| `-k, --convert-links` | After the download is complete, convert the links in the document to make them suitable for local viewing. This affects not only the visible hyperlinks, but any part of the document that links to external content, such as embedded images, links to style sheets, hyperlinks to non-[HTML](../../../internet/HTML.md) content, etc. | +| `-p, --page-requisites` | This option causes Wget to download all the files that are necessary to properly display a given [HTML](../../../internet/HTML.md) page. This includes such things as inlined images, sounds, and referenced stylesheets. | diff --git a/technology/applications/cli/patch.md b/technology/applications/cli/patch.md index c280572..d30c771 100644 --- a/technology/applications/cli/patch.md +++ b/technology/applications/cli/patch.md @@ -21,7 +21,7 @@ patch -i ## Options | Option | Description | | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `-b, --backup` | Make backup files. That is, when patching a file, rename or copy the original instead of removing it.  When backing up a file that does not exist, an empty, unreadable backup file is created as a placeholder to represent the nonexistent file | +| `-b, --backup` | Make backup files. That is, when patching a file, rename or copy the original instead of removing it. When backing up a file that does not exist, an empty, unreadable backup file is created as a placeholder to represent the nonexistent file | | `-d, --directory ` | Change to the directory dir immediately, before doing anything else. | | `--dry-run` | Print the results of applying the patches without actually changing any files | | `-i, --input ` | Read the patch from patchfile. If patchfile is -, read from standard input, the default | diff --git a/technology/applications/cli/pueue.md b/technology/applications/cli/pueue.md index c441e18..a0abe4a 100644 --- a/technology/applications/cli/pueue.md +++ b/technology/applications/cli/pueue.md @@ -5,30 +5,30 @@ repo: https://github.com/nukesor/pueue # pueue Pueue is a command-line task management tool for sequential and parallel execution of long-running tasks. -Simply put, it's a tool that **p**rocesses a q**ueue** of [shell](Shell.md) commands. On top of that, there are a lot of convenient features and abstractions. +Simply put, it's a tool that **p**rocesses a q**ueue** of [shell](Shell.md) commands. On top of that, there are a lot of convenient features and abstractions. Since Pueue is not bound to any terminal, you can control your tasks from any terminal on the same machine. The queue will be continuously processed, even if you no longer have any active [ssh](../network/SSH.md) sessions. ## Start the Daemon -Before you can use the `pueue` client, you have to start the daemon. +Before you can use the `pueue` client, you have to start the daemon. -**Local:** The daemon can be run in the current [shell](Shell.md). Just run `pueued` anywhere on your command line. It'll exit if you close the terminal, though. +**Local:** The daemon can be run in the current [shell](Shell.md). Just run `pueued` anywhere on your command line. It'll exit if you close the terminal, though. -**Background:** To fork and run `pueued` into the background, add the `-d` or `--daemonize` flag. E.g. `pueued -d`. -The daemon can always be shut down using the client command `pueue shutdown`. +**Background:** To fork and run `pueued` into the background, add the `-d` or `--daemonize` flag. E.g. `pueued -d`. +The daemon can always be shut down using the client command `pueue shutdown`. ### Systemd [Systemd](../../linux/systemd/Systemd.md) user services allow every user to start/enable their own session on [Linux](../../linux/Linux.md) operating system distributions. If you didn't install Pueue with a package manager, follow these instructions first: -1. download `pueued.service` from the GitHub Releases page; -2. place `pueued.service` in `/etc/systemd/user/` or `~/.config/systemd/user/`; -3. make sure the `pueued` binary is placed at `/usr/bin`, which is where `pueued.service` expects is to be. +1. download `pueued.service` from the GitHub Releases page; +2. place `pueued.service` in `/etc/systemd/user/` or `~/.config/systemd/user/`; +3. make sure the `pueued` binary is placed at `/usr/bin`, which is where `pueued.service` expects is to be. Then, regardless of how you installed Pueue, run: -1. `systemctl --user start pueued`, to start the `pueued` service; -2. `systemctl --user enable pueued`, to run the `pueued` service at system startup; -3. `systemctl --user status pueued`, to ensure it is **active (running)**. +1. `systemctl --user start pueued`, to start the `pueued` service; +2. `systemctl --user enable pueued`, to run the `pueued` service at system startup; +3. `systemctl --user status pueued`, to ensure it is **active (running)**. ## Using pueue Usage: `pueue ` diff --git a/technology/applications/cli/ripgrep.md b/technology/applications/cli/ripgrep.md index c8d971b..a29e36f 100644 --- a/technology/applications/cli/ripgrep.md +++ b/technology/applications/cli/ripgrep.md @@ -6,7 +6,7 @@ repo: https://github.com/BurntSushi/ripgrep --- # ripgrep -ripgrep is a line-oriented search tool that recursively searches the current directory for a [regex](../../tools/Regex.md) pattern. By default, ripgrep will respect gitignore rules and automatically skip hidden files/directories and binary files. ripgrep has first class support on Windows, [macOS](../../macos/macOS.md) and [Linux](../../linux/Linux.md) with binary downloads available for [every release](https://github.com/BurntSushi/ripgrep/releases). ripgrep is similar to other popular search tools like The Silver Searcher, ack and grep. +ripgrep is a line-oriented search tool that recursively searches the current directory for a [regex](../../tools/Regex.md) pattern. By default, ripgrep will respect gitignore rules and automatically skip hidden files/directories and binary files. ripgrep has first class support on Windows, [macOS](../../macos/macOS.md) and [Linux](../../linux/Linux.md) with binary downloads available for [every release](https://github.com/BurntSushi/ripgrep/releases). ripgrep is similar to other popular search tools like The Silver Searcher, ack and grep. ## Usage ```shell diff --git a/technology/applications/cli/rnr.md b/technology/applications/cli/rnr.md index 2dbbc52..a5e232c 100644 --- a/technology/applications/cli/rnr.md +++ b/technology/applications/cli/rnr.md @@ -5,16 +5,16 @@ repo: https://github.com/ismaelgv/rnr --- # rnr [Repo](https://github.com/ismaelgv/rnr) -**RnR** is a command-line tool to **securely rename** multiple files and directories that supports regular expressions. +**RnR** is a command-line tool to **securely rename** multiple files and directories that supports regular expressions. ## Usage Flags ```shell --n, --dry-run         Only show what would be done (default mode) --f, --force           Make actual changes to files --x, --hidden          Include hidden files and directories --D, --include-dirs    Rename matching directories --r, --recursive       Recursive mode --s, --silent          Do not print any information ---no-dump         Do not dump operations into a file +-n, --dry-run Only show what would be done (default mode) +-f, --force Make actual changes to files +-x, --hidden Include hidden files and directories +-D, --include-dirs Rename matching directories +-r, --recursive Recursive mode +-s, --silent Do not print any information +--no-dump Do not dump operations into a file ``` \ No newline at end of file diff --git a/technology/applications/cli/sd.md b/technology/applications/cli/sd.md index ff4951d..d4160b8 100644 --- a/technology/applications/cli/sd.md +++ b/technology/applications/cli/sd.md @@ -5,7 +5,7 @@ repo: https://github.com/chmln/sd --- # sd [Repo](https://github.com/chmln/sd) -`sd` is an intuitive find & replace CLI. +`sd` is an intuitive find & replace CLI. ## Usage ```shell diff --git a/technology/applications/cli/smbmap.md b/technology/applications/cli/smbmap.md index 3d9c21e..301f8c2 100644 --- a/technology/applications/cli/smbmap.md +++ b/technology/applications/cli/smbmap.md @@ -8,7 +8,7 @@ source: https://www.kali.org/tools/smbmap SMBMap allows users to enumerate [samba](../web/Samba.md) share drives across an entire domain. List share drives, drive permissions, share contents, upload/download functionality, file name auto-download pattern matching, and even execute remote commands. This tool was designed with pen testing in mind, and is intended to simplify searching for potentially sensitive data across large networks. ## Usage -Usage: `smbmap [options]...` +Usage: `smbmap [options]...` ### Options #### Main arguments diff --git a/technology/applications/cli/system/Core Utils.md b/technology/applications/cli/system/Core Utils.md index da4adcf..b701769 100644 --- a/technology/applications/cli/system/Core Utils.md +++ b/technology/applications/cli/system/Core Utils.md @@ -238,7 +238,7 @@ Usage: `install [OPTION]... SOURCE... DIRECTORY` | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | | `-b` | make a backup of each existing destination file | | `-S, --suffix=SUFFIX` | override the usual backup suffix | -| `-C, --compare` | compare  content of source and destination files, and if no change to content, ownership, and permissions, do not modify the destination at all | +| `-C, --compare` | compare content of source and destination files, and if no change to content, ownership, and permissions, do not modify the destination at all | | `-d, --directory` | treat all arguments as directory names; create all components of the specified directories | | `-g, --group=GROUP` | set group ownership, instead of process' current group | | `-m, --mode=MODE` | set permission mode (as in chmod), instead of rwxr-xr-x | diff --git a/technology/applications/cli/system/doas.md b/technology/applications/cli/system/doas.md index 92ee6a5..acdd59b 100644 --- a/technology/applications/cli/system/doas.md +++ b/technology/applications/cli/system/doas.md @@ -29,7 +29,7 @@ $ doas -s The configuration for doas is stored at `/etc/doas.conf`. The config file consist of rules with the following format: -`permit|deny [options] identity [as target] [cmd command [args ...]]` +`permit|deny [options] identity [as target] [cmd command [args ...]]` Rules consist of the following parts: - `permit|deny`: The action to be taken if this rule matches. @@ -39,19 +39,19 @@ Options: | Option | Description | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `nopass` | The user is not required to enter a password. | -| `nolog` | Do not log successful command execution to syslogd | +| `nolog` | Do not log successful command execution to syslogd | | `persist` | After the user successfully authenticates, do not ask for a password again for some time. | -| `keepenv` | Environment variables other than those listed in doas are retained when creating the environment for the new process. | -| `setenv {var=value}` | Keep or set the space-separated specified variables. Variables may also be removed with a leading ‘-’ or set using the latter syntax. If the first character of value is a ‘`$`’ then the value to be set is taken from the existing environment variable of the indicated name. This option is processed after the default environment has been created. | +| `keepenv` | Environment variables other than those listed in doas are retained when creating the environment for the new process. | +| `setenv {var=value}` | Keep or set the space-separated specified variables. Variables may also be removed with a leading ‘-’ or set using the latter syntax. If the first character of value is a ‘`$`’ then the value to be set is taken from the existing environment variable of the indicated name. This option is processed after the default environment has been created. | - `identity`: The username to match. Groups may be specified by prepending a colon (‘:’). Numeric IDs are also accepted. -- `as`: The target user the running user is allowed to run the command as. The default is all users. +- `as`: The target user the running user is allowed to run the command as. The default is all users. -- `cmd`: The command the user is allowed or denied to run. The default is all commands. Be advised that it is best to specify absolute paths. If a relative path is specified, only a restricted `PATH` will be searched. +- `cmd`: The command the user is allowed or denied to run. The default is all commands. Be advised that it is best to specify absolute paths. If a relative path is specified, only a restricted `PATH` will be searched. -- `args`: Arguments to command. The command arguments provided by the user need to match those specified. The keyword `args` alone means that command must be run without any arguments. +- `args`: Arguments to command. The command arguments provided by the user need to match those specified. The keyword `args` alone means that command must be run without any arguments. The last matching rule determines the action taken. If no rule matches, the action is denied. diff --git a/technology/applications/cli/zsh.md b/technology/applications/cli/zsh.md index def9cf9..792b1d9 100644 --- a/technology/applications/cli/zsh.md +++ b/technology/applications/cli/zsh.md @@ -10,4 +10,4 @@ repo: https://github.com/zsh-users/zsh Zsh is a powerful [shell](Shell.md) that operates as both an interactive [shell](Shell.md) and as a scripting language interpreter. ## Configuration -`~/.zshrc`: Used for setting user's interactive [shell](Shell.md) configuration and executing commands, will be read when starting as an _**interactive shell**_. \ No newline at end of file +`~/.zshrc`: Used for setting user's interactive [shell](Shell.md) configuration and executing commands, will be read when starting as an _**interactive shell**_. \ No newline at end of file diff --git a/technology/applications/desktops/Waybar.md b/technology/applications/desktops/Waybar.md index ee96fc8..a27a4e0 100644 --- a/technology/applications/desktops/Waybar.md +++ b/technology/applications/desktops/Waybar.md @@ -8,14 +8,14 @@ Highly customizable Wayland bar for Sway, [hyprland](../desktops/hyprland.md) an ![Screenshot][Screenshot] ## Configuration -The configuration uses the [JSON](../../files/JSON.md) file format and is named `config`. +The configuration uses the [JSON](../../files/JSON.md) file format and is named `config`. Valid directories for this file are: - `~/.config/waybar/` - `~/waybar/` - `/etc/xdg/waybar/` -A good starting point is the [default config](https://github.com/Alexays/Waybar/blob/master/resources/config). +A good starting point is the [default config](https://github.com/Alexays/Waybar/blob/master/resources/config). ### Bar Config @@ -23,7 +23,7 @@ A good starting point is the [default config](https://github.com/Alexays/Waybar | ----------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `layer` | string | `bottom` | Decide if the bar is displayed in front (`top`) of the windows or behind (`bottom`) them. | | `output` | string | array | | -| `position` | string | `top` | Bar position, can be `top`,`bottom`,`left`,`right`. | +| `position` | string | `top` | Bar position, can be `top`,`bottom`,`left`,`right`. | | `height` | integer | | Height to be used by the bar if possible, leave blank for a dynamic value. | | `width` | integer | | Width to be used by the bar if possible, leave blank for a dynamic value. | | `modules-left` | array | | Modules that will be displayed on the left. | @@ -33,25 +33,25 @@ A good starting point is the [default config](https://github.com/Alexays/Waybar | `margin-` | integer | | Margins value without units. | | `spacing` | integer | `4` | Size of gaps in between of the different modules. | | `name` | string | | Optional name added as a CSS class, for styling multiple waybars. | -| `mode` | string | | Selects one of the preconfigured display modes. This is an equivalent of the [`sway-bar(5)`](https://github.com/swaywm/sway/blob/master/sway/sway-bar.5.scd) `mode` command and supports the same values: `dock`, `hide`, `invisible`, `overlay`.
Note: `hide` and `invisible` modes may be not as useful without Sway IPC. | +| `mode` | string | | Selects one of the preconfigured display modes. This is an equivalent of the [`sway-bar(5)`](https://github.com/swaywm/sway/blob/master/sway/sway-bar.5.scd) `mode` command and supports the same values: `dock`, `hide`, `invisible`, `overlay`.
Note: `hide` and `invisible` modes may be not as useful without Sway IPC. | | `start_hidden` | bool | `false` | Option to start the bar hidden. | -| `modifier-reset` | string | `press` | Defines the timing of modifier key to reset the bar visibility. To reset the visibility of the bar with the press of the modifier key use `press`. Use `release` to reset the visibility upon the release of the modifier key and only if no other action happened while the key was pressed. This prevents hiding the bar when the modifier is used to switch a workspace, change binding mode or start a keybinding. | -| `exclusive` | bool | `true` | Option to request an exclusive zone from the compositor. Disable this to allow drawing application windows underneath or on top of the bar.
Disabled by default for `overlay` layer. | -| `fixed-center` | bool | `true` | Prefer fixed center position for the `modules-center` block. The center block will stay in the middle of the bar whenever possible. It can still be pushed around if other blocks need more space.
When false, the center block is centered in the space between the left and right block. | -| `passthrough` | bool | `false` | Option to pass any pointer events to the window under the bar.
Intended to be used with either `top` or `overlay` layers and without exclusive zone.
Enabled by default for `overlay` layer. | +| `modifier-reset` | string | `press` | Defines the timing of modifier key to reset the bar visibility. To reset the visibility of the bar with the press of the modifier key use `press`. Use `release` to reset the visibility upon the release of the modifier key and only if no other action happened while the key was pressed. This prevents hiding the bar when the modifier is used to switch a workspace, change binding mode or start a keybinding. | +| `exclusive` | bool | `true` | Option to request an exclusive zone from the compositor. Disable this to allow drawing application windows underneath or on top of the bar.
Disabled by default for `overlay` layer. | +| `fixed-center` | bool | `true` | Prefer fixed center position for the `modules-center` block. The center block will stay in the middle of the bar whenever possible. It can still be pushed around if other blocks need more space.
When false, the center block is centered in the space between the left and right block. | +| `passthrough` | bool | `false` | Option to pass any pointer events to the window under the bar.
Intended to be used with either `top` or `overlay` layers and without exclusive zone.
Enabled by default for `overlay` layer. | | `gtk-layer-shell` | bool | `true` | Option to disable the use of gtk-layer-shell for popups. Only functional if compiled with gtk-layer-shell support. | -| `ipc` | bool | `false` | Option to subscribe to the Sway IPC bar configuration and visibility events and control waybar with `swaymsg bar` commands.
Requires `bar_id` value from sway configuration to be either passed with the `-b` commandline argument or specified with the `id` option.
See [#1244](https://github.com/Alexays/Waybar/pull/1244) for the documentation and configuration examples. | -| `id` | string | | `bar_id` for the Sway IPC. Use this if you need to override the value passed with the `-b bar_id` commandline argument for the specific bar instance. | -| `include` | array | | Paths to additional configuration files.
Each file can contain a single object with any of the bar configuration options. In case of duplicate options, the first defined value takes precedence, i.e. including file -> first included file -> etc. Nested includes are permitted, but make sure to avoid circular imports.
For a multi-bar config, the `include` directive affects only current bar configuration object. | +| `ipc` | bool | `false` | Option to subscribe to the Sway IPC bar configuration and visibility events and control waybar with `swaymsg bar` commands.
Requires `bar_id` value from sway configuration to be either passed with the `-b` commandline argument or specified with the `id` option.
See [#1244](https://github.com/Alexays/Waybar/pull/1244) for the documentation and configuration examples. | +| `id` | string | | `bar_id` for the Sway IPC. Use this if you need to override the value passed with the `-b bar_id` commandline argument for the specific bar instance. | +| `include` | array | | Paths to additional configuration files.
Each file can contain a single object with any of the bar configuration options. In case of duplicate options, the first defined value takes precedence, i.e. including file -> first included file -> etc. Nested includes are permitted, but make sure to avoid circular imports.
For a multi-bar config, the `include` directive affects only current bar configuration object. | ### Multiple instances of a module If you want to have a second instance of a module, you can suffix it by a '#' and a custom name. -For example if you want a second battery module, you can add `"battery#bat2"` to your modules. +For example if you want a second battery module, you can add `"battery#bat2"` to your modules. To configure the newly added module, you then also add a module configuration with the same name. -This could then look something like this _(this is an incomplete example)_: +This could then look something like this _(this is an incomplete example)_: ```js "modules-right": ["battery", "battery#bat2"], "battery": { @@ -62,7 +62,7 @@ This could then look something like this _(this is an incomplete example)_: } ``` -To style in `styles.css` use : +To style in `styles.css` use : ```css battery.bat2 { border-bottom: 2px solid #FFFFFF; @@ -70,14 +70,14 @@ battery.bat2 { ``` ## Styling -Styling is done using the CSS file format and with a file named `style.css`. +Styling is done using the CSS file format and with a file named `style.css`. Valid directories for this file are: - `~/.config/waybar/` - `~/waybar/` - `/etc/xdg/waybar/` -A good starting point is the [default style](https://github.com/Alexays/Waybar/blob/master/resources/style.css). +A good starting point is the [default style](https://github.com/Alexays/Waybar/blob/master/resources/style.css). ## Modules - [Battery](https://github.com/Alexays/Waybar/wiki/Module:-Battery) diff --git a/technology/applications/desktops/dwm.md b/technology/applications/desktops/dwm.md index 479f48f..2a95d42 100644 --- a/technology/applications/desktops/dwm.md +++ b/technology/applications/desktops/dwm.md @@ -11,6 +11,6 @@ repo: https://git.suckless.org/dwm/ dwm is a dynamic window manager for Xorg. It manages windows in tiled, stacked, and full-screen layouts, as well as many others with the help of optional patches. Layouts can be applied dynamically, optimizing the environment for the application in use and the task being performed. dwm is extremely lightweight and fast, written in C and with a stated design goal of remaining under 2000 source lines of code. dwm can be used with compositor ([picom](picom.md)) ## Configuration -dwm is configured at compile-time by editing some of its source files, specifically `config.h`. For detailed information on these settings see the included, well-commented `config.def.h` as well as the [customisation section](https://dwm.suckless.org/customisation/) on the dwm website. +dwm is configured at compile-time by editing some of its source files, specifically `config.h`. For detailed information on these settings see the included, well-commented `config.def.h` as well as the [customisation section](https://dwm.suckless.org/customisation/) on the dwm website. -The official website has a number of [patches](https://dwm.suckless.org/patches/) that can add extra functionality to dwm. These patches primarily make changes to the `dwm.c` file but also make changes to the `config.h` file where appropriate. \ No newline at end of file +The official website has a number of [patches](https://dwm.suckless.org/patches/) that can add extra functionality to dwm. These patches primarily make changes to the `dwm.c` file but also make changes to the `config.h` file where appropriate. \ No newline at end of file diff --git a/technology/applications/desktops/hyprland.md b/technology/applications/desktops/hyprland.md index 8ab27a6..85c5f79 100644 --- a/technology/applications/desktops/hyprland.md +++ b/technology/applications/desktops/hyprland.md @@ -22,7 +22,7 @@ The config is located in `~/.config/hypr/hyprland.conf`. | color | color, rgba(b3ff1aee), rgb(b3ff1a) | | vec2 | vector with 2 values (float), seperated by a space (e.g 0 0 or -10.9 99.1) | | MOD | a string modmask (e.g. SUPER or SUPERSHIFT or SUPER + SHIFT or SUPER and SHIFT or CTRL_SHIFT or empty for none) | -| str | a string | +| str | a string | #### Sections ##### General @@ -35,21 +35,21 @@ The config is located in `~/.config/hypr/hyprland.conf`. | gaps_out | gaps between windows and monitor edges | int | 20 | | col.inactive_border | border color for inactive windows | gradient | 0xffffffff | | col.active_border | border color for the active window | gradient | 0xff444444 | -| col.nogroup_border | inactive border color for window that cannot be added to a group (see `denywindowfromgroup` dispatcher) | gradient | 0xffffaaff | +| col.nogroup_border | inactive border color for window that cannot be added to a group (see `denywindowfromgroup` dispatcher) | gradient | 0xffffaaff | | col.nogroup_border_active | active border color for window that cannot be added to a group | gradient | 0xffff00ff | | col.group_border | inactive (out of focus) group border color | gradient | 0x66777700 | | col.group_border_active | active group border color | gradient | 0x66ffff00 | | col.group_border_locked | inactive locked group border color | gradient | 0x66775500 | | col.group_border_locked_active | active locked group border color | gradient | 0x66ff5500 | -| cursor_inactive_timeout | in seconds, after how many seconds of cursor’s inactivity to hide it. Set to `0` for never. | int | 0 | -| layout | which layout to use. (Available: `dwindle`, `master`) | str | dwindle | +| cursor_inactive_timeout | in seconds, after how many seconds of cursor’s inactivity to hide it. Set to `0` for never. | int | 0 | +| layout | which layout to use. (Available: `dwindle`, `master`) | str | dwindle | | no_cursor_warps | if true, will not warp the cursor in many cases (focusing, keybinds, etc) | bool | false | | no_focus_fallback | if true, will not fall back to the next available window when moving focus in a direction where no window was found | bool | false | -| apply_sens_to_raw | if on, will also apply the sensitivity to raw mouse output (e.g. sensitivity in games) **NOTICE:** _**really**_ not recommended. | bool | false | +| apply_sens_to_raw | if on, will also apply the sensitivity to raw mouse output (e.g. sensitivity in games) **NOTICE:** _**really**_ not recommended. | bool | false | | resize_on_border | enables resizing windows by clicking and dragging on borders and gaps | bool | false | -| extend_border_grab_area | extends the area around the border where you can click and drag on, only used when `general:resize_on_border` is on. | int | 15 | -| hover_icon_on_border | show a cursor icon when hovering over borders, only used when `general:resize_on_border` is on. | bool | true | -| allow_tearing | master switch for allowing tearing to occur. See [the Tearing page](https://wiki.hyprland.org/Configuring/Tearing). | bool | false | +| extend_border_grab_area | extends the area around the border where you can click and drag on, only used when `general:resize_on_border` is on. | int | 15 | +| hover_icon_on_border | show a cursor icon when hovering over borders, only used when `general:resize_on_border` is on. | bool | true | +| allow_tearing | master switch for allowing tearing to occur. See [the Tearing page](https://wiki.hyprland.org/Configuring/Tearing). | bool | false | ##### Decoration | name | description | type | default | @@ -69,11 +69,11 @@ The config is located in `~/.config/hypr/hyprland.conf`. | dim_inactive | enables dimming of inactive windows | bool | false | | dim_strength | how much inactive windows should be dimmed, 0.0 - 1.0 | float | 0.5 | | dim_special | how much to dim the rest of the screen by when a special workspace is open. 0.0 - 1.0 | float | 0.2 | -| dim_around | how much the `dimaround` window rule should dim by. 0.0 - 1.0 | float | 0.4 | -| screen_shader | a path to a custom shader to be applied at the end of rendering. See `examples/screenShader.frag` for an example. | str | [[Empty]] | +| dim_around | how much the `dimaround` window rule should dim by. 0.0 - 1.0 | float | 0.4 | +| screen_shader | a path to a custom shader to be applied at the end of rendering. See `examples/screenShader.frag` for an example. | str | [[Empty]] | ##### Blur -_Subcategory `decoration:blur:`_ +_Subcategory `decoration:blur:`_ | name | description | type | default | | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | ------- | @@ -105,34 +105,34 @@ _Subcategory `decoration:blur:`_ | numlock_by_default | Engage numlock by default. | bool | false | | repeat_rate | The repeat rate for held-down keys, in repeats per second. | int | 25 | | repeat_delay | Delay before a held-down key is repeated, in milliseconds. | int | 600 | -| sensitivity | Sets the mouse input sensitivity. Value will be clamped to the range -1.0 to 1.0. [libinput#pointer-acceleration](https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html#pointer-acceleration) | float | 0.0 | -| accel_profile | Sets the cursor acceleration profile. Can be one of `adaptive`, `flat`. Can also be `custom`, see below. Leave empty to use `libinput`’s default mode for your input device. [libinput#pointer-acceleration](https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html#pointer-acceleration) | str | [[Empty]] | -| force_no_accel | Force no cursor acceleration. This bypasses most of your pointer settings to get as raw of a signal as possible. **Enabling this is not recommended due to potential cursor desynchronization.** | bool | false | +| sensitivity | Sets the mouse input sensitivity. Value will be clamped to the range -1.0 to 1.0. [libinput#pointer-acceleration](https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html#pointer-acceleration) | float | 0.0 | +| accel_profile | Sets the cursor acceleration profile. Can be one of `adaptive`, `flat`. Can also be `custom`, see below. Leave empty to use `libinput`’s default mode for your input device. [libinput#pointer-acceleration](https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html#pointer-acceleration) | str | [[Empty]] | +| force_no_accel | Force no cursor acceleration. This bypasses most of your pointer settings to get as raw of a signal as possible. **Enabling this is not recommended due to potential cursor desynchronization.** | bool | false | | left_handed | Switches RMB and LMB | bool | false | -| scroll_method | Sets the scroll method. Can be one of `2fg` (2 fingers), `edge`, `on_button_down`, `no_scroll`. [libinput#scrolling](https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html) | str | [[Empty]] | -| scroll_button | Sets the scroll button. Has to be an int, cannot be a string. Check `wev` if you have any doubts regarding the ID. 0 means default. | int | 0 | +| scroll_method | Sets the scroll method. Can be one of `2fg` (2 fingers), `edge`, `on_button_down`, `no_scroll`. [libinput#scrolling](https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html) | str | [[Empty]] | +| scroll_button | Sets the scroll button. Has to be an int, cannot be a string. Check `wev` if you have any doubts regarding the ID. 0 means default. | int | 0 | | scroll_button_lock | If the scroll button lock is enabled, the button does not need to be held down. Pressing and releasing the button once enables the button lock, the button is now considered logically held down. Pressing and releasing the button a second time logically releases the button. While the button is logically held down, motion events are converted to scroll events. | bool | 0 | | natural_scroll | Inverts scrolling direction. When enabled, scrolling moves content directly instead of manipulating a scrollbar. | bool | false | | follow_mouse | (0/1/2/3) Specify if and how cursor movement should affect window focus. See the note below. | int | 1 | -| mouse_refocus | If disabled and `follow_mouse=1` then mouse focus will not switch to the hovered window unless the mouse crosses a window boundary. | bool | true | +| mouse_refocus | If disabled and `follow_mouse=1` then mouse focus will not switch to the hovered window unless the mouse crosses a window boundary. | bool | true | | float_switch_override_focus | If enabled (1 or 2), focus will change to the window under the cursor when changing from tiled-to-floating and vice versa. If 2, focus will also follow mouse on float-to-float switches. | int | 1 | > **XKB Settings**: -> You can find a list of models, layouts, variants and options in [`/usr/share/X11/xkb/rules/base.lst`](file:///usr/share/X11/xkb/rules/base.lst). Alternatively, you can use the `localectl` command to discover what is available on your system. +> You can find a list of models, layouts, variants and options in [`/usr/share/X11/xkb/rules/base.lst`](file:///usr/share/X11/xkb/rules/base.lst). Alternatively, you can use the `localectl` command to discover what is available on your system. ##### Touchpad -_Subcategory `input:touchpad:`_ +_Subcategory `input:touchpad:`_ | name | description | type | default | | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- | --------- | | disable_while_typing | Disable the touchpad while typing. | bool | true | | natural_scroll | Inverts scrolling direction. When enabled, scrolling moves content directly instead of manipulating a scrollbar. | bool | false | | scroll_factor | Multiplier applied to the amount of scroll movement. | float | 1.0 | -| middle_button_emulation | Sending LMB and RMB simultaneously will be interpreted as a middle click. This disables any touchpad area that would normally send a middle click based on location. [libinput#middle-button-emulation](https://wayland.freedesktop.org/libinput/doc/latest/middle-button-emulation.html) | bool | false | -| tap_button_map | Sets the tap button mapping for touchpad button emulation. Can be one of `lrm` (default) or `lmr` (Left, Middle, Right Buttons). | str | [[Empty]] | -| clickfinger_behavior | Button presses with 1, 2, or 3 fingers will be mapped to LMB, RMB, and MMB respectively. This disables interpretation of clicks based on location on the touchpad. [libinput#clickfinger-behavior](https://wayland.freedesktop.org/libinput/doc/latest/clickpad-softbuttons.html#clickfinger-behavior) | bool | false | +| middle_button_emulation | Sending LMB and RMB simultaneously will be interpreted as a middle click. This disables any touchpad area that would normally send a middle click based on location. [libinput#middle-button-emulation](https://wayland.freedesktop.org/libinput/doc/latest/middle-button-emulation.html) | bool | false | +| tap_button_map | Sets the tap button mapping for touchpad button emulation. Can be one of `lrm` (default) or `lmr` (Left, Middle, Right Buttons). | str | [[Empty]] | +| clickfinger_behavior | Button presses with 1, 2, or 3 fingers will be mapped to LMB, RMB, and MMB respectively. This disables interpretation of clicks based on location on the touchpad. [libinput#clickfinger-behavior](https://wayland.freedesktop.org/libinput/doc/latest/clickpad-softbuttons.html#clickfinger-behavior) | bool | false | | tap-to-click | Tapping on the touchpad with 1, 2, or 3 fingers will send LMB, RMB, and MMB respectively. | bool | true | -| drag_lock | When enabled, lifting the finger off for a short time while dragging will not drop the dragged item. [libinput#tap-and-drag](https://wayland.freedesktop.org/libinput/doc/latest/tapping.html#tap-and-drag) | bool | false | +| drag_lock | When enabled, lifting the finger off for a short time while dragging will not drop the dragged item. [libinput#tap-and-drag](https://wayland.freedesktop.org/libinput/doc/latest/tapping.html#tap-and-drag) | bool | false | | tap-and-drag | Sets the tap and drag mode for the touchpad | bool | false | ##### Gestures @@ -142,14 +142,14 @@ _Subcategory `input:touchpad:`_ | workspace_swipe_fingers | how many fingers for the gesture | int | 3 | | workspace_swipe_distance | in px, the distance of the gesture | int | 300 | | workspace_swipe_invert | invert the direction | bool | true | -| workspace_swipe_min_speed_to_force | minimum speed in px per timepoint to force the change ignoring `cancel_ratio`. Setting to `0` will disable this mechanic. | int | 30 | +| workspace_swipe_min_speed_to_force | minimum speed in px per timepoint to force the change ignoring `cancel_ratio`. Setting to `0` will disable this mechanic. | int | 30 | | workspace_swipe_cancel_ratio | (0.0 - 1.0) how much the swipe has to proceed in order to commence it. (0.7 -> if > 0.7 * distance, switch, if less, revert) | float | 0.5 | | workspace_swipe_create_new | whether a swipe right on the last workspace should create a new one. | bool | true | -| workspace_swipe_direction_lock | if enabled, switching direction will be locked when you swipe past the `direction_lock_threshold`. | bool | true | +| workspace_swipe_direction_lock | if enabled, switching direction will be locked when you swipe past the `direction_lock_threshold`. | bool | true | | workspace_swipe_direction_lock_threshold | in px, the distance to swipe before direction lock activates. | int | 10 | | workspace_swipe_forever | if enabled, swiping will not clamp at the neighboring workspaces but continue to the further ones. | bool | false | | workspace_swipe_numbered | if enabled, swiping will swipe on consecutive numbered workspaces. | bool | false | -| workspace_swipe_use_r | if enabled, swiping will use the `r` prefix instead of the `m` prefix for finding workspaces. (requires disabled `workspace_swipe_numbered`) | bool | false | +| workspace_swipe_use_r | if enabled, swiping will use the `r` prefix instead of the `m` prefix for finding workspaces. (requires disabled `workspace_swipe_numbered`) | bool | false | ##### Misc | name | description | type | default | @@ -157,7 +157,7 @@ _Subcategory `input:touchpad:`_ | disable_hyprland_logo | disables the random hyprland logo / anime girl background. :( | bool | false | | disable_splash_rendering | disables the hyprland splash rendering. (requires a monitor reload to take effect) | bool | false | | force_hypr_chan | makes the background always have hypr-chan, the hyprland mascot | bool | false | -| force_default_wallpaper | Enforce any of the 3 default wallpapers. Setting this to `0` disables the anime background. `-1` means “random” | int | -1 | +| force_default_wallpaper | Enforce any of the 3 default wallpapers. Setting this to `0` disables the anime background. `-1` means “random” | int | -1 | | vfr | controls the VFR status of hyprland. Heavily recommended to leave on true to conserve resources. | bool | true | | vrr | controls the VRR (Adaptive Sync) of your monitors. 0 - off, 1 - on, 2 - fullscreen only | int | 0 | | mouse_move_enables_dpms | If DPMS is set to off, wake up the monitors if the mouse moves. | bool | false | @@ -166,16 +166,16 @@ _Subcategory `input:touchpad:`_ | layers_hog_keyboard_focus | If true, will make keyboard-interactive layers keep their focus on mouse move (e.g. wofi, bemenu) | bool | true | | animate_manual_resizes | If true, will animate manual window resizes/moves | bool | false | | animate_mouse_windowdragging | If true, will animate windows being dragged by mouse, note that this can cause weird behavior on some curves | bool | false | -| disable_autoreload | If true, the config will not reload automatically on save, and instead needs to be reloaded with `hyprctl reload`. Might save on battery. | bool | false | +| disable_autoreload | If true, the config will not reload automatically on save, and instead needs to be reloaded with `hyprctl reload`. Might save on battery. | bool | false | | enable_swallow | Enable window swallowing | bool | false | -| swallow_regex | The _class_ regex to be used for windows that should be swallowed (usually, a terminal). To know more about the list of regex which can be used [use this cheatsheet](https://github.com/ziishaned/learn-regex/blob/master/README.md). | str | [[Empty]] | -| swallow_exception_regex | The _title_ regex to be used for windows that should _not_ be swallowed by the windows specified in swallow_regex (e.g. wev). The regex is matched against the parent (e.g. Kitty) window’s title on the assumption that it changes to whatever process it’s running. | str | [[Empty]] | -| focus_on_activate | Whether Hyprland should focus an app that requests to be focused (an `activate` request) | bool | false | +| swallow_regex | The _class_ regex to be used for windows that should be swallowed (usually, a terminal). To know more about the list of regex which can be used [use this cheatsheet](https://github.com/ziishaned/learn-regex/blob/master/README.md). | str | [[Empty]] | +| swallow_exception_regex | The _title_ regex to be used for windows that should _not_ be swallowed by the windows specified in swallow_regex (e.g. wev). The regex is matched against the parent (e.g. Kitty) window’s title on the assumption that it changes to whatever process it’s running. | str | [[Empty]] | +| focus_on_activate | Whether Hyprland should focus an app that requests to be focused (an `activate` request) | bool | false | | no_direct_scanout | Disables direct scanout. Direct scanout attempts to reduce lag when there is only one fullscreen application on a screen (e.g. game). It is also recommended to set this to true if the fullscreen application shows graphical glitches. | bool | true | | hide_cursor_on_touch | Hides the cursor when the last input was a touch input until a mouse input is done. | bool | true | | mouse_move_focuses_monitor | Whether mouse moving into a different monitor should focus it | bool | true | | suppress_portal_warnings | disables warnings about incompatible portal implementations. | bool | false | -| render_ahead_of_time | [Warning: buggy] starts rendering _before_ your monitor displays a frame in order to lower latency | bool | false | +| render_ahead_of_time | [Warning: buggy] starts rendering _before_ your monitor displays a frame in order to lower latency | bool | false | | render_ahead_safezone | how many ms of safezone to add to rendering ahead of time. Recommended 1-2. | int | 1 | | cursor_zoom_factor | the factor to zoom by around the cursor. AKA. Magnifying glass. Minimum 1.0 (meaning no zoom) | float | 1.0 | | cursor_zoom_rigid | whether the zoom should follow the cursor rigidly (cursor is always centered if it can be) or loosely | bool | false | @@ -187,7 +187,7 @@ _Subcategory `input:touchpad:`_ | groupbar_titles_font_size | font size for the above | int | 8 | | groupbar_gradients | whether to draw gradients under the titles of the above | bool | true | | groupbar_text_color | controls the group bar text color | color | 0xffffffff | -| background_color | change the background color. (requires enabled `disable_hyprland_logo`) | color | 0x111111 | +| background_color | change the background color. (requires enabled `disable_hyprland_logo`) | color | 0x111111 | | close_special_on_empty | close the special workspace if the last window is removed | bool | true | | new_window_takes_over_fullscreen | if there is a fullscreen window, whether a new tiled window opened should replace the fullscreen one or stay behind. 0 - behind, 1 - takes over, 2 - unfullscreen the current fullscreen window | int | 0 | @@ -195,9 +195,9 @@ _Subcategory `input:touchpad:`_ #### Executing you can execute a shell script on startup of the compositor or on each time it’s reloaded. -`exec-once=command` will execute only on launch +`exec-once=command` will execute only on launch -`exec=command` will execute on each reload +`exec=command` will execute on each reload #### Defining variables You can define your own custom variables like this: @@ -216,21 +216,21 @@ col.active_border=$MyColor ``` #### Sourcing (multi-file) -Use the `source` keyword to source another file. +Use the `source` keyword to source another file. -For example, in your `hyprland.conf` you can: +For example, in your `hyprland.conf` you can: ``` source=~/.config/hypr/myColors.conf ``` And Hyprland will enter that file and parse it like a Hyprland config. -Please note it’s LINEAR. Meaning lines above the `source=` will be parsed first, then lines inside `~/.config/hypr/myColors.conf`, then lines below. +Please note it’s LINEAR. Meaning lines above the `source=` will be parsed first, then lines inside `~/.config/hypr/myColors.conf`, then lines below. #### Setting the environment -> The `env` keyword works just like `exec-once`, meaning it will only fire once on Hyprland’s launch. +> The `env` keyword works just like `exec-once`, meaning it will only fire once on Hyprland’s launch. -You can use the `env` keyword to set environment variables at Hyprland’s start, e.g.: +You can use the `env` keyword to set environment variables at Hyprland’s start, e.g.: ``` env = XCURSOR_SIZE,24 @@ -252,14 +252,14 @@ A common example: monitor=DP-1,1920x1080@144,0x0,1 ``` -will tell Hyprland to make the monitor on `DP-1` a `1920x1080` display, at 144Hz, `0x0` off from the top left corner, with a scale of 1 (unscaled). +will tell Hyprland to make the monitor on `DP-1` a `1920x1080` display, at 144Hz, `0x0` off from the top left corner, with a scale of 1 (unscaled). To list available monitors: ```shell hyprctl monitors ``` -Monitors are positioned on a virtual “layout”. The `position` is the position of said display in the layout. (calculated from the top-left corner) +Monitors are positioned on a virtual “layout”. The `position` is the position of said display in the layout. (calculated from the top-left corner) For example: ``` @@ -267,21 +267,21 @@ monitor=DP-1, 1920x1080, 0x0, 1 monitor=DP-2, 1920x1080, 1920x0, 1 ``` -will tell hyprland to make DP-1 on the _left_ of DP-2, while +will tell hyprland to make DP-1 on the _left_ of DP-2, while ``` monitor=DP-1, 1920x1080, 1920x0, 1 monitor=DP-2, 1920x1080, 0x0, 1 ``` -will tell hyprland to make DP-1 on the _right_. +will tell hyprland to make DP-1 on the _right_. -> The position is calculated with the scaled (and transformed) resolution, meaning if you want your 4K monitor with scale 2 to the left of your 1080p one, you’d use the position `1920x0` for the second screen. (3840 / 2) If the monitor is also rotated 90 degrees (vertical) you’d use `1080x0`. +> The position is calculated with the scaled (and transformed) resolution, meaning if you want your 4K monitor with scale 2 to the left of your 1080p one, you’d use the position `1920x0` for the second screen. (3840 / 2) If the monitor is also rotated 90 degrees (vertical) you’d use `1080x0`. Leaving the name empty will define a fallback rule to use when no other rules match. -You can use `preferred` as a resolution to use the display’s preferred size, and `auto` as a position to let Hyprland decide on a position for you. +You can use `preferred` as a resolution to use the display’s preferred size, and `auto` as a position to let Hyprland decide on a position for you. -You can also use `auto` as a scale to let Hyprland decide on a scale for you. These depend on the PPI of the monitor. +You can also use `auto` as a scale to let Hyprland decide on a scale for you. These depend on the PPI of the monitor. Recommended rule for quickly plugging in random monitors: ``` @@ -298,7 +298,7 @@ monitor=name,disable ``` #### Mirrored displays -If you want to mirror a display, add a `,mirror,[NAME]` at the end of the monitor rule, examples: +If you want to mirror a display, add a `,mirror,[NAME]` at the end of the monitor rule, examples: ``` monitor=DP-3,1920x1080@60,0x0,1,mirror,DP-2 monitor=,preferred,auto,1,mirror,DP-1 @@ -307,7 +307,7 @@ monitor=,preferred,auto,1,mirror,DP-1 Please remember that mirroring displays will not “re-render” everything for your second monitor, so if mirroring a 1080p screen onto a 4K one, the resolution will still be 1080p on the 4K display. This also means squishing and stretching will occur on non-matching resolutions. #### Rotating -If you want to rotate a monitor, add a `,transform,X` at the end of the monitor rule, where `X` corresponds to a transform number, e.g.: +If you want to rotate a monitor, add a `,transform,X` at the end of the monitor rule, where `X` corresponds to a transform number, e.g.: ``` monitor=eDP-1,2880x1800@90,0x0,1,transform,1 ``` @@ -335,7 +335,7 @@ for example, bind=SUPER_SHIFT,Q,exec,firefox ``` -will bind opening firefox to SUPER + SHIFT + Q +will bind opening firefox to SUPER + SHIFT + Q For binding keys without a modkey, leave it empty: ``` @@ -354,10 +354,10 @@ bindl=,switch:on:[switch name],exec,hyprctl keyword monitor "eDP-1, 2560x1600, 0 bindl=,switch:off:[switch name],exec,hyprctl keyword monitor "eDP-1, disable" ``` -check out your switches in `hyprctl devices`. +check out your switches in `hyprctl devices`. #### Bind flags -`bind` supports flags in this format: +`bind` supports flags in this format: ``` bind[flags]=... ``` @@ -394,9 +394,9 @@ bindr=SUPER, SUPER_L, exec, pkill wofi || wofi #### Global Keybinds Yes, you heard this right, Hyprland does support global keybinds for ALL apps, including OBS, Discord, Firefox, etc. -See the [`pass` dispatcher](https://wiki.hyprland.org/Configuring/Dispatchers/#list-of-dispatchers) for keybinds. +See the [`pass` dispatcher](https://wiki.hyprland.org/Configuring/Dispatchers/#list-of-dispatchers) for keybinds. -Let’s take OBS as an example: the “Start/Stop Recording” keybind is set to SUPER + F10, and you want to make it work globally. +Let’s take OBS as an example: the “Start/Stop Recording” keybind is set to SUPER + F10, and you want to make it work globally. Simply add to your config and you’re done ``` @@ -404,7 +404,7 @@ bind = SUPER,F10,pass,^(com\.obsproject\.Studio)$ ``` #### Submaps -If you want keybind submaps, also known as _modes_ or _groups_, for example if you press ALT + R, you can enter a “resize” mode, resize with arrow keys, and leave with escape, do it like this: +If you want keybind submaps, also known as _modes_ or _groups_, for example if you press ALT + R, you can enter a “resize” mode, resize with arrow keys, and leave with escape, do it like this: ``` # will switch to a submap called resize bind=ALT,R,submap,resize @@ -427,77 +427,77 @@ submap=reset # keybinds further down will be global again... ``` -**IMPORTANT:** do not forget a keybind to reset the keymap while inside it! (In this case, `escape`) +**IMPORTANT:** do not forget a keybind to reset the keymap while inside it! (In this case, `escape`) ### Dispatchers #### Parameter explanation | Param type | Description | | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| window | a window. Any of the following: Class regex, `title:` and a title regex, `pid:` and the pid, `address:` and the address | +| window | a window. Any of the following: Class regex, `title:` and a title regex, `pid:` and the pid, `address:` and the address | | workspace | see below. | -| direction | `l` `r` `u` `d` left right up down | -| monitor | One of: direction, ID, name, `current`, relative (e.g. `+1` or `-1`) | -| resizeparams | relative pixel delta vec2 (e.g. `10 -10`), optionally a percentage of the window size (e.g. `20 25%`) or `exact` followed by an exact vec2 (e.g. `exact 1280 720`), optionally a percentage of the screen size (e.g. `exact 50% 50%`) | -| floatvalue | a relative float delta (e.g `-0.2` or `+0.2`) or `exact` followed by a the exact float value (e.g. `exact 0.5`) | +| direction | `l` `r` `u` `d` left right up down | +| monitor | One of: direction, ID, name, `current`, relative (e.g. `+1` or `-1`) | +| resizeparams | relative pixel delta vec2 (e.g. `10 -10`), optionally a percentage of the window size (e.g. `20 25%`) or `exact` followed by an exact vec2 (e.g. `exact 1280 720`), optionally a percentage of the screen size (e.g. `exact 50% 50%`) | +| floatvalue | a relative float delta (e.g `-0.2` or `+0.2`) or `exact` followed by a the exact float value (e.g. `exact 0.5`) | | workspaceopt | see below. | -| zheight | `top` or `bottom` | +| zheight | `top` or `bottom` | #### List of Dispatchers | Dispatcher | Description | Params | | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -| exec | executes a shell command | command (supports rules, see [below](https://wiki.hyprland.org/Configuring/Dispatchers/#executing-with-rules)) | -| execr | executes a raw shell command (will not append any additional envvars like `exec` does, does not support rules) | command | +| exec | executes a shell command | command (supports rules, see [below](https://wiki.hyprland.org/Configuring/Dispatchers/#executing-with-rules)) | +| execr | executes a raw shell command (will not append any additional envvars like `exec` does, does not support rules) | command | | pass | passes the key (with mods) to a specified window. Can be used as a workaround to global keybinds not working on Wayland. | window | | killactive | closes (not kills) the active window | none | | closewindow | closes a specified window | window | | workspace | changes the workspace | workspace | -| movetoworkspace | moves the focused window to a workspace | workspace OR `workspace,window` for a specific window | -| movetoworkspacesilent | same as above, but doesnt switch to the workspace | workspace OR `workspace,window` for a specific window | -| togglefloating | toggles the current window’s floating state | left empty / `active` for current, or `window` for a specific window | +| movetoworkspace | moves the focused window to a workspace | workspace OR `workspace,window` for a specific window | +| movetoworkspacesilent | same as above, but doesnt switch to the workspace | workspace OR `workspace,window` for a specific window | +| togglefloating | toggles the current window’s floating state | left empty / `active` for current, or `window` for a specific window | | fullscreen | toggles the focused window’s fullscreen state | 0 - fullscreen (takes your entire screen), 1 - maximize (keeps gaps and bar(s)) | | fakefullscreen | toggles the focused window’s internal fullscreen state without altering the geometry | none | -| dpms | sets all monitors’ DPMS status. Do not use with a keybind directly. | `on`, `off`, or `toggle`. For specific monitor add monitor name after a space | -| pin | pins a window (i.e. show it on all workspaces) _note: floating only_ | left empty / `active` for current, or `window` for a specific window | +| dpms | sets all monitors’ DPMS status. Do not use with a keybind directly. | `on`, `off`, or `toggle`. For specific monitor add monitor name after a space | +| pin | pins a window (i.e. show it on all workspaces) _note: floating only_ | left empty / `active` for current, or `window` for a specific window | | movefocus | moves the focus in a direction | direction | -| movewindow | moves the active window in a direction or to a monitor | direction or `mon:` and a monitor | +| movewindow | moves the active window in a direction or to a monitor | direction or `mon:` and a monitor | | swapwindow | swaps the active window with another window in the given direction | direction | -| centerwindow | center the active window _note: floating only_ | none (for monitor center) or 1 (to respect monitor reserved area) | +| centerwindow | center the active window _note: floating only_ | none (for monitor center) or 1 (to respect monitor reserved area) | | resizeactive | resizes the active window | resizeparams | | moveactive | moves the active window | resizeparams | -| resizewindowpixel | resizes a selected window | `resizeparams,window`, e.g. `100 100,^(kitty)$` | +| resizewindowpixel | resizes a selected window | `resizeparams,window`, e.g. `100 100,^(kitty)$` | | movewindowpixel | moves a selected window | `resizeparams,window` | -| cyclenext | focuses the next window on a workspace | none (for next) or `prev` (for previous) | -| swapnext | swaps the focused window with the next window on a workspace | none (for next) or `prev` (for previous) | +| cyclenext | focuses the next window on a workspace | none (for next) or `prev` (for previous) | +| swapnext | swaps the focused window with the next window on a workspace | none (for next) or `prev` (for previous) | | focuswindow | focuses the first window matching | window | | focusmonitor | focuses a monitor | monitor | | splitratio | changes the split ratio | floatvalue | -| toggleopaque | toggles the current window to always be opaque. Will override the `opaque` window rules. | none | +| toggleopaque | toggles the current window to always be opaque. Will override the `opaque` window rules. | none | | movecursortocorner | moves the cursor to the corner of the active window | direction, 0 - 3, bottom left - 0, bottom right - 1, top right - 2, top left - 3 | | movecursor | moves the cursor to a specified position | `x,y` | | workspaceopt | toggles a workspace option for the active workspace. | workspaceopt | -| renameworkspace | rename a workspace | `id name`, e.g. `2 work` | +| renameworkspace | rename a workspace | `id name`, e.g. `2 work` | | exit | exits the compositor with no questions asked. | none | | forcerendererreload | forces the renderer to reload all resources and outputs | none | | movecurrentworkspacetomonitor | Moves the active workspace to a monitor | monitor | | moveworkspacetomonitor | Moves a workspace to a monitor | workspace and a monitor separated by a space | | swapactiveworkspaces | Swaps the active workspaces between two monitors | two monitors separated by a space | -| bringactivetotop | _Deprecated_ in favor of alterzorder. Brings the current window to the top of the stack | none | +| bringactivetotop | _Deprecated_ in favor of alterzorder. Brings the current window to the top of the stack | none | | alterzorder | Modify the window stack order of the active or specified window. Note: this cannot be used to move a floating window behind a tiled one. | zheight[,window] | | togglespecialworkspace | toggles a special workspace on/off | none (for the first) or name for named (name has to be a special workspace’s name) | | focusurgentorlast | Focuses the urgent window or the last window | none | | togglegroup | toggles the current active window into a group | none | | changegroupactive | switches to the next window in a group. | b - back, f - forward, or index start at 1 | | focuscurrentorlast | Switch focus from current to previously focused window | none | -| lockgroups | Locks the groups (all groups will not accept new windows) | `lock` for locking, `unlock` for unlocking, `toggle` for toggle | -| lockactivegroup | Lock the focused group (the current group will not accept new windows or be moved to other groups) | `lock` for locking, `unlock` for unlocking, `toggle` for toggle | +| lockgroups | Locks the groups (all groups will not accept new windows) | `lock` for locking, `unlock` for unlocking, `toggle` for toggle | +| lockactivegroup | Lock the focused group (the current group will not accept new windows or be moved to other groups) | `lock` for locking, `unlock` for unlocking, `toggle` for toggle | | moveintogroup | Moves the active window into a group in a specified direction. No-op if there is no group in the specified direction. | direction | | moveoutofgroup | Moves the active window out of a group. No-op if not in a group | none | -| movewindoworgroup | Behaves as `moveintogroup` if there is a group in the given direction. Behaves as `moveoutofgroup` if there is no group in the given direction relative to the active group. Otherwise behaves like `movewindow`. | direction | -| movegroupwindow | Swaps the active window with the next or previous in a group | `b` for back, anything else for forward | -| denywindowfromgroup | Prohibit the active window from becoming or being inserted into group | `on`, `off` or, `toggle` | -| setignoregrouplock | Temporarily enable or disable binds:ignore_group_lock | `on`, `off`, or `toggle` | -| global | Executes a Global Shortcut using the GlobalShortcuts portal. See [here](https://wiki.hyprland.org/Configuring/Binds/#global-keybinds) | name | -| submap | Change the current mapping group. See [Submaps](https://wiki.hyprland.org/Configuring/Binds/#submaps) | `reset` or name | +| movewindoworgroup | Behaves as `moveintogroup` if there is a group in the given direction. Behaves as `moveoutofgroup` if there is no group in the given direction relative to the active group. Otherwise behaves like `movewindow`. | direction | +| movegroupwindow | Swaps the active window with the next or previous in a group | `b` for back, anything else for forward | +| denywindowfromgroup | Prohibit the active window from becoming or being inserted into group | `on`, `off` or, `toggle` | +| setignoregrouplock | Temporarily enable or disable binds:ignore_group_lock | `on`, `off`, or `toggle` | +| global | Executes a Global Shortcut using the GlobalShortcuts portal. See [here](https://wiki.hyprland.org/Configuring/Binds/#global-keybinds) | name | +| submap | Change the current mapping group. See [Submaps](https://wiki.hyprland.org/Configuring/Binds/#submaps) | `reset` or name | ### Window Rules #### Syntax @@ -505,10 +505,10 @@ submap=reset windowrule=RULE,WINDOW ``` -- `RULE` is a [rule](https://wiki.hyprland.org/Configuring/Window-Rules/#rules) (and a param if applicable) -- `WINDOW` is a [RegEx](https://en.wikipedia.org/wiki/Regular_expression), either: +- `RULE` is a [rule](https://wiki.hyprland.org/Configuring/Window-Rules/#rules) (and a param if applicable) +- `WINDOW` is a [RegEx](https://en.wikipedia.org/wiki/Regular_expression), either: - plain [RegEx](../../tools/Regex.md) (for matching a window class); - - `title:` followed by a [regex](../../tools/Regex.md) (for matching a window’s title) + - `title:` followed by a [regex](../../tools/Regex.md) (for matching a window’s title) #### Rules | Rule | Description | Dynamic | @@ -520,19 +520,19 @@ windowrule=RULE,WINDOW | maximize | maximizes a window | | | nofullscreenrequest | prevents windows from requesting fullscreen mode, you can still manually toggle fullscreen. | | | nomaximizerequest | prevents windows from requesting maximized mode, you can still manually toggle maximize. | | -| move [x] [y] | moves a floating window (x,y -> int or %, e.g. 20% or 100. You are also allowed to do `100%-` for the right/bottom anchor, e.g. `100%-20`). Additionally, you can also do `cursor [x] [y]` where x and y are either pixels or percent. Percent is calculated from the window’s size. Specify `onscreen` before other parameters to force the window into the screen (e.g. `move onscreen cursor 50% 50%`) | | +| move [x] [y] | moves a floating window (x,y -> int or %, e.g. 20% or 100. You are also allowed to do `100%-` for the right/bottom anchor, e.g. `100%-20`). Additionally, you can also do `cursor [x] [y]` where x and y are either pixels or percent. Percent is calculated from the window’s size. Specify `onscreen` before other parameters to force the window into the screen (e.g. `move onscreen cursor 50% 50%`) | | | size [x] [y] | resizes a floating window (x,y -> int or %, e.g. 20% or 100) | | | minsize [x] [y] | sets the minimum size on creation (x,y -> int) | | | maxsize [x] [y] | sets the maximum size on creation (x,y -> int) | | | center ([opt]) | if the window is floating, will center it on the monitor. Set opt as 1 to respect monitor reserved area | | | pseudo | pseudotiles a window | | -| monitor [id] | sets the monitor on which a window should open. `id` can be either id or name (either e.g. `1` or e.g. `DP-1`) | | -| workspace [w] | sets the workspace on which a window should open (for workspace syntax, see [dispatchers->workspaces](https://wiki.hyprland.org/Configuring/Dispatchers#workspaces)). You can also make [w] to `unset`, will unset all previous workspace rules applied to this window. You can also add `silent` after the workspace to make the window open silently. | | -| opacity [a] | additional opacity multiplier. Options for a: `float` -> sets an opacity OR `float float` -> sets activeopacity and inactiveopacity respectively. You can also add `override` after an opacity to make it override instead of a multiplier. (e.g. `1.0 override 0.5 override`) | ✓ | +| monitor [id] | sets the monitor on which a window should open. `id` can be either id or name (either e.g. `1` or e.g. `DP-1`) | | +| workspace [w] | sets the workspace on which a window should open (for workspace syntax, see [dispatchers->workspaces](https://wiki.hyprland.org/Configuring/Dispatchers#workspaces)). You can also make [w] to `unset`, will unset all previous workspace rules applied to this window. You can also add `silent` after the workspace to make the window open silently. | | +| opacity [a] | additional opacity multiplier. Options for a: `float` -> sets an opacity OR `float float` -> sets activeopacity and inactiveopacity respectively. You can also add `override` after an opacity to make it override instead of a multiplier. (e.g. `1.0 override 0.5 override`) | ✓ | | opaque | forces the window to be opaque (can be toggled with the toggleopaque dispatcher) | ✓ | -| forcergbx | makes hyprland ignore the alpha channel of all the window’s surfaces, effectively making it _actually, fully 100% opaque_ | ✓ | +| forcergbx | makes hyprland ignore the alpha channel of all the window’s surfaces, effectively making it _actually, fully 100% opaque_ | ✓ | | animation [style] ([opt]) | forces an animation onto a window, with a selected opt. Opt is optional. | ✓ | -| rounding [x] | forces the application to have X pixels of rounding, ignoring the set default (in `decoration:rounding`). Has to be an int. | ✓ | +| rounding [x] | forces the application to have X pixels of rounding, ignoring the set default (in `decoration:rounding`). Has to be an int. | ✓ | | noblur | disables blur for the window | ✓ | | nofocus | disables focus to the window | | | noinitialfocus | disables the initial focus to the window | | @@ -542,30 +542,30 @@ windowrule=RULE,WINDOW | noshadow | disables shadows for the window | ✓ | | forceinput | forces an XWayland window to receive input, even if it requests not to do so. (Might fix issues like e.g. Game Launchers not receiving focus for some reason) | | | windowdance | forces an XWayland window to never refocus, used for games/applications like Rhythm Doctor | | -| pin | pins the window (i.e. show it on all workspaces) _note: floating only_ | | +| pin | pins the window (i.e. show it on all workspaces) _note: floating only_ | | | noanim | disables the animations for the window | ✓ | | keepaspectratio | forces aspect ratio when resizing window with the mouse | ✓ | -| bordercolor [c] | force the bordercolor of the window. Options for c: `color` -> sets the active border color OR `color color` -> sets the active and inactive border color of the window. See [variables->colors](https://wiki.hyprland.org/Configuring/Variables#variable_types) for color definition. | ✓ | -| idleinhibit [mode] | sets an idle inhibit rule for the window. If active, apps like `swayidle` will not fire. Modes: `none`, `always`, `focus`, `fullscreen` | | +| bordercolor [c] | force the bordercolor of the window. Options for c: `color` -> sets the active border color OR `color color` -> sets the active and inactive border color of the window. See [variables->colors](https://wiki.hyprland.org/Configuring/Variables#variable_types) for color definition. | ✓ | +| idleinhibit [mode] | sets an idle inhibit rule for the window. If active, apps like `swayidle` will not fire. Modes: `none`, `always`, `focus`, `fullscreen` | | | unset | removes all previously set rules for the given parameters. Please note it has to match EXACTLY. | | | nomaxsize | removes max size limitations. Especially useful with windows that report invalid max sizes (e.g. winecfg) | | | dimaround | dims everything around the window . Please note this rule is meant for floating windows and using it on tiled ones may result in strange behavior. | ✓ | | stayfocused | forces focus on the window as long as it’s visible | | | xray [on] | sets blur xray mode for the window (0 for off, 1 for on, unset for default) | ✓ | | group [options] | set window group properties. See the note below. | | -| immediate | forces the window to allow to be torn. See [the Tearing page](https://wiki.hyprland.org/Configuring/Tearing). | ✓ | +| immediate | forces the window to allow to be torn. See [the Tearing page](https://wiki.hyprland.org/Configuring/Tearing). | ✓ | #### Window Rules V2 In V2, you are allowed to match multiple variables. -the `RULE` field is unchanged, but in the `WINDOW` field, you can put regexes for multiple values like so: +the `RULE` field is unchanged, but in the `WINDOW` field, you can put regexes for multiple values like so: ``` windowrulev2 = float,class:(kitty),title:(kitty) ``` > In the case of dynamic window titles such as browser windows keep in mind how powerful regex is. -> for example a window rule of: `windowrule=opacity 0.3 override 0.3 override,title:(.*)(- Youtube)$` will match _any_ window that contains a string of “- Youtube” after any other text. This could be multiple browser windows or other applications that contain the string for any reason. -> for the `windowrulev2 = float,class:(kitty),title:(kitty)` example, the `class:(kitty)` `WINDOW` field is what keeps the window rule specific to kitty terminals. +> for example a window rule of: `windowrule=opacity 0.3 override 0.3 override,title:(.*)(- Youtube)$` will match _any_ window that contains a string of “- Youtube” after any other text. This could be multiple browser windows or other applications that contain the string for any reason. +> for the `windowrulev2 = float,class:(kitty),title:(kitty)` example, the `class:(kitty)` `WINDOW` field is what keeps the window rule specific to kitty terminals. For now, the supported fields are: ``` @@ -580,9 +580,9 @@ workspace - id or name: and name ### Tearing To enable tearing: -- Set `general:allow_tearing` to `true`. This is a “master toggle” -- Add `env = WLR_DRM_NO_ATOMIC,1` to your Hyprland config. This disables the usage of a newer kernel DRM API that doesn’t support tearing yet. -- Add an `immediate` windowrule to your game of choice. This makes sure that Hyprland will tear it. +- Set `general:allow_tearing` to `true`. This is a “master toggle” +- Add `env = WLR_DRM_NO_ATOMIC,1` to your Hyprland config. This disables the usage of a newer kernel DRM API that doesn’t support tearing yet. +- Add an `immediate` windowrule to your game of choice. This makes sure that Hyprland will tear it. > Please note that tearing will only be in effect when the game is in fullscreen and the only thing visible on the screen. @@ -598,18 +598,18 @@ windowrulev2 = immediate, class:^(cs2)$ ``` ### Using hyprctl -`hyprctl` is a utility for controlling some parts of the compositor from a CLI or a script. If you install with `make install`, or any package, it should automatically be installed. +`hyprctl` is a utility for controlling some parts of the compositor from a CLI or a script. If you install with `make install`, or any package, it should automatically be installed. -To check if `hyprctl` is installed, simply execute it by issuing `hyprctl` in the terminal. +To check if `hyprctl` is installed, simply execute it by issuing `hyprctl` in the terminal. -If it’s not, go to the repo root and `/hyprctl`. Issue a `make all` and then `sudo cp ./hyprctl /usr/bin`. +If it’s not, go to the repo root and `/hyprctl`. Issue a `make all` and then `sudo cp ./hyprctl /usr/bin`. #### Dispatch -issue a `dispatch` to call a keybind dispatcher with an arg. +issue a `dispatch` to call a keybind dispatcher with an arg. An arg has to be present, for dispatchers without parameters it can be anything. -To pass an argument starting with `-` or `--`, such as command line options to `exec` programs, pass `--` as an option. This will disable any subsequent parsing of options by _hyprctl_. +To pass an argument starting with `-` or `--`, such as command line options to `exec` programs, pass `--` as an option. This will disable any subsequent parsing of options by _hyprctl_. Examples: ```sh @@ -618,10 +618,10 @@ hyprctl dispatch -- exec kitty --single-instance hyprctl dispatch pseudo x ``` -Returns: `ok` on success, an error message on fail. +Returns: `ok` on success, an error message on fail. #### Keyword -issue a `keyword` to call a config keyword dynamically. +issue a `keyword` to call a config keyword dynamically. Examples: ```sh @@ -630,21 +630,21 @@ hyprctl keyword general:border_size 10 hyprctl keyword monitor DP-3,1920x1080@144,0x0,1 ``` -Returns: `ok` on success, an error message on fail. +Returns: `ok` on success, an error message on fail. #### Reload -issue a `reload` to force reload the config. +issue a `reload` to force reload the config. #### output Allows you to add and remove fake outputs to your preferred backend. -params: `create` or `remove` and `backend` or `name` respectively. +params: `create` or `remove` and `backend` or `name` respectively. -For _create_: -pass a backend name: `wayland`, `x11`, `headless` or `auto`. On a _real_ hyprland session, if you’re looking for a VNC / RDP type thing, it’s 99% going to be `headless`. +For _create_: +pass a backend name: `wayland`, `x11`, `headless` or `auto`. On a _real_ hyprland session, if you’re looking for a VNC / RDP type thing, it’s 99% going to be `headless`. -For _remove_: -pass the output’s name, as found in `hyprctl monitors`. Please be aware you are _not_ allowed to remove real displays with this command. +For _remove_: +pass the output’s name, as found in `hyprctl monitors`. Please be aware you are _not_ allowed to remove real displays with this command. e.g.: ```shell @@ -677,7 +677,7 @@ These commands let you gather information about your Hyprland session. Hyprctl c | instances | lists all running instances of hyprland with their info | | layouts | lists all layouts available | -For the getoption command, the option name should be written as `section:option`, e.g.: +For the getoption command, the option name should be written as `section:option`, e.g.: ```sh hyprctl getoption general:border_size @@ -686,14 +686,14 @@ hyprctl getoption input:touchpad:disable_while_typing ``` #### Batch -You can also use `--batch` to specify a batch of commands to execute +You can also use `--batch` to specify a batch of commands to execute e.g. ```sh hyprctl --batch "keyword general:border_size 2 ; keyword general:gaps_out 20" ``` -`;` separates the commands +`;` separates the commands ### Multi GPU If your host machine uses multiple GPUs, you may want to primarily use one GPU for rendering all the elements for Hyprland including windows, animations, and another for hardware acceleration for certain applications, etc. @@ -701,7 +701,7 @@ If your host machine uses multiple GPUs, you may want to primarily use one GPU f This setup is very common in the likes of gaming laptops, GPU-passthrough (without VFIO) capable hosts, and if you have multiple GPUs in general. #### Detecting GPUs -Upon running `lspci | grep -E 'VGA|3D'`, One can list all the video devices available. +Upon running `lspci | grep -E 'VGA|3D'`, One can list all the video devices available. ``` 01:00.0 VGA compatible controller: NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1) 06:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6) @@ -709,7 +709,7 @@ Upon running `lspci | grep -E 'VGA|3D'`, One can list all the video devices ava Here it is clear that 2 GPUs are available, the dedicated NVIDIA GTX 1650 Mobile / Max-Q and the integrated AMD Cezanne Radeon Vega Series GPU. -Now, run `ls -l /dev/dri/by-path` +Now, run `ls -l /dev/dri/by-path` ``` total 0 lrwxrwxrwx 1 root root 8 Jul 14 15:45 pci-0000:01:00.0-card -> ../card0 @@ -718,26 +718,26 @@ lrwxrwxrwx 1 root root 8 Jul 14 15:45 pci-0000:06:00.0-card -> ../card1 lrwxrwxrwx 1 root root 13 Jul 14 15:45 pci-0000:06:00.0-render -> ../renderD129 ``` -So from the above outputs, we can match the bus IDs and determine that NVIDIA is `card0` and AMD is `card1`. +So from the above outputs, we can match the bus IDs and determine that NVIDIA is `card0` and AMD is `card1`. #### Telling Hyprland which GPU to use After determining which “card” belongs to which GPU, we now have to tell Hyprland the GPU we want to use primarily. > It is generally a good idea for laptops to use the integrated GPU as the primary renderer as this preserves battery life and is practically indistinguishable from using the dedicated GPU on modern systems in most cases. Hyprland can be run on integrated GPUs just fine. The same principle applies for desktop setups with a lower and higher power rating GPUs respectively. -We can do so by using the `WLR_DRM_DEVICES` variable. +We can do so by using the `WLR_DRM_DEVICES` variable. -Add the following template to `hyprland.conf` +Add the following template to `hyprland.conf` ``` env = WLR_DRM_DEVICES,/dev/dri/cardN ``` -For our case, we want to use `card1` primarily and use it to render stuff. +For our case, we want to use `card1` primarily and use it to render stuff. ``` env = WLR_DRM_DEVICES,/dev/dri/card1:/dev/dri/card0 ``` -Here, we tell Hyprland to set priorities. If `card1` isn’t available for whatever reason, use `card0`. So if the AMD GPU isn’t available, use NVIDIA. The colon is for setting priorities, essentially. +Here, we tell Hyprland to set priorities. If `card1` isn’t available for whatever reason, use `card0`. So if the AMD GPU isn’t available, use NVIDIA. The colon is for setting priorities, essentially. You should now be able to use an integrated GPU for for lighter GPU loads, including Hyprland. @@ -748,41 +748,41 @@ This page documents software that is critical / very important to have running f DEs like KDE / Gnome will do this automatically, Hyprland will not (because you might want to use something else) #### Notification Daemon -_Starting method:_ most likely manual (`exec-once`) +_Starting method:_ most likely manual (`exec-once`) Many apps (e.g. Discord) may freeze without one running. -Use e.g. [Dunst](../utilities/Dunst.md), `mako`, etc. +Use e.g. [Dunst](../utilities/Dunst.md), `mako`, etc. #### Pipewire -_Starting method:_ automatic +_Starting method:_ automatic Pipewire is not necessarily required, but screensharing will not work without it. -Install `pipewire` and `wireplumber` (**not** `pipewire-media-session`) +Install `pipewire` and `wireplumber` (**not** `pipewire-media-session`) #### XDG Desktop Portal -_Starting method:_ Automatic on Systemd, manual otherwise +_Starting method:_ Automatic on Systemd, manual otherwise XDG Desktop Portal handles a lot of stuff for your desktop, like file pickers, screensharing, etc. -See [The Hyprland Desktop Portal Page](https://wiki.hyprland.org/Useful-Utilities/Hyprland-desktop-portal) +See [The Hyprland Desktop Portal Page](https://wiki.hyprland.org/Useful-Utilities/Hyprland-desktop-portal) #### Authentication Agent -_Starting method:_ manual (`exec-once`) +_Starting method:_ manual (`exec-once`) Authentication agents are the things that pop up a window asking you for a password whenever an app wants to elevate its privileges. -Our recommendation is the KDE one. For arch, it’s `polkit-kde-agent`. +Our recommendation is the KDE one. For arch, it’s `polkit-kde-agent`. -You can autostart it with `exec-once=/usr/lib/polkit-kde-authentication-agent-1`. On some distributions you might have to use a different path `/usr/libexec/polkit-kde-authentication-agent-1`. +You can autostart it with `exec-once=/usr/lib/polkit-kde-authentication-agent-1`. On some distributions you might have to use a different path `/usr/libexec/polkit-kde-authentication-agent-1`. -On other distributions that use a more recent version, such as Gentoo, it may be necessary to use `exec-once=/usr/lib64/libexec/polkit-kde-authentication-agent-1` instead. +On other distributions that use a more recent version, such as Gentoo, it may be necessary to use `exec-once=/usr/lib64/libexec/polkit-kde-authentication-agent-1` instead. #### Qt Wayland Support -_Starting method:_ none (just a library) +_Starting method:_ none (just a library) -Install `qt5-wayland` and `qt6-wayland`. +Install `qt5-wayland` and `qt6-wayland`. ### Status Bars - [Waybar](Waybar.md) @@ -795,13 +795,13 @@ An XDG Desktop Portal (later called XDP) is a program that lets other applicatio It’s used for stuff like e.g. opening file pickers, screen sharing. -On Wayland, it also requires an implementation. For Hyprland, you’d usually use `xdg-desktop-portal-wlr` (later called XDPW) +On Wayland, it also requires an implementation. For Hyprland, you’d usually use `xdg-desktop-portal-wlr` (later called XDPW) Unfortunately, due to various reasons the -wlr portal is inferior to the KDE or Gnome ones. -In order to bridge the gap, Hyprland has its own fork of XDPW that has more features, called [xdg-desktop-portal-hyprland](https://github.com/hyprwm/xdg-desktop-portal-hyprland). (later called XDPH) +In order to bridge the gap, Hyprland has its own fork of XDPW that has more features, called [xdg-desktop-portal-hyprland](https://github.com/hyprwm/xdg-desktop-portal-hyprland). (later called XDPH) -> XDPH doesn’t implement a file picker. For that, I recommend installing `xdg-desktop-portal-gtk` alongside XDPH. +> XDPH doesn’t implement a file picker. For that, I recommend installing `xdg-desktop-portal-gtk` alongside XDPH. Install: ```sh @@ -812,23 +812,23 @@ pacman -S xdg-desktop-portal-hyprland - [Rofi](../utilities/Rofi.md) ### Automatically Mounting Using`udiskie` -_Starting method:_ manual (’exec-once') +_Starting method:_ manual (’exec-once') USB Mass storage devices, like thumb drives, mobile phones, digital cameras, etc. do not mount automatically to the file system. -We generally have to manually mount it, often using root and `umount` to do so. +We generally have to manually mount it, often using root and `umount` to do so. -Many popular DEs automatically handle this by using `udisks2` wrappers. +Many popular DEs automatically handle this by using `udisks2` wrappers. -`udiskie` is a udisks2 front-end that allows to manage removable media such as CDs or flash drives from userspace. +`udiskie` is a udisks2 front-end that allows to manage removable media such as CDs or flash drives from userspace. -Install `udiskie` via your repositories, or [build manually](https://github.com/coldfix/udiskie/wiki/installation) +Install `udiskie` via your repositories, or [build manually](https://github.com/coldfix/udiskie/wiki/installation) -Head over to your `~/.config/hypr/hyprland.conf` and add the following lines: +Head over to your `~/.config/hypr/hyprland.conf` and add the following lines: ``` exec-once = udiskie & ``` -What this does is launches `udiskie` and `&` argument launches it in the background. +What this does is launches `udiskie` and `&` argument launches it in the background. [Screenshot]: data:image/webp;base64,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 diff --git a/technology/applications/desktops/picom.md b/technology/applications/desktops/picom.md index 79533ef..5362bc3 100644 --- a/technology/applications/desktops/picom.md +++ b/technology/applications/desktops/picom.md @@ -6,11 +6,11 @@ os: linux picom is a standalone compositor for Xorg, suitable for use with window managers that do not provide compositing. picom is a fork of compton, which is a fork of xcompmgr-dana, which in turn is a fork of xcompmgr. ## Configuration -The default configuration is available in `/etc/xdg/picom.conf`. For modifications, it can be copied to `~/.config/picom/picom.conf` or `~/.config/picom.conf`. +The default configuration is available in `/etc/xdg/picom.conf`. For modifications, it can be copied to `~/.config/picom/picom.conf` or `~/.config/picom.conf`. ## Usage To manually enable default compositing effects during a session, use the following command: `picom &` -To autostart picom as a background process for a session, the `-b` argument can be used (may cause a display freeze): +To autostart picom as a background process for a session, the `-b` argument can be used (may cause a display freeze): `picom -b` \ No newline at end of file diff --git a/technology/applications/development/DB Browser for SQLite.md b/technology/applications/development/DB Browser for SQLite.md index 91adf29..0d967ca 100644 --- a/technology/applications/development/DB Browser for SQLite.md +++ b/technology/applications/development/DB Browser for SQLite.md @@ -5,7 +5,7 @@ website: https://sqlitebrowser.org repo: https://github.com/sqlitebrowser/sqlitebrowser --- # DB Browser for SQLite -_DB Browser for SQLite_ (DB4S) is a high quality, visual, open source tool to create, design, and edit database files compatible with [SQLite](../../dev/programming/SQLite.md). +_DB Browser for SQLite_ (DB4S) is a high quality, visual, open source tool to create, design, and edit database files compatible with [SQLite](../../dev/programming/SQLite.md). DB4S is for users and developers who want to create, search, and edit databases. DB4S uses a familiar spreadsheet-like interface, and complicated [SQL](../../dev/programming/languages/SQL.md) commands do not have to be learned. diff --git a/technology/applications/development/HTTPie.md b/technology/applications/development/HTTPie.md index 870f735..0d6123d 100644 --- a/technology/applications/development/HTTPie.md +++ b/technology/applications/development/HTTPie.md @@ -19,9 +19,9 @@ http [flags] [METHOD] URL [ITEM [ITEM]] ``` ### Querystring parameters -If you find yourself manually constructing URLs with querystring parameters on the terminal, you may appreciate the `param==value` syntax for appending [URL](../../internet/URL.md) parameters. +If you find yourself manually constructing URLs with querystring parameters on the terminal, you may appreciate the `param==value` syntax for appending [URL](../../internet/URL.md) parameters. -With that, you don’t have to worry about escaping the `&` separators for your [shell](../cli/Shell.md). Additionally, any special characters in the parameter name or value get automatically [URL](../../internet/URL.md)-escaped (as opposed to the parameters specified in the full [URL](../../internet/URL.md), which HTTPie doesn’t modify). +With that, you don’t have to worry about escaping the `&` separators for your [shell](../cli/Shell.md). Additionally, any special characters in the parameter name or value get automatically [URL](../../internet/URL.md)-escaped (as opposed to the parameters specified in the full [URL](../../internet/URL.md), which HTTPie doesn’t modify). ```shell $ http https://api.github.com/search/repositories q==httpie per_page==1 ``` @@ -33,16 +33,16 @@ GET /search/repositories?q=httpie&per_page=1 HTTP/1.1 ### Request Items | Item Type | Description | | ------------------------------------------------------------:| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| HTTP Headers `Name:Value` | Arbitrary [HTTP](../../internet/HTTP.md) header, e.g. `X-API-Token:123` | -| [URL](../../internet/URL.md) parameters `name==value` | Appends the given name/value pair as a querystring parameter to the [URL](../../internet/URL.md). The `==` separator is used. | -| Data Fields `field=value` | Request data fields to be serialized as a [JSON](../../files/JSON.md) object (default), to be form-encoded (with `--form, -f`), or to be serialized as `multipart/form-data` (with `--multipart`) | -| Raw JSON fields `field:=json` | Useful when sending [JSON](../../files/JSON.md) and one or more fields need to be a `Boolean`, `Number`, nested `Object`, or an `Array`, e.g., `meals:='["ham","spam"]'` or `pies:=[1,2,3]` (note the quotes) | -| File upload fields `field@/dir/file`, `field@file;type=mime` | Only available with `--form`, `-f` and `--multipart`. For example `screenshot@~/Pictures/img.png`, or `'cv@cv.txt;type=text/markdown'`. With `--form`, the presence of a file field results in a `--multipart` request | +| HTTP Headers `Name:Value` | Arbitrary [HTTP](../../internet/HTTP.md) header, e.g. `X-API-Token:123` | +| [URL](../../internet/URL.md) parameters `name==value` | Appends the given name/value pair as a querystring parameter to the [URL](../../internet/URL.md). The `==` separator is used. | +| Data Fields `field=value` | Request data fields to be serialized as a [JSON](../../files/JSON.md) object (default), to be form-encoded (with `--form, -f`), or to be serialized as `multipart/form-data` (with `--multipart`) | +| Raw JSON fields `field:=json` | Useful when sending [JSON](../../files/JSON.md) and one or more fields need to be a `Boolean`, `Number`, nested `Object`, or an `Array`, e.g., `meals:='["ham","spam"]'` or `pies:=[1,2,3]` (note the quotes) | +| File upload fields `field@/dir/file`, `field@file;type=mime` | Only available with `--form`, `-f` and `--multipart`. For example `screenshot@~/Pictures/img.png`, or `'cv@cv.txt;type=text/markdown'`. With `--form`, the presence of a file field results in a `--multipart` request | ### JSON Requests Data is send as [JSON](../../files/JSON.md) by default. -Non-string [JSON](../../files/JSON.md) fields use the `:=` separator, which allows you to embed arbitrary [JSON](../../files/JSON.md) data into the resulting [JSON](../../files/JSON.md) object. Additionally, text and raw [JSON](../../files/JSON.md) files can also be embedded into fields using `=@` and `:=@`: +Non-string [JSON](../../files/JSON.md) fields use the `:=` separator, which allows you to embed arbitrary [JSON](../../files/JSON.md) data into the resulting [JSON](../../files/JSON.md) object. Additionally, text and raw [JSON](../../files/JSON.md) files can also be embedded into fields using `=@` and `:=@`: ```shell $ http PUT pie.dev/put \ name=John \ # String (default) @@ -79,7 +79,7 @@ Host: pie.dev ``` ### Forms -Submitting forms is very similar to sending [JSON](../../files/JSON.md) requests. Often the only difference is in adding the `--form, -f` option, which ensures that data fields are serialized as, and `Content-Type` is set to `application/x-www-form-urlencoded; charset=utf-8`. +Submitting forms is very similar to sending [JSON](../../files/JSON.md) requests. Often the only difference is in adding the `--form, -f` option, which ensures that data fields are serialized as, and `Content-Type` is set to `application/x-www-form-urlencoded; charset=utf-8`. #### Regular forms ```shell @@ -94,7 +94,7 @@ name=John+Smith ``` #### File upload forms -If one or more file fields is present, the serialization and content type is `multipart/form-data`: +If one or more file fields is present, the serialization and content type is `multipart/form-data`: ```shell $ http -f POST pie.dev/post name='John Smith' cv@~/files/data.xml ``` @@ -107,7 +107,7 @@ The request above is the same as if the following [HTML](../../internet/HTML.md) ``` -Please note that `@` is used to simulate a file upload form field, whereas `=@` just embeds the file content as a regular text field value. +Please note that `@` is used to simulate a file upload form field, whereas `=@` just embeds the file content as a regular text field value. When uploading files, their content type is inferred from the file name. You can manually override the inferred content type: ```shell @@ -115,7 +115,7 @@ $ http -f POST pie.dev/post name='John Smith' cv@'~/files/data.bin;type=applicat ``` ### HTTP headers -To set custom headers you can use the `Header:Value` notation: +To set custom headers you can use the `Header:Value` notation: ```shell $ http pie.dev/headers User-Agent:Bacon/1.0 'Cookie:valued-visitor=yes;foo=bar' \ X-Foo:Bar Referer:https://httpie.org/ @@ -146,24 +146,24 @@ Host: All of these can be overwritten or unset. #### Reading headers from a file -You can read headers from a file by using the `:@` operator. This would also effectively strip the newlines from the end. +You can read headers from a file by using the `:@` operator. This would also effectively strip the newlines from the end. ```shell $ http pie.dev/headers X-Data:@files/text.txt ``` #### Empty headers and header un-setting -To unset a previously specified header (such a one of the default headers), use `Header:`: +To unset a previously specified header (such a one of the default headers), use `Header:`: ```shell $ http pie.dev/headers Accept: User-Agent: ``` -To send a header with an empty value, use `Header;`, with a semicolon: +To send a header with an empty value, use `Header;`, with a semicolon: ```shell $ http pie.dev/headers 'Header;' ``` -Please note that some internal headers, such as `Content-Length`, can’t be unset if they are automatically added by the client itself. +Please note that some internal headers, such as `Content-Length`, can’t be unset if they are automatically added by the client itself. #### Multiple header values with the same name If the request is sent with multiple headers that are sharing the same name, then the HTTPie will send them individually. @@ -190,7 +190,7 @@ Numbers: one,two Also be aware that if the current session contains any headers they will get overwritten by individual commands when sending a request instead of being joined together. ### Offline mode -Use `--offline` to construct [HTTP](../../internet/HTTP.md) requests without sending them anywhere. With `--offline`, HTTPie builds a request based on the specified options and arguments, prints it to `stdout`, and then exits. It works completely offline; no network connection is ever made. This has a number of use cases, including: +Use `--offline` to construct [HTTP](../../internet/HTTP.md) requests without sending them anywhere. With `--offline`, HTTPie builds a request based on the specified options and arguments, prints it to `stdout`, and then exits. It works completely offline; no network connection is ever made. This has a number of use cases, including: Generating API documentation examples that you can copy & paste without sending a request: ```shell @@ -210,10 +210,10 @@ $ http --offline POST pie.dev/post hello=world > request.http $ nc pie.dev 80 < request.http ``` -You can also use the `--offline` mode for debugging and exploring [HTTP](../../internet/HTTP.md) and HTTPie, and for “dry runs”. +You can also use the `--offline` mode for debugging and exploring [HTTP](../../internet/HTTP.md) and HTTPie, and for “dry runs”. ### Cookies -[HTTP](../../internet/HTTP.md) clients send [cookies](../../internet/Cookie.md) to the server as regular [HTTP](../../internet/HTTP.md) headers. That means, HTTPie does not offer any special syntax for specifying cookies — the usual `Header:Value` notation is used: +[HTTP](../../internet/HTTP.md) clients send [cookies](../../internet/Cookie.md) to the server as regular [HTTP](../../internet/HTTP.md) headers. That means, HTTPie does not offer any special syntax for specifying cookies — the usual `Header:Value` notation is used: Send a single [cookie](../../internet/Cookie.md): ```shell @@ -230,7 +230,7 @@ Host: pie.dev User-Agent: HTTPie/0.9.9 ``` -Send multiple cookies (note: the header is quoted to prevent the [shell](../cli/Shell.md) from interpreting the `;`): +Send multiple cookies (note: the header is quoted to prevent the [shell](../cli/Shell.md) from interpreting the `;`): ```shell $ http pie.dev/cookies 'Cookie:sessionid=foo;another-cookie=bar' @@ -263,7 +263,7 @@ https -A bearer -a token pie.dev/bearer ``` #### Password prompt -If you omit the password part of `--auth, -a`, HTTPie securely prompts you for it: +If you omit the password part of `--auth, -a`, HTTPie securely prompts you for it: ```shell $ http -a username pie.dev/basic-auth/username/password @@ -275,30 +275,30 @@ By default, [HTTP](../../internet/HTTP.md) redirects are not followed and only t $ http pie.dev/redirect/3 ``` -#### Follow `Location` -To instruct HTTPie to follow the `Location` header of `30x` responses and show the final response instead, use the `--follow, -F` option: +#### Follow `Location` +To instruct HTTPie to follow the `Location` header of `30x` responses and show the final response instead, use the `--follow, -F` option: ```shell $ http --follow pie.dev/redirect/3 ``` -With `307 Temporary Redirect` and `308 Permanent Redirect`, the method and the body of the original request are reused to perform the redirected request. Otherwise, a body-less `GET` request is performed. +With `307 Temporary Redirect` and `308 Permanent Redirect`, the method and the body of the original request are reused to perform the redirected request. Otherwise, a body-less `GET` request is performed. #### Showing intermediary redirect responses -If you wish to see the intermediary requests/responses, then use the `--all` option: +If you wish to see the intermediary requests/responses, then use the `--all` option: ```shell $ http --follow --all pie.dev/redirect/3 ``` #### Limiting maximum redirects followed -To change the default limit of maximum `30` redirects, use the `--max-redirects=` option: +To change the default limit of maximum `30` redirects, use the `--max-redirects=` option: ```shell $ http --follow --all --max-redirects=2 pie.dev/redirect/3 ``` ### Proxies -You can specify proxies to be used through the `--proxy` argument for each protocol (which is included in the value in case of redirects across protocols): +You can specify proxies to be used through the `--proxy` argument for each protocol (which is included in the value in case of redirects across protocols): ```shell $ http --proxy=http:http://10.10.1.10:3128 --proxy=https:https://10.10.1.10:1080 example.org ``` @@ -309,9 +309,9 @@ $ http --proxy=http:http://user:pass@10.10.1.10:3128 example.org ``` #### Environment variables -You can also configure proxies by [environment variables](../../linux/Environment%20Variables.md) `ALL_PROXY`, `HTTP_PROXY` and `HTTPS_PROXY`, and the underlying [Requests library](https://requests.readthedocs.io/en/latest/) will pick them up. If you want to disable proxies configured through the [environment variables](../../linux/Environment%20Variables.md) for certain hosts, you can specify them in `NO_PROXY`. +You can also configure proxies by [environment variables](../../linux/Environment%20Variables.md) `ALL_PROXY`, `HTTP_PROXY` and `HTTPS_PROXY`, and the underlying [Requests library](https://requests.readthedocs.io/en/latest/) will pick them up. If you want to disable proxies configured through the [environment variables](../../linux/Environment%20Variables.md) for certain hosts, you can specify them in `NO_PROXY`. -In your `~/.bash_profile`: +In your `~/.bash_profile`: ```shell export HTTP_PROXY=http://10.10.1.10:3128 export HTTPS_PROXY=https://10.10.1.10:1080 @@ -319,13 +319,13 @@ export NO_PROXY=localhost,example.com ``` #### SOCK -Usage for SOCKS is the same as for other types of proxies: +Usage for SOCKS is the same as for other types of proxies: ```shell $ http --proxy=http:socks5://user:pass@host:port --proxy=https:socks5://user:pass@host:port example.org ``` ### HTTPS -To skip the host’s SSL certificate verification, you can pass `--verify=no` (default is `yes`): +To skip the host’s SSL certificate verification, you can pass `--verify=no` (default is `yes`): ```shell $ http --verify=no https://pie.dev/get @@ -338,16 +338,16 @@ By default, HTTPie only outputs the final response and the whole response messag | --------------------------:| -------------------------------------------------------------------------------------------------- | | `--headers, -h` | Only the response headers are printed | | `--body, -b` | Only the response body is printed | -| `--meta, -m` | Only the response metadata is printed | -| `--verbose, -v` | Print the whole [HTTP](../../internet/HTTP.md) exchange (request and response). This option also enables `--all` (see below) | -| `--verbose --verbose, -vv` | Just like `-v`, but also include the response metadata. | +| `--meta, -m` | Only the response metadata is printed | +| `--verbose, -v` | Print the whole [HTTP](../../internet/HTTP.md) exchange (request and response). This option also enables `--all` (see below) | +| `--verbose --verbose, -vv` | Just like `-v`, but also include the response metadata. | | `--print, -p` | Selects parts of the [HTTP](../../internet/HTTP.md) exchange | -| `--quiet, -q` | Don’t print anything to `stdout` and `stderr` | +| `--quiet, -q` | Don’t print anything to `stdout` and `stderr` | ### Download mode -HTTPie features a download mode in which it acts similarly to [wget](../cli/network/wget.md). +HTTPie features a download mode in which it acts similarly to [wget](../cli/network/wget.md). -When enabled using the `--download, -d` flag, response headers are printed to the terminal (`stderr`), and a progress bar is shown while the response body is being saved to a file. +When enabled using the `--download, -d` flag, response headers are printed to the terminal (`stderr`), and a progress bar is shown while the response body is being saved to a file. ```shell $ http --download https://github.com/httpie/cli/archive/master.tar.gz ``` @@ -365,11 +365,11 @@ Done. 251.30 kB in 2.73862s (91.76 kB/s) #### Downloaded filename There are three mutually exclusive ways through which HTTPie determines the output filename (with decreasing priority): -1. You can explicitly provide it via `--output, -o`. The file gets overwritten if it already exists (or appended to with `--continue, -c`). -2. The server may specify the filename in the optional `Content-Disposition` response header. Any leading dots are stripped from a server-provided filename. -3. The last resort HTTPie uses is to generate the filename from a combination of the request [URL](../../internet/URL.md) and the response `Content-Type`. The initial [URL](../../internet/URL.md) is always used as the basis for the generated filename — even if there has been one or more redirects. +1. You can explicitly provide it via `--output, -o`. The file gets overwritten if it already exists (or appended to with `--continue, -c`). +2. The server may specify the filename in the optional `Content-Disposition` response header. Any leading dots are stripped from a server-provided filename. +3. The last resort HTTPie uses is to generate the filename from a combination of the request [URL](../../internet/URL.md) and the response `Content-Type`. The initial [URL](../../internet/URL.md) is always used as the basis for the generated filename — even if there has been one or more redirects. -To prevent data loss by overwriting, HTTPie adds a unique numerical suffix to the filename when necessary (unless specified with `--output, -o`). +To prevent data loss by overwriting, HTTPie adds a unique numerical suffix to the filename when necessary (unless specified with `--output, -o`). #### Piping while downloading You can also redirect the response body to another program while the response headers and progress are still shown in the terminal: @@ -379,17 +379,17 @@ $ http -d https://github.com/httpie/cli/archive/master.tar.gz | tar zxf - ``` #### Resuming downloads -If `--output, -o` is specified, you can resume a partial download using the `--continue, -c` option. This only works with servers that support `Range` requests and `206 Partial Content` responses. If the server doesn’t support that, the whole file will simply be downloaded: +If `--output, -o` is specified, you can resume a partial download using the `--continue, -c` option. This only works with servers that support `Range` requests and `206 Partial Content` responses. If the server doesn’t support that, the whole file will simply be downloaded: ```shell $ http -dco file.zip example.org/file ``` -`-dco` is shorthand for `--download` `--continue` `--output`. +`-dco` is shorthand for `--download` `--continue` `--output`. ### Sessions By default, every request HTTPie makes is completely independent of any previous ones to the same host. -However, HTTPie also supports persistent sessions via the `--session=SESSION_NAME_OR_PATH` option. In a session, custom [HTTP](../../internet/HTTP.md) headers (except for the ones starting with `Content-` or `If-`), authentication, and cookies (manually specified or sent by the server) persist between requests to the same host. +However, HTTPie also supports persistent sessions via the `--session=SESSION_NAME_OR_PATH` option. In a session, custom [HTTP](../../internet/HTTP.md) headers (except for the ones starting with `Content-` or `If-`), authentication, and cookies (manually specified or sent by the server) persist between requests to the same host. ```shell # Create a new session: @@ -405,7 +405,7 @@ $ http --session=./session.json pie.dev/headers All session data, including credentials, prompted passwords, [cookie](../../internet/Cookie.md) data, and custom headers are stored in plain text. That means session files can also be created and edited manually in a text editor—they are regular [JSON](../../files/JSON.md). It also means that they can be read by anyone who has access to the session file. #### Readonly session -To use the original session file without updating it from the request/response exchange after it has been created, specify the session name via `--session-read-only=SESSION_NAME_OR_PATH` instead. +To use the original session file without updating it from the request/response exchange after it has been created, specify the session name via `--session-read-only=SESSION_NAME_OR_PATH` instead. ```shell # If the session file doesn’t exist, then it is created: $ http --session-read-only=./ro-session.json pie.dev/headers Custom-Header:orig-value diff --git a/technology/applications/development/cargo.md b/technology/applications/development/cargo.md index 9a97c4f..4e5cf81 100644 --- a/technology/applications/development/cargo.md +++ b/technology/applications/development/cargo.md @@ -227,57 +227,57 @@ Usage: `cargo update [--dry-run]` The `Cargo.toml` file for each package is called its manifest. It is written in the [TOML](../../files/TOML.md) format. It contains metadata that is needed to compile the package. Every manifest file consists of the following sections: -- [`cargo-features`](https://doc.rust-lang.org/cargo/reference/unstable.html) — Unstable, nightly-only features. -- [`[package]`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-package-section) — Defines a package. - - [`name`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-name-field) — The name of the package. - - [`version`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-version-field) — The version of the package. - - [`authors`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-authors-field) — The authors of the package. - - [`edition`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-edition-field) — The [Rust](../../dev/programming/languages/Rust.md) edition. - - [`rust-version`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-rust-version-field) — The minimal supported [Rust](../../dev/programming/languages/Rust.md) version. - - [`description`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-description-field) — A description of the package. - - [`documentation`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-documentation-field) — [URL](../../internet/URL.md) of the package documentation. - - [`readme`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-readme-field) — Path to the package’s README file. - - [`homepage`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-homepage-field) — [URL](../../internet/URL.md) of the package homepage. - - [`repository`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-repository-field) — [URL](../../internet/URL.md) of the package source repository. - - [`license`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-license-and-license-file-fields) — The package license. - - [`license-file`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-license-and-license-file-fields) — Path to the text of the license. - - [`keywords`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-keywords-field) — Keywords for the package. - - [`categories`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-categories-field) — Categories of the package. - - [`workspace`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-workspace-field) — Path to the workspace for the package. - - [`build`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-build-field) — Path to the package build script. - - [`links`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-links-field) — Name of the native library the package links with. - - [`exclude`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-exclude-and-include-fields) — Files to exclude when publishing. - - [`include`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-exclude-and-include-fields) — Files to include when publishing. - - [`publish`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-publish-field) — Can be used to prevent publishing the package. - - [`metadata`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-metadata-table) — Extra settings for external tools. - - [`default-run`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-default-run-field) — The default binary to run by [`cargo run`](https://doc.rust-lang.org/cargo/commands/cargo-run.html). - - [`autobins`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#target-auto-discovery) — Disables binary auto discovery. - - [`autoexamples`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#target-auto-discovery) — Disables example auto discovery. - - [`autotests`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#target-auto-discovery) — Disables test auto discovery. - - [`autobenches`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#target-auto-discovery) — Disables bench auto discovery. - - [`resolver`](https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions) — Sets the dependency resolver to use. -- Target tables: (see [configuration](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#configuring-a-target) for settings) - - [`[lib]`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#library) — Library target settings. - - [`[[bin]]`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#binaries) — Binary target settings. - - [`[[example]]`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#examples) — Example target settings. - - [`[[test]]`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#tests) — Test target settings. - - [`[[bench]]`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#benchmarks) — Benchmark target settings. +- [`cargo-features`](https://doc.rust-lang.org/cargo/reference/unstable.html) — Unstable, nightly-only features. +- [`[package]`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-package-section) — Defines a package. + - [`name`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-name-field) — The name of the package. + - [`version`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-version-field) — The version of the package. + - [`authors`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-authors-field) — The authors of the package. + - [`edition`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-edition-field) — The [Rust](../../dev/programming/languages/Rust.md) edition. + - [`rust-version`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-rust-version-field) — The minimal supported [Rust](../../dev/programming/languages/Rust.md) version. + - [`description`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-description-field) — A description of the package. + - [`documentation`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-documentation-field) — [URL](../../internet/URL.md) of the package documentation. + - [`readme`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-readme-field) — Path to the package’s README file. + - [`homepage`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-homepage-field) — [URL](../../internet/URL.md) of the package homepage. + - [`repository`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-repository-field) — [URL](../../internet/URL.md) of the package source repository. + - [`license`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-license-and-license-file-fields) — The package license. + - [`license-file`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-license-and-license-file-fields) — Path to the text of the license. + - [`keywords`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-keywords-field) — Keywords for the package. + - [`categories`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-categories-field) — Categories of the package. + - [`workspace`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-workspace-field) — Path to the workspace for the package. + - [`build`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-build-field) — Path to the package build script. + - [`links`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-links-field) — Name of the native library the package links with. + - [`exclude`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-exclude-and-include-fields) — Files to exclude when publishing. + - [`include`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-exclude-and-include-fields) — Files to include when publishing. + - [`publish`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-publish-field) — Can be used to prevent publishing the package. + - [`metadata`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-metadata-table) — Extra settings for external tools. + - [`default-run`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-default-run-field) — The default binary to run by [`cargo run`](https://doc.rust-lang.org/cargo/commands/cargo-run.html). + - [`autobins`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#target-auto-discovery) — Disables binary auto discovery. + - [`autoexamples`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#target-auto-discovery) — Disables example auto discovery. + - [`autotests`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#target-auto-discovery) — Disables test auto discovery. + - [`autobenches`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#target-auto-discovery) — Disables bench auto discovery. + - [`resolver`](https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions) — Sets the dependency resolver to use. +- Target tables: (see [configuration](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#configuring-a-target) for settings) + - [`[lib]`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#library) — Library target settings. + - [`[[bin]]`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#binaries) — Binary target settings. + - [`[[example]]`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#examples) — Example target settings. + - [`[[test]]`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#tests) — Test target settings. + - [`[[bench]]`](https://doc.rust-lang.org/cargo/reference/cargo-targets.html#benchmarks) — Benchmark target settings. - Dependency tables: - - [`[dependencies]`](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html) — Package library dependencies. - - [`[dev-dependencies]`](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#development-dependencies) — Dependencies for examples, tests, and benchmarks. - - [`[build-dependencies]`](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#build-dependencies) — Dependencies for build scripts. - - [`[target]`](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#platform-specific-dependencies) — Platform-specific dependencies. -- [`[badges]`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-badges-section) — Badges to display on a registry. -- [`[features]`](https://doc.rust-lang.org/cargo/reference/features.html) — Conditional compilation features. -- [`[lints]`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-lints-section) — Configure linters for this package. -- [`[patch]`](https://doc.rust-lang.org/cargo/reference/overriding-dependencies.html#the-patch-section) — Override dependencies. -- [`[profile]`](https://doc.rust-lang.org/cargo/reference/profiles.html) — Compiler settings and optimizations. -- [`[workspace]`](https://doc.rust-lang.org/cargo/reference/workspaces.html) — The workspace definition. + - [`[dependencies]`](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html) — Package library dependencies. + - [`[dev-dependencies]`](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#development-dependencies) — Dependencies for examples, tests, and benchmarks. + - [`[build-dependencies]`](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#build-dependencies) — Dependencies for build scripts. + - [`[target]`](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#platform-specific-dependencies) — Platform-specific dependencies. +- [`[badges]`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-badges-section) — Badges to display on a registry. +- [`[features]`](https://doc.rust-lang.org/cargo/reference/features.html) — Conditional compilation features. +- [`[lints]`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-lints-section) — Configure linters for this package. +- [`[patch]`](https://doc.rust-lang.org/cargo/reference/overriding-dependencies.html#the-patch-section) — Override dependencies. +- [`[profile]`](https://doc.rust-lang.org/cargo/reference/profiles.html) — Compiler settings and optimizations. +- [`[workspace]`](https://doc.rust-lang.org/cargo/reference/workspaces.html) — The workspace definition. ## Build Scripts Some packages need to compile third-party non-[Rust](../../dev/programming/languages/Rust.md) code, for example C libraries. Other packages need to link to C libraries which can either be located on the system or possibly need to be built from source. Others still need facilities for functionality such as code generation before building (think parser generators). -Cargo does not aim to replace other tools that are well-optimized for these tasks, but it does integrate with them with custom build scripts. Placing a file named `build.rs` in the root of a package will cause Cargo to compile that script and execute it just before building the package. +Cargo does not aim to replace other tools that are well-optimized for these tasks, but it does integrate with them with custom build scripts. Placing a file named `build.rs` in the root of a package will cause Cargo to compile that script and execute it just before building the package. ```rust // Example custom build script. @@ -292,35 +292,35 @@ fn main() { ``` ## Environment Variables -When the build script is run, there are a number of inputs to the build script, all passed in the form of [environment variables](../../linux/Environment%20Variables.md). +When the build script is run, there are a number of inputs to the build script, all passed in the form of [environment variables](../../linux/Environment%20Variables.md). -Cargo exposes these [environment variables](../../linux/Environment%20Variables.md) to your crate when it is compiled. Note that this applies for running binaries with `cargo run` and `cargo test` as well. To get the value of any of these variables in a [Rust](../../dev/programming/languages/Rust.md) program, do this: +Cargo exposes these [environment variables](../../linux/Environment%20Variables.md) to your crate when it is compiled. Note that this applies for running binaries with `cargo run` and `cargo test` as well. To get the value of any of these variables in a [Rust](../../dev/programming/languages/Rust.md) program, do this: ```rust let version = env!("CARGO_PKG_VERSION"); ``` Exposed environment variables: -- `CARGO` — Path to the `cargo` binary performing the build. -- `CARGO_MANIFEST_DIR` — The directory containing the manifest of your package. -- `CARGO_PKG_VERSION` — The full version of your package. -- `CARGO_PKG_VERSION_MAJOR` — The major version of your package. -- `CARGO_PKG_VERSION_MINOR` — The minor version of your package. -- `CARGO_PKG_VERSION_PATCH` — The patch version of your package. -- `CARGO_PKG_VERSION_PRE` — The pre-release version of your package. -- `CARGO_PKG_AUTHORS` — Colon separated list of authors from the manifest of your package. -- `CARGO_PKG_NAME` — The name of your package. -- `CARGO_PKG_DESCRIPTION` — The description from the manifest of your package. -- `CARGO_PKG_HOMEPAGE` — The home page from the manifest of your package. -- `CARGO_PKG_REPOSITORY` — The repository from the manifest of your package. -- `CARGO_PKG_LICENSE` — The license from the manifest of your package. -- `CARGO_PKG_LICENSE_FILE` — The license file from the manifest of your package. -- `CARGO_PKG_RUST_VERSION` — The [Rust](../../dev/programming/languages/Rust.md) version from the manifest of your package. Note that this is the minimum [Rust](../../dev/programming/languages/Rust.md) version supported by the package, not the current [Rust](../../dev/programming/languages/Rust.md) version. -- `CARGO_PKG_README` — Path to the README file of your package. -- `CARGO_CRATE_NAME` — The name of the crate that is currently being compiled. It is the name of the Cargo target with `-` converted to `_`, such as the name of the library, binary, example, integration test, or benchmark. -- `CARGO_BIN_NAME` — The name of the binary that is currently being compiled. Only set for binaries or binary examples. This name does not include any file extension, such as `.exe`. -- `OUT_DIR` — If the package has a build script, this is set to the folder where the build script should place its output. -- `CARGO_BIN_EXE_` — The absolute path to a binary target’s executable. This is only set when building an integration test or benchmark. This may be used with the `env` macro to find the executable to run for testing purposes. The `` is the name of the binary target, exactly as-is. For example, `CARGO_BIN_EXE_my-program` for a binary named `my-program`. Binaries are automatically built when the test is built, unless the binary has required features that are not enabled. -- `CARGO_PRIMARY_PACKAGE` — This environment variable will be set if the package being built is primary. Primary packages are the ones the user selected on the command-line, either with `-p` flags or the defaults based on the current directory and the default workspace members. This environment variable will not be set when building dependencies. This is only set when compiling the package (not when running binaries or tests). -- `CARGO_TARGET_TMPDIR` — Only set when building integration test or benchmark code. This is a path to a directory inside the target directory where integration tests or benchmarks are free to put any data needed by the tests/benches. Cargo initially creates this directory but doesn’t manage its content in any way, this is the responsibility of the test code. +- `CARGO` — Path to the `cargo` binary performing the build. +- `CARGO_MANIFEST_DIR` — The directory containing the manifest of your package. +- `CARGO_PKG_VERSION` — The full version of your package. +- `CARGO_PKG_VERSION_MAJOR` — The major version of your package. +- `CARGO_PKG_VERSION_MINOR` — The minor version of your package. +- `CARGO_PKG_VERSION_PATCH` — The patch version of your package. +- `CARGO_PKG_VERSION_PRE` — The pre-release version of your package. +- `CARGO_PKG_AUTHORS` — Colon separated list of authors from the manifest of your package. +- `CARGO_PKG_NAME` — The name of your package. +- `CARGO_PKG_DESCRIPTION` — The description from the manifest of your package. +- `CARGO_PKG_HOMEPAGE` — The home page from the manifest of your package. +- `CARGO_PKG_REPOSITORY` — The repository from the manifest of your package. +- `CARGO_PKG_LICENSE` — The license from the manifest of your package. +- `CARGO_PKG_LICENSE_FILE` — The license file from the manifest of your package. +- `CARGO_PKG_RUST_VERSION` — The [Rust](../../dev/programming/languages/Rust.md) version from the manifest of your package. Note that this is the minimum [Rust](../../dev/programming/languages/Rust.md) version supported by the package, not the current [Rust](../../dev/programming/languages/Rust.md) version. +- `CARGO_PKG_README` — Path to the README file of your package. +- `CARGO_CRATE_NAME` — The name of the crate that is currently being compiled. It is the name of the Cargo target with `-` converted to `_`, such as the name of the library, binary, example, integration test, or benchmark. +- `CARGO_BIN_NAME` — The name of the binary that is currently being compiled. Only set for binaries or binary examples. This name does not include any file extension, such as `.exe`. +- `OUT_DIR` — If the package has a build script, this is set to the folder where the build script should place its output. +- `CARGO_BIN_EXE_` — The absolute path to a binary target’s executable. This is only set when building an integration test or benchmark. This may be used with the `env` macro to find the executable to run for testing purposes. The `` is the name of the binary target, exactly as-is. For example, `CARGO_BIN_EXE_my-program` for a binary named `my-program`. Binaries are automatically built when the test is built, unless the binary has required features that are not enabled. +- `CARGO_PRIMARY_PACKAGE` — This environment variable will be set if the package being built is primary. Primary packages are the ones the user selected on the command-line, either with `-p` flags or the defaults based on the current directory and the default workspace members. This environment variable will not be set when building dependencies. This is only set when compiling the package (not when running binaries or tests). +- `CARGO_TARGET_TMPDIR` — Only set when building integration test or benchmark code. This is a path to a directory inside the target directory where integration tests or benchmarks are free to put any data needed by the tests/benches. Cargo initially creates this directory but doesn’t manage its content in any way, this is the responsibility of the test code. diff --git a/technology/applications/media/ImageMagick.md b/technology/applications/media/ImageMagick.md index da5eead..ac0705c 100644 --- a/technology/applications/media/ImageMagick.md +++ b/technology/applications/media/ImageMagick.md @@ -28,7 +28,7 @@ The threshold value can be given as a percentage or as an absolute integer value #### `-blend geometry` Blend an image into another by the given absolute value or percent. -Blend will average the images together ('plus') according to the percentages given and each pixels transparency. If only a single percentage value is given it sets the weight of the composite or 'source' image, while the background image is weighted by the exact opposite amount. That is a `-blend 30%` merges 30% of the 'source' image with 70% of the 'destination' image. Thus it is equivalent to `-blend 30x70%`. +Blend will average the images together ('plus') according to the percentages given and each pixels transparency. If only a single percentage value is given it sets the weight of the composite or 'source' image, while the background image is weighted by the exact opposite amount. That is a `-blend 30%` merges 30% of the 'source' image with 70% of the 'destination' image. Thus it is equivalent to `-blend 30x70%`. #### `-blur radius` Convolve the image with a Gaussian or normal distribution using the given Sigma value. diff --git a/technology/applications/media/MPV.md b/technology/applications/media/MPV.md index 64dbeaf..bee0741 100644 --- a/technology/applications/media/MPV.md +++ b/technology/applications/media/MPV.md @@ -479,10 +479,10 @@ Each line maps a key to an input command. Keys are specified with their literal Syntax: `[Shift+][Ctrl+][Alt+][Meta+] [{
}] ( ; )*` ### List of Input Commands -Commands with parameters have the parameter name enclosed in `< / >`. Don't add those to the actual command. Optional arguments are enclosed in `[ / ]`. If you don't pass them, they will be set to a default value. +Commands with parameters have the parameter name enclosed in `< / >`. Don't add those to the actual command. Optional arguments are enclosed in `[ / ]`. If you don't pass them, they will be set to a default value. - `ignore` -Use this to "block" keys that should be unbound, and do nothing. Useful for disabling default bindings, without disabling all bindings with `--no-input-default-bindings`. +Use this to "block" keys that should be unbound, and do nothing. Useful for disabling default bindings, without disabling all bindings with `--no-input-default-bindings`. - `seek []` Change the playback position. By default, seeks by a relative amount of seconds. @@ -502,62 +502,62 @@ Set the given property or option to the given value. - `del ` Delete the given property. Most properties cannot be deleted. - `add []` -Add the given value to the property or option. On overflow or underflow, clamp the property to the maximum. If `` is omitted, assume 1. +Add the given value to the property or option. On overflow or underflow, clamp the property to the maximum. If `` is omitted, assume 1. - `screenshot ` Take a screenshot. -Multiple flags are available (some can be combined with +): +Multiple flags are available (some can be combined with +): | Flag | Description | | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ` (default)` | Save the video image, in its original resolution, and with subtitles. Some video outputs may still include the OSD in the output under certain circumstances. | -| `