aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemse2022-03-30 12:26:45 -0700
committerGravatar Tom Willemse2022-03-30 12:26:45 -0700
commitbbab14ede630506783b4785a74108a1d5352626b (patch)
treefcab519075211f66b2ee0a5b392eaa0f2ec1ff32
parent7310c3c99baf6c8b83564e77836c23141d063c66 (diff)
downloadnew-dotfiles-bbab14ede630506783b4785a74108a1d5352626b.tar.gz
new-dotfiles-bbab14ede630506783b4785a74108a1d5352626b.zip
Add rofi config for data
-rw-r--r--oni/home/data/config.scm17
-rw-r--r--oni/home/services/xdisorg.scm155
2 files changed, 171 insertions, 1 deletions
diff --git a/oni/home/data/config.scm b/oni/home/data/config.scm
index 3322dbe..6d75725 100644
--- a/oni/home/data/config.scm
+++ b/oni/home/data/config.scm
@@ -28,4 +28,19 @@
(service home-fish-service-type
(home-fish-configuration
(aliases
- '(("hc" . "herbstclient"))))))))
+ '(("hc" . "herbstclient")))))
+
+ (service home-rofi-service-type
+ (home-rofi-configuration
+ (config
+ '((kb-cancel . "Escape,Control+bracketleft,Control+g")))
+ (theme
+ '((window
+ ((background-color . "#222424")))
+ (entry
+ ((text-color . "#bfbfbf")))
+ (prompt
+ ((text-color . "#bfbfbf")))
+ (element-text
+ ((background-color . "#222424")
+ (text-color . "#bfbfbf"))))))))))
diff --git a/oni/home/services/xdisorg.scm b/oni/home/services/xdisorg.scm
new file mode 100644
index 0000000..d684bfd
--- /dev/null
+++ b/oni/home/services/xdisorg.scm
@@ -0,0 +1,155 @@
+(define-module (oni home services xdisorg)
+ #:use-module (gnu services configuration)
+ #:use-module (gnu packages xdisorg)
+ #:use-module (gnu home services)
+ #:use-module (gnu home services utils)
+ #:use-module (guix packages)
+ #:use-module (guix gexp)
+ #:use-module (guix records)
+ #:use-module (guix i18n)
+ #:use-module (guix modules)
+ #:use-module (guix diagnostics)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-26)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 regex)
+ #:use-module (ice-9 common-list)
+
+ #:export (home-rofi-service-type
+ home-rofi-configuration))
+
+;;; This module has been copied from
+;;; https://github.com/nouun/jayu/blob/92ff6629da686f0ddc96a4d6cb2a657c76795bc6/jayu/home/services/xdisorg.scm
+
+(define-configuration/no-serialization home-rofi-configuration
+ (package
+ (package rofi)
+ "Package to use for setting Rofi")
+ (config (alist '())
+ "rofi config")
+ (theme (alist '())
+ "theme config"))
+
+(define color-regexp
+ (make-regexp
+ (string-append
+ "("
+ ;; #RGB
+ "#[a-zA-Z0-9]{3}" "|"
+ ;; #RGBA
+ "#[a-zA-Z0-9]{4}" "|"
+ ;; #RRGGBB
+ "#[a-zA-Z0-9]{6}" "|"
+ ;; #RRGGBBAA
+ "#[a-zA-Z0-9]{8}" "|"
+ ;; rgb(123, 123, 123)
+ "rgba?. *[0-9]{1,3} *%? *, *[0-9]{1,3} *%? *, *[0-9]{1,3} *%? *" "|"
+ ;; rgba(123, 123, 123, 0.1)
+ "rgba?. *[0-9]{1,3} *%? *, *[0-9]{1,3} *%? *, *[0-9]{1,3} *%? *, [0-9]\\.[0-9]*" "|"
+ ;; rgba(123, 123, 123, 100%)
+ "rgba?. *[0-9]{1,3} *%? *, *[0-9]{1,3} *%? *, *[0-9]{1,3} *%? *, [0-9]{1,3} *% *"
+ ;;children
+ ")")))
+
+(define (format-rofi-value val)
+ (cond
+ ((list? val)
+ (string-join (map format-rofi-value val) " "))
+ ((boolean? val)
+ (if val "true" "false"))
+ ((number? val)
+ (string-append
+ (object->string val)
+ (if (not (eq? 0 val))
+ "px" "")))
+ ((symbol? val)
+ (object->string val))
+ ((string? val)
+ (let ((color-match (regexp-exec color-regexp val)))
+ (if (regexp-match? color-match)
+ val (string-append "\"" val "\""))))
+ (else val)))
+
+(define (format-rofi-config config)
+ (let ((key (object->string (car config)))
+ (value (cdr config)))
+ (define (format-children children)
+ (string-append
+ "[" (string-join (map object->string children) ",") "]"))
+ (string-append key ": "
+ (if (eq? 'children (car config))
+ (format-children value)
+ (format-rofi-value value))
+ ";")))
+
+(define (serialize-rofi-config config)
+ (list
+ (string-append
+ "configuration {\n "
+ (string-join (map format-rofi-config config) "\n ")
+ "\n}\n")))
+
+(define (format-rofi-theme theme)
+ (let ((keys (map object->string (butlast theme 1)))
+ (values (car (list-tail theme (- (length theme) 1)))))
+ (string-append (string-join keys ", ")
+ " {\n "
+ (string-join
+ (map format-rofi-config values)
+ "\n ")
+ "\n}\n")))
+
+(define (serialize-rofi-theme theme)
+ (string-join (map format-rofi-theme theme) "\n"))
+
+(define (home-rofi-files-service conf)
+ `(("config/rofi/config.rasi"
+ ,(apply mixed-text-file
+ "config.rasi"
+ (append
+ ;; Main config
+ (serialize-rofi-config
+ (home-rofi-configuration-config conf))
+ ;; Apply theme
+ (if (not (eq? (home-rofi-configuration-theme conf) '()))
+ (list "\n@theme \"guix\"\n") '()))))
+ ("config/rofi/guix.rasi"
+ ,(mixed-text-file
+ "guix.rasi"
+ (serialize-rofi-theme
+ (home-rofi-configuration-theme conf))))))
+
+(define (home-rofi-profile-service config)
+ (list (home-rofi-configuration-package config)))
+
+(define (home-rofi-extension old-config extension-configs)
+ (match old-config
+ (($ <home-rofi-configuration> _ package* config* theme*)
+ (home-rofi-configuration
+ (package package*)
+ (config (append config*
+ (append-map home-rofi-configuration-config
+ extension-configs)))
+ (theme (append theme*
+ (append-map home-rofi-configuration-theme
+ extension-configs)))))))
+
+(define home-rofi-service-type
+ (service-type (name 'home-rofi)
+ (extensions
+ (list (service-extension
+ home-files-service-type
+ home-rofi-files-service)
+ (service-extension
+ home-profile-service-type
+ home-rofi-profile-service)))
+ (compose concatenate)
+ (extend home-rofi-extension)
+ (default-value (home-rofi-configuration))
+ (description "Configure Rofi")))
+
+(define (generate-home-rofi-documentation)
+ (generate-documentation
+ `((home-rofi-configuration
+ ,home-rofi-configuration-fields))
+ 'home-rofi-configuration))