aboutsummaryrefslogtreecommitdiffstats
path: root/oni
diff options
context:
space:
mode:
authorGravatar Tom Willemse2022-04-14 01:39:25 -0700
committerGravatar Tom Willemse2022-04-14 01:39:25 -0700
commit9363fb88cf63813f6025e830020954ca4fd09b29 (patch)
tree46549fe12304a8e0c9df71bffbff97c322c0b60f /oni
parent00f51af69d0164d0427f942a3df22c8f0f960ec1 (diff)
downloadnew-dotfiles-9363fb88cf63813f6025e830020954ca4fd09b29.tar.gz
new-dotfiles-9363fb88cf63813f6025e830020954ca4fd09b29.zip
Add herbstluftwm configuration with xsession extension
The herbstluftwm configuration isn't complete yet, it's only the package so far, but it does extend the xsession service to include a line in xsession to execute the window manager in a bit of a hacky way. This also adds a ‘mixed-executable-file’ function which is the same as the ‘mixed-text-file’ except that it also sets the executable bit for the computed file.
Diffstat (limited to 'oni')
-rw-r--r--oni/home/data/config.scm18
-rw-r--r--oni/home/services/herbstluftwm.scm41
-rw-r--r--oni/home/services/xsession.scm43
3 files changed, 91 insertions, 11 deletions
diff --git a/oni/home/data/config.scm b/oni/home/data/config.scm
index 7c2b064..6648adf 100644
--- a/oni/home/data/config.scm
+++ b/oni/home/data/config.scm
@@ -7,6 +7,7 @@
#:use-module (gnu packages)
#:use-module (gnu packages admin)
#:use-module (gnu packages shellutils)
+ #:use-module (gnu packages wm)
#:use-module (guix gexp)
#:use-module (oni home services xdisorg)
#:use-module (oni home services xmodmap)
@@ -14,7 +15,8 @@
#:use-module (oni home services xsession)
#:use-module (oni home services compton)
#:use-module (oni home services xbindkeys)
- #:use-module (oni home services zsh))
+ #:use-module (oni home services zsh)
+ #:use-module (oni home services herbstluftwm))
(home-environment
(packages (list (specification->package+output "glibc-locales")))
@@ -218,10 +220,12 @@
(home-xsession-configuration
(configuration
(list
- "xrdb -cpp m4 -merge \"${HOME}/.config/X11/Xresources\" -I\"${HOME}/.config/X11/Xresources.d\""
- "xrandr --setprovideroutputsource modesetting NVIDIA-0"
- "xrandr --auto"
- "xrandr --dpi 96"))))
+ (mixed-text-file
+ "xsession"
+ "xrdb -cpp m4 -merge \"${HOME}/.config/X11/Xresources\" -I\"${HOME}/.config/X11/Xresources.d\"\n"
+ "xrandr --setprovideroutputsource modesetting NVIDIA-0\n"
+ "xrandr --auto\n"
+ "xrandr --dpi 96\n")))))
(service home-picom-service-type
(home-picom-configuration
@@ -235,4 +239,6 @@
"class_g = 'trayer'"
"bounding_shaped"))))))
- (service home-xbindkeys-service-type))))
+ (service home-xbindkeys-service-type)
+
+ (service home-herbstluftwm-service-type))))
diff --git a/oni/home/services/herbstluftwm.scm b/oni/home/services/herbstluftwm.scm
new file mode 100644
index 0000000..6b68b2c
--- /dev/null
+++ b/oni/home/services/herbstluftwm.scm
@@ -0,0 +1,41 @@
+(define-module (oni home services herbstluftwm)
+ #:use-module (gnu services configuration)
+ #:use-module (gnu packages wm)
+ #:use-module (gnu home services)
+ #:use-module (gnu home services utils)
+ #:use-module (guix packages)
+ #:use-module (guix gexp)
+ #:use-module (oni home services xsession)
+
+ #:export (home-herbstluftwm-service-type
+ home-herbstluftwm-configuration))
+
+(define-configuration/no-serialization home-herbstluftwm-configuration
+ (package
+ (package herbstluftwm)
+ "Package use for setting herbstluftwm"))
+
+(define (add-herbstluftwm-packages config)
+ (list (home-herbstluftwm-configuration-package config)))
+
+(define (add-herbstluftwm-executable config)
+ (home-xsession-extension
+ (wm
+ (list
+ (mixed-text-file
+ "xsession"
+ "exec " herbstluftwm "/bin/herbstluftwm")))))
+
+(define home-herbstluftwm-service-type
+ (service-type
+ (name 'home-herbstluftwm)
+ (extensions
+ (list (service-extension
+ home-profile-service-type
+ add-herbstluftwm-packages)
+ (service-extension
+ home-xsession-service-type
+ add-herbstluftwm-executable)))
+ (compose identity)
+ (default-value (home-herbstluftwm-configuration))
+ (description "Install and configure herbstluftwm.")))
diff --git a/oni/home/services/xsession.scm b/oni/home/services/xsession.scm
index 308106e..c6f06e7 100644
--- a/oni/home/services/xsession.scm
+++ b/oni/home/services/xsession.scm
@@ -4,20 +4,52 @@
#:use-module (gnu home services utils)
#:use-module (guix packages)
#:use-module (guix gexp)
+ #:use-module (srfi srfi-1)
#:export (home-xsession-service-type
- home-xsession-configuration))
+ home-xsession-configuration
+ home-xsession-extension))
-(define-configuration/no-serialization home-xsession-configuration
+(define-configuration home-xsession-configuration
(configuration
(text-config '())
"Configuration"))
+(define-configuration/no-serialization home-xsession-extension
+ (wm
+ (text-config '())
+ "String"))
+
+(define* (mixed-executable-file name #:key guile #:rest text)
+ "Return an object representing store file NAME containing TEXT. TEXT is a
+sequence of strings and file-like objects, as in:
+
+ (mixed-text-file \"profile\"
+ \"export PATH=\" coreutils \"/bin:\" grep \"/bin\")
+
+This is the declarative counterpart of 'text-file*'."
+ (define build
+ (let ((text (if guile (drop text 2) text)))
+ (gexp (call-with-output-file (ungexp output "out")
+ (lambda (port)
+ (set-port-encoding! port "UTF-8")
+ (display (string-append (ungexp-splicing text)) port)
+ (chmod port #o555))))))
+
+ (computed-file name build #:guile guile))
+
(define (xsession-home-files config)
- `(("xsession"
- ,(mixed-text-file
+ `((".xsession"
+ ,(mixed-executable-file
"xsession"
- (string-join (home-xsession-configuration-configuration config) "\n")))))
+ (serialize-text-config 'configuration (home-xsession-configuration-configuration config))))))
+
+(define (home-xsession-extensions original-config extension-configs)
+ (home-xsession-configuration
+ (inherit original-config)
+ (configuration
+ (append (home-xsession-configuration-configuration original-config)
+ (home-xsession-extension-wm (last extension-configs))))))
(define home-xsession-service-type
(service-type
@@ -27,5 +59,6 @@
home-files-service-type
xsession-home-files)))
(compose identity)
+ (extend home-xsession-extensions)
(default-value (home-xsession-configuration))
(description "Configure xsession.")))