;; This "home-environment" file can be passed to 'guix home reconfigure' ;; to reproduce the content of your profile. This is "symbolic": it only ;; specifies package names. To reproduce the exact same profile, you also ;; need to capture the channels being used, as returned by "guix describe". ;; See the "Replicating Guix" section in the manual. (define-module (rekahsoft guix-config home) #:use-module (gnu home) #:use-module (gnu packages) #:use-module (gnu services) #:use-module (guix profiles) #:use-module (guix transformations) #:use-module (guix gexp) #:use-module (gnu home services shells) #:use-module (gnu home services desktop) #:use-module (nongnu packages mozilla) #:use-module (rekahsoft-gnu packages haskell-apps) #:use-module (rekahsoft-gnu packages emacs-xyz) #:use-module (rekahsoft-gnu packages python-xyz) #:use-module (rekahsoft-gnu packages shellutils) #:use-module (rekahsoft-gnu packages spice) #:use-module (rekahsoft-gnu packages terraform) #:export (%home %home-manifest)) (define transform--emacs-helm-mu (options->transformation '((with-commit . "emacs-helm-mu=392a8c11ab27b625d9f863cdde14e09893401b15")))) (define transform--emacs-org-super-agenda (options->transformation '((without-tests . "emacs-org-super-agenda")))) (define-public %emacs-manifest (concatenate-manifests (list (packages->manifest (list ;; Temporary: emacs-helm-mu is broken but has been fixed upstream (transform--emacs-helm-mu (specification->package "emacs-helm-mu")) ;; Temporary: emacs-org-super-agenda tests stall and do not complete due to interactive prompt (transform--emacs-org-super-agenda (specification->package "emacs-org-super-agenda")) (transform--emacs-org-super-agenda ;; org-ql propigates org-super-agenda (specification->package "emacs-org-ql")) ;; Packages from the rekahsoft-guix channel emacs-ace-mc emacs-hamlet-mode emacs-helm-rg emacs-helm-tramp emacs-helm-unicode emacs-highlight-indent-guides emacs-highlight-parentheses emacs-ibuffer-vc emacs-intel-hex-mode emacs-ix emacs-mu4e-dashboard emacs-mu4e-maildirs-extension emacs-org-html-theme-darksun emacs-org-html-themes emacs-org-roam-extensions emacs-org-roam-ui persp-projectile ;; TODO: this packages' variable is not correctly prefixed with 'emacs-' upsteam emacs-quack emacs-rcirc-notify emacs-rebox2 emacs-vimish-fold emacs-eval-in-repl emacs-org-babel-eval-in-repl ;; Use more up-to-date treemacs and treemacs-extra (as well as required dependencies) emacs-treemacs-20201225 emacs-treemacs-extra-20201225 emacs-all-the-icons-20201225 emacs-doom-themes-20201225 ;; Use more up-to-date ace-link emacs-ace-link-2021-01-1)) (specifications->manifest '("aspell" "aspell-dict-en" "emacs" "emacs-ace-jump-mode" "emacs-ace-window" "emacs-ag" "emacs-all-the-icons-dired" "emacs-auctex" "emacs-auto-complete" "emacs-auto-yasnippet" "emacs-dashboard" "emacs-dired-hacks" "emacs-docker" "emacs-docker-tramp" "emacs-doom-modeline" "emacs-elpher" "emacs-emmet-mode" "emacs-emms" "emacs-expand-region" "emacs-exwm" "emacs-fill-column-indicator" "emacs-flycheck" "emacs-flycheck-ledger" "emacs-geiser" "emacs-gnuplot" "emacs-go-mode" "emacs-god-mode" "emacs-graphql-mode" "emacs-graphviz-dot-mode" "emacs-guix" "emacs-haskell-mode" "emacs-helm" "emacs-helm-ag" "emacs-helm-c-yasnippet" "emacs-helm-descbinds" "emacs-helm-exwm" "emacs-helm-gtags" "emacs-helm-ls-git" "emacs-helm-org" "emacs-helm-pass" "emacs-helm-projectile" "emacs-helm-swoop" "emacs-highlight-sexp" "emacs-htmlize" "emacs-hydra" "emacs-ibuffer-projectile" "emacs-isearch+" "emacs-ivy" "emacs-json-mode" "emacs-jsonnet-mode" "emacs-ledger-mode" "emacs-lua-mode" "emacs-magit" "emacs-forge" "emacs-markdown-mode" "emacs-mmm-mode" "emacs-mu4e-alert" "emacs-mu4e-conversation" "emacs-multi-term" "emacs-multiple-cursors" "emacs-no-littering" "emacs-org" "emacs-org-download" "emacs-org-mind-map" "emacs-org-noter" "emacs-org-roam" "emacs-org-web-tools" "emacs-orgit" "emacs-ob-async" "emacs-paredit" "emacs-pdf-tools" "emacs-persp-mode" "emacs-php-mode" "emacs-plantuml-mode" "emacs-pretty-mode" "emacs-projectile" "emacs-racket-mode" "emacs-rainbow-delimiters" "emacs-rainbow-identifiers" "emacs-rainbow-mode" "emacs-realgud" "emacs-rec-mode" "emacs-restclient" "emacs-ripgrep" "emacs-rust-mode" "emacs-scribble-mode" "emacs-slime" "emacs-string-inflection" "emacs-swiper" "emacs-terraform-mode" "emacs-tramp" "emacs-undo-tree" "emacs-use-package" "emacs-vterm" "emacs-yaml-mode" "emacs-yasnippet" "emacs-yasnippet-snippets" "gnuplot" "isync" "mu" "plantuml" ; "emacs-ac-geiser" ;; TODO: hash mismatch; possible non-determinism ;"emacs-helm-mu" ;; TODO: broken, but fixed upstream "emacs-all-the-icons-ibuffer" ;; TODO: this package exists in both guix and rekahsoft-guix channels, resulting in a confict warning ))))) (define-public %shell-manifest (concatenate-manifests (list (packages->manifest (list ;; TODO: this was added upstream (as "go-github-com-junegunn-fzf") but is not as complete as my existing package fzf ;; Remaining packages from the rekahsoft-guix channel spaceship-prompt)) (specifications->manifest '("bat" "exa" "ripgrep" "sh-z" "zsh-autosuggestions" "zsh-syntax-highlighting"))))) (define-public %xorg-manifest (specifications->manifest '("mesa" "setxkbmap" "xdg-utils" "xf86-input-libinput" "xf86-video-fbdev" "xinit" "xinput" "xkbcomp" "xkeyboard-config" "xlsfonts" "xorg-server" "xrandr" "autorandr" "xrdb" "xsetroot"))) (define-public %wayland-manifest (specifications->manifest '("grim" "hicolor-icon-theme" ;; Required for wofi icon theme "slurp" "sway" "wayland" "wofi"))) ;; Manifest containing x programs (that cannot natively run with wayland). (define-public %xorg-apps-manifest (concatenate-manifests (list (packages->manifest (list ;; Packages from nonguix channel firefox ;; Packages from rekahsoft-guix channel virt-viewer-11)) (specifications->manifest '("dunst" ;; <- May not need this; use something in emacs "feh" "pavucontrol" "redshift" "rofi" ;; <- Look into replacing in emacs "rofi-pass" ;; <- This should be replacable in emacs with helm-pass "i3lock" ;; required for i3lock-fancy "i3lock-fancy" "xmonad" "xmobar" "trayer-srg" ;; used in xmonad as system tray "dmenu" "unclutter" "virt-manager" "xautolock" "xclip" "zathura" "zathura-djvu" "zathura-pdf-poppler" "zathura-ps"))))) ;; Manifest containing Xorg and Wayland native compatible programs (define-public %xorg-wayland-apps-manifest (specifications->manifest '("kitty" ;; <- May not need this and instead will use emacs-vterm "alacritty" ;; <- ditto "libnotify" ;; for notify-send "network-manager-applet" "numix-gtk-theme" "adwaita-icon-theme"))) (define-public %guile-manifest (specifications->manifest '("guile" "guile-charting" ;; guile-charting is required for 'guix size --map-file' "guile-colorized" "guile-hall" "guile-readline"))) (define-public %misc-manifest (concatenate-manifests (list (packages->manifest (list ;; Packages from rekahsoft-guix awscliv2 ledger-autosync hledger-ui terraform-provider-aws terraform-wrapper-0.13)) (specifications->manifest '("ansible" "alsa-utils" ;; for alsamixer "aws-vault" "beets" "bmon" "coreutils" "curl" "direnv" "flatpak" "xdg-desktop-portal" ;; improves user experience of flatpak "font-dejavu" "font-liberation" "font-fira-code" ;; TODO: check if font is needed "font-gnu-freefont" "font-terminus" "font-google-noto" "git" "git:send-email" "git:subtree" "glibc-locales" "gnupg" "graphviz" "font-ghostscript" "gwl" "hledger" "hledger-web" "htop" "jq" "ledger" "mpd" "mpv" "ncmpcpp" ;; <- This can be replaced by emacs-emms "nextcloud-client" "nmap" "nss-certs" "nyxt" "openssh" "gnupg" "pinentry-gnome3" "pass-otp" "password-store" "recutils" "rhash" "skopeo" "texlive" "tmux" "ungoogled-chromium" "util-linux" "wget" "youtube-dl" "kicad" "kicad-templates" "kicad-symbols" "kicad-packages3d" "kicad-footprints" "kicad-doc" "gtkwave" ;; TODO: (packages I like but maybe should be project specific?) ;; "avr-toolchain" (propigated inputs: "avrdude" "avr-binutils" "avr-gcc") ;; "clojure" ;; "lua" ;; "chez" ;; "coq" ;; TODO: (these probably should go in the system configuration) ;; "bitlebee" ))))) (define %home-manifest (concatenate-manifests (list %emacs-manifest %shell-manifest %xorg-manifest %wayland-manifest %xorg-apps-manifest %xorg-wayland-apps-manifest %guile-manifest %misc-manifest))) (define %home (home-environment (packages (map manifest-entry-item (manifest-entries %home-manifest))) (services (list (service home-bash-service-type (home-bash-configuration (aliases (let ((aws-alias "aws-vault exec --no-session ${AWS_PROFILE:-default} -- aws") (aws-shell-alias "aws-vault exec --no-session ${AWS_PROFILE:-default} -- aws-shell")) `(("ls" . "ls --color=auto") ("ll" . "ls -l") ("la" . "ls -a") ("lla" . "ls -al") ("grep" . "grep --color=auto") ("fgrep" . "fgrep --color=auto") ("egrep" . "egrep --color=auto") ("f" . "find") ("b" . "bat") ("x" . "exa") ("xs" . "exa") ("xl" . "exa -l") ("xla" . "exa -la") ("xx" . "x -alT --git") ("av" . "aws-vault") ("avl" . "aws-vault login ${AWS_PROFILE:-default}") ("ave" . "aws-vault exec ${AWS_PROFILE:-default} --") ("aven" . "aws-vault exec --no-session ${AWS_PROFILE:-default} --") ("aws" . ,aws-alias) ("aws-shell" . ,aws-shell-alias) ("unaws" . "unset AWS_{PROFILE,SECRET_ACCESS_KEY,ACCESS_KEY_ID,SDK_LOAD_CONFIG}") ("alias-aws" . ,(string-append "alias aws=\"" aws-alias "\"; alias aws-shell=\"" aws-shell-alias "\"")) ("unalias-aws" . "unalias aws; unalias aws-shell") ("ff" . "firefox") ("ffp" . "firefox --private-window") ("e" . "emacsclient -t") ("kssh" . "kitty +kitten ssh") ("s" . "sudo") ("si" . "sudo -i")))) (environment-variables '(("PS1" . "[\\u@\\h \\W]\\$ "))))) (service home-redshift-service-type (home-redshift-configuration (location-provider 'geoclue2))) ;; (service home-zsh-configuration ;; (zshenv (list ...)) ;; (zprofile (list ...)) ;; (zshrc (list ...))) ))))