42links

Check-in [0d5485b24d]
Login

Check-in [0d5485b24d]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Linked SBCL in the README (http works better than https as of today), added support for the fish shell, fixed a syntax error during onboarding.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | trunk
Files: files | file ages | folders
SHA3-256: 0d5485b24de04049505f083a82569998a53b31326e704e31127c0e31a3fb9420
User & Date: Cthulhux 2025-04-17 10:47:56
Context
2025-04-17
10:47
Linked SBCL in the README (http works better than https as of today), added support for the fish shell, fixed a syntax error during onboarding. ... (Leaf check-in: 0d5485b24d user: Cthulhux tags: trunk)
2025-04-15
10:46
oops... ;-) ... (check-in: d68c2c789d user: Cthulhux tags: release-1.5.2, trunk)
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to README.md.

16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

You'll need **PostgreSQL** with an empty database set up that will hold 42links's data later. You will be asked for the connection data when starting 42links for the first time.

### Application

#### Build it yourself

You'll need **SBCL** with [Quicklisp](https://www.quicklisp.org/beta/#installation) set up.

1. Download this repository, either via [Fossil](https://fossil-scm.org) (`fossil clone https://code.rosaelefanten.org/42links`) or by downloading the tarball or the ZIP archive [from here.](https://code.rosaelefanten.org/42links/info/tip)
2. Run `build.sh` from inside your clone's directory. On non-UNIX platforms, please see the `build.sh` source code for a rough estimate on how to build 42links.
3. Run `./42links` and fill the blanks during the setup process. **It will ask you to set a few environment variables.** If you don't do that, the setup process will start again during the next application start. Please do it. Seriously.
4. 42links will run on the port you told it during the setup. Enjoy.

#### Prebuilt Windows binaries







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

You'll need **PostgreSQL** with an empty database set up that will hold 42links's data later. You will be asked for the connection data when starting 42links for the first time.

### Application

#### Build it yourself

You'll need [**SBCL**](http://www.sbcl.org) with [Quicklisp](https://www.quicklisp.org/beta/#installation) set up.

1. Download this repository, either via [Fossil](https://fossil-scm.org) (`fossil clone https://code.rosaelefanten.org/42links`) or by downloading the tarball or the ZIP archive [from here.](https://code.rosaelefanten.org/42links/info/tip)
2. Run `build.sh` from inside your clone's directory. On non-UNIX platforms, please see the `build.sh` source code for a rough estimate on how to build 42links.
3. Run `./42links` and fill the blanks during the setup process. **It will ask you to set a few environment variables.** If you don't do that, the setup process will start again during the next application start. Please do it. Seriously.
4. 42links will run on the port you told it during the setup. Enjoy.

#### Prebuilt Windows binaries

Changes to src/onboarding.lisp.

1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
;; Copyright (c) 2025 tux0r. All Rights Reserved.
;; SPDX-License-Identifier: BSD-3-Clause-No-Military-License

(in-package #:42links)

(defun get-setenv-command-for-current-shell (variable value)
  ;; rc uses VAR=(val), tcsh uses setenv etc...
  (switch ((file-namestring (uiop:getenv "SHELL")) :test 'equal)

          ("rc" (format nil "~A=(~a)" variable value))
          ("tcsh" (format nil "setenv ~A ~a" variable value))
          (t (format nil "export ~A=~a" variable value))))

(defun show-setenv-commands ()
  "Display all required environment variables for the user to set"
  (write-line "Please add the following environment variables to your shell as soon as possible:")








>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
;; Copyright (c) 2025 tux0r. All Rights Reserved.
;; SPDX-License-Identifier: BSD-3-Clause-No-Military-License

(in-package #:42links)

(defun get-setenv-command-for-current-shell (variable value)
  ;; rc uses VAR=(val), tcsh uses setenv etc...
  (switch ((file-namestring (uiop:getenv "SHELL")) :test 'equal)
          ("fish" (format nil "set -U ~A ~a" variable value))
          ("rc" (format nil "~A=(~a)" variable value))
          ("tcsh" (format nil "setenv ~A ~a" variable value))
          (t (format nil "export ~A=~a" variable value))))

(defun show-setenv-commands ()
  "Display all required environment variables for the user to set"
  (write-line "Please add the following environment variables to your shell as soon as possible:")
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
      (format t "Again: ")
      (finish-output)
      (let ((adminpassword-again (str:trim (read-silently))))
        (if (string= adminpassword adminpassword-again)
            ;; Matching passwords:
            (setf *adminpassword* adminpassword)  ;; will be salted in (init-42links-populate-tables)
            ;; Whoops:
            (format "You mistyped one of your two passwords. We will use '~a' for now (can be changed in your settings later)." *adminpassword*)))))

  ;; 3. ask for the application port to run on,
  (format t "Please specify the port on which 42links shall run (defaults to '~D'): " *appport*)
  (finish-output)
  (let ((appport (str:trim (read-line))))
    (unless (str:emptyp appport) (setf *appport* (parse-integer appport))))
  







|







95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
      (format t "Again: ")
      (finish-output)
      (let ((adminpassword-again (str:trim (read-silently))))
        (if (string= adminpassword adminpassword-again)
            ;; Matching passwords:
            (setf *adminpassword* adminpassword)  ;; will be salted in (init-42links-populate-tables)
            ;; Whoops:
            (format t "You mistyped one of your two passwords. We will use '~a' for now (can be changed in your settings later)." *adminpassword*)))))

  ;; 3. ask for the application port to run on,
  (format t "Please specify the port on which 42links shall run (defaults to '~D'): " *appport*)
  (finish-output)
  (let ((appport (str:trim (read-line))))
    (unless (str:emptyp appport) (setf *appport* (parse-integer appport))))