[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
03/07: home: services: bash: Add ‘aliases’ field.
From: |
guix-commits |
Subject: |
03/07: home: services: bash: Add ‘aliases’ field. |
Date: |
Sun, 7 Nov 2021 17:13:00 -0500 (EST) |
civodul pushed a commit to branch master
in repository guix.
commit 4b96998292442ec03024481c911d88f86c7c36b5
Author: Xinglu Chen <public@yoctocell.xyz>
AuthorDate: Sun Nov 7 12:36:19 2021 +0100
home: services: bash: Add ‘aliases’ field.
* doc/guix.texi (Shells Home Services): Document it.
* gnu/home/services/shells.scm (bash-serialize-aliases): New procedure.
(home-bash-configuration, home-bash-extension): Add ‘aliases’ field.
(home-bash-extensions): Adjust accordingly.
* guix/scripts/home/import.scm (generate-bash-configuration+modules):
Populate
the ‘alias’ field.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
---
doc/guix.texi | 14 ++++++++
gnu/home/services/shells.scm | 83 ++++++++++++++++++++++++++++++++------------
guix/scripts/home/import.scm | 24 +++++++++++++
3 files changed, 98 insertions(+), 23 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index b35fb35..6d6dfd5 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -36173,6 +36173,20 @@ Add sane defaults like reading @file{/etc/bashrc},
coloring output for
@item @code{environment-variables} (default: @code{()}) (type: alist)
Association list of environment variables to set for the Bash session.
+@item @code{aliases} (default: @code{()}) (type: alist)
+Association list of aliases to set for the Bash session. The alias will
+automatically be quoted, so something line this:
+
+@lisp
+'((\"ls\" . \"ls -alF\"))
+@end lisp
+
+turns into
+
+@example
+alias ls=\"ls -alF\"
+@end example
+
@item @code{bash-profile} (default: @code{()}) (type: text-config)
List of file-like objects, which will be added to @file{.bash_profile}.
Used for executing user's commands at start of login shell (In most
diff --git a/gnu/home/services/shells.scm b/gnu/home/services/shells.scm
index e273096..f24e47f 100644
--- a/gnu/home/services/shells.scm
+++ b/gnu/home/services/shells.scm
@@ -305,6 +305,18 @@ source ~/.profile
;;; Bash.
;;;
+(define (bash-serialize-aliases field-name val)
+ #~(string-append
+ #$@(map
+ (match-lambda
+ ((key . #f)
+ "")
+ ((key . #t)
+ #~(string-append "alias " #$key "\n"))
+ ((key . value)
+ #~(string-append "alias " #$key "=\"" #$value "\"\n")))
+ val)))
+
(define-configuration home-bash-configuration
(package
(package bash)
@@ -317,6 +329,21 @@ for @code{ls} provided by guix to @file{.bashrc}.")
(alist '())
"Association list of environment variables to set for the Bash session."
serialize-posix-env-vars)
+ (aliases
+ (alist '())
+ "Association list of aliases to set for the Bash session. The alias will
+automatically be quoted, so something line this:
+
+@lisp
+'((\"ls\" . \"ls -alF\"))
+@end lisp
+
+turns into
+
+@example
+alias ls=\"ls -alF\"
+@end example"
+ bash-serialize-aliases)
(bash-profile
(text-config '())
"List of file-like objects, which will be added to @file{.bash_profile}.
@@ -387,10 +414,10 @@ alias grep='grep --color=auto'\n")
(if (or extra-content
(not (null? ((configuration-field-getter field-obj) config))))
`(,(object->snake-case-string file-name)
- ,(mixed-text-file
+ ,(apply mixed-text-file
(object->snake-case-string file-name)
- (if extra-content extra-content "")
- (serialize-field field)))
+ (cons (serialize-field field)
+ (if extra-content extra-content '()))))
'())))
(filter
@@ -413,8 +440,8 @@ if [ -f ~/.bashrc ]; then source ~/.bashrc; fi
,@(list (file-if-not-empty
'bashrc
(if (home-bash-configuration-guix-defaults? config)
- guix-bashrc
- #f))
+ (list (serialize-field 'aliases) guix-bashrc)
+ (list (serialize-field 'alises))))
(file-if-not-empty 'bash-logout)))))
(define (add-bash-packages config)
@@ -424,6 +451,9 @@ if [ -f ~/.bashrc ]; then source ~/.bashrc; fi
(environment-variables
(alist '())
"Association list of environment variables to set.")
+ (aliases
+ (alist '())
+ "Association list of aliases to set.")
(bash-profile
(text-config '())
"List of file-like objects.")
@@ -435,24 +465,31 @@ if [ -f ~/.bashrc ]; then source ~/.bashrc; fi
"List of file-like objects."))
(define (home-bash-extensions original-config extension-configs)
- (home-bash-configuration
- (inherit original-config)
- (environment-variables
- (append (home-bash-configuration-environment-variables original-config)
- (append-map
- home-bash-extension-environment-variables extension-configs)))
- (bash-profile
- (append (home-bash-configuration-bash-profile original-config)
- (append-map
- home-bash-extension-bash-profile extension-configs)))
- (bashrc
- (append (home-bash-configuration-bashrc original-config)
- (append-map
- home-bash-extension-bashrc extension-configs)))
- (bash-logout
- (append (home-bash-configuration-bash-logout original-config)
- (append-map
- home-bash-extension-bash-logout extension-configs)))))
+ (match original-config
+ (($ <home-bash-configuration> _ _ _ environment-variables aliases
+ bash-profile bashrc bash-logout)
+ (home-bash-configuration
+ (inherit original-config)
+ (environment-variables
+ (append environment-variables
+ (append-map
+ home-bash-extension-environment-variables extension-configs)))
+ (aliases
+ (append aliases
+ (append-map
+ home-bash-extension-aliases extension-configs)))
+ (bash-profile
+ (append bash-profile
+ (append-map
+ home-bash-extension-bash-profile extension-configs)))
+ (bashrc
+ (append bashrc
+ (append-map
+ home-bash-extension-bashrc extension-configs)))
+ (bash-logout
+ (append bash-logout
+ (append-map
+ home-bash-extension-bash-logout extension-configs)))))))
(define home-bash-service-type
(service-type (name 'home-bash)
diff --git a/guix/scripts/home/import.scm b/guix/scripts/home/import.scm
index 7a7712d..fbf8906 100644
--- a/guix/scripts/home/import.scm
+++ b/guix/scripts/home/import.scm
@@ -27,6 +27,9 @@
#:use-module (gnu packages)
#:use-module (ice-9 match)
#:use-module (ice-9 pretty-print)
+ #:use-module (ice-9 rdelim)
+ #:use-module (ice-9 regex)
+ #:use-module (ice-9 popen)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:export (import-manifest
@@ -56,12 +59,33 @@ FILE-NAME with \"-\", and return the basename of it."
(define (destination-append path)
(string-append destination-directory "/" path))
+ (define (bash-alias->pair line)
+ (if (string-prefix? "alias" line)
+ (let ((matched (string-match "alias (.+)=\"?'?([^\"']+)\"?'?" line)))
+ `(,(match:substring matched 1) . ,(match:substring matched 2)))
+ '()))
+
+ (define (parse-aliases input)
+ (let loop ((line (read-line input))
+ (result '()))
+ (if (eof-object? line)
+ (reverse result)
+ (loop (read-line input)
+ (cons (bash-alias->pair line) result)))))
+
(let ((rc (destination-append ".bashrc"))
(profile (destination-append ".bash_profile"))
(logout (destination-append ".bash_logout")))
`((service home-bash-service-type
(home-bash-configuration
,@(if (file-exists? rc)
+ `((aliases
+ ',(let* ((port (open-pipe* OPEN_READ "bash" "-i" "-c"
"alias"))
+ (alist (parse-aliases port)))
+ (close-port port)
+ (filter (negate null?) alist))))
+ '())
+ ,@(if (file-exists? rc)
`((bashrc
(list (local-file ,rc
,(basename+remove-dots rc)))))
- branch master updated (dab2ac2 -> bd41e59), guix-commits, 2021/11/07
- 01/07: ui: 'load*' correctly reports 'read-error' in all cases., guix-commits, 2021/11/07
- 04/07: doc: Improve documentation of the Bash home service, guix-commits, 2021/11/07
- 07/07: gnu: ardour: Update to 6.9., guix-commits, 2021/11/07
- 05/07: import: egg: Allow imports of a specific version., guix-commits, 2021/11/07
- 03/07: home: services: bash: Add ‘aliases’ field.,
guix-commits <=
- 02/07: file-systems: Validate the 'flags' field., guix-commits, 2021/11/07
- 06/07: shell: Actually clean up the profile cache., guix-commits, 2021/11/07