snamguix/snamellit/common.scm

325 lines
8.9 KiB
Scheme

(define-module (snamellit common)
#:use-module (gnu home)
#:use-module (gnu packages)
#:use-module (gnu services)
#:use-module (gnu services desktop)
#:use-module (gnu services shepherd)
#:use-module (gnu home services)
#:use-module (gnu home services desktop)
#:use-module (gnu home services fontutils)
#:use-module (gnu home services guix)
#:use-module (gnu home services mcron)
#:use-module (gnu home services shells)
#:use-module (gnu home services shepherd)
#:use-module (gnu home services sound)
#:use-module (gnu home services xdg)
#:use-module (gnu packages algebra)
#:use-module (gnu packages aspell)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
#:use-module (gnu packages cmake)
#:use-module (gnu packages curl)
#:use-module (gnu packages commencement)
#:use-module (gnu packages compression)
#:use-module (gnu packages containers)
#:use-module (gnu packages emacs)
#:use-module (gnu packages fonts)
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages gimp)
#:use-module (gnu packages glib)
#:use-module (gnu packages gnome)
#:use-module (gnu packages gnupg)
#:use-module (gnu packages gtk)
#:use-module (gnu packages guile)
#:use-module (gnu packages guile-xyz)
#:use-module (gnu packages haskell-apps)
#:use-module (gnu packages haskell-xyz)
#:use-module (gnu packages image)
#:use-module (gnu packages image-viewers)
#:use-module (gnu packages librewolf)
#:use-module (gnu packages linux)
#:use-module (gnu packages lsof)
#:use-module (gnu packages ncurses)
#:use-module (gnu packages networking)
#:use-module (gnu packages node)
#:use-module (gnu packages package-management)
#:use-module (gnu packages password-utils)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages pulseaudio)
#:use-module (gnu packages rsync)
#:use-module (gnu packages rust-apps)
#:use-module (gnu packages samba)
#:use-module (gnu packages shells)
#:use-module (gnu packages shellutils)
#:use-module (gnu packages sync)
#:use-module (gnu packages terminals)
#:use-module (gnu packages texlive)
#:use-module (gnu packages tmux)
#:use-module (gnu packages uml)
#:use-module (gnu packages version-control)
#:use-module (gnu packages video)
#:use-module (gnu packages vim)
#:use-module (gnu packages web)
#:use-module (gnu packages wm)
#:use-module (gnu packages xdisorg)
#:use-module (guix channels)
#:use-module (guix gexp)
#:use-module (snamellit packages atuin-bin)
#:use-module (snamellit packages tools)
#:use-module (snamellit packages xca)
#:use-module (snamellit packages lazygit-bin)
#:use-module (snamellit packages tea-bin)
#:use-module (snamellit packages gh-bin)
#:use-module (snamellit packages guile-xyz)
#:use-module (srfi srfi-1)
#:use-module (ice-9 format)
)
(define-public %snam-terminal-packages
(list
cifs-utils
gnupg
pinentry
tmux
direnv
ripgrep
starship
atuin-bin
unzip
fish
fzf
watchexec
password-store
pass-otp
bc
rsync
curl
yq
lazygit-bin
gh-bin
tea-bin
lsof
git
gnu-make
glibc-locales
gcc-toolchain
cmake
autoconf
automake
pkg-config
guile-3.0
guile-colorized
guile-readline
ncurses
neovim
emacs-next
node-lts ; emacs startup relies on node being present
pandoc ; for org-mode export and markdown
plantuml ; for org-mode plantuml export
texlive ; for org-latex support
vault ; hashicorp vault
))
(define-public %snam-desktop-packages
(list
;; desktop support
flatpak
flatpak-xdg-utils
gsettings-desktop-schemas
xdg-desktop-portal
xdg-desktop-portal-gtk
xdg-desktop-portal-gnome
xdg-utils
sway
wmenu
swaylock-effects
swaybg
swayidle
fuzzel
wlogout
mako
grimshot
wlsunset
wl-clipboard
bluez ;; strictly speaking terminal but only useful on desktop?
blueman
nm-tray
alacritty
gimp
flameshot
mpv
yt-dlp
vlc
dex
xca
pavucontrol
gnome-keyring
keepassxc
nextcloud-client
foot
kitty
librewolf
guile-g-golf
guile-cairo
gtk
libadwaita
gobject-introspection
zlib ; ubiquitous used so file
;; emacs support
emacs
aspell
aspell-dict-en
aspell-dict-fr
aspell-dict-nl
aspell-dict-de
;; some additional fonts
font-dejavu
font-fira-code
font-hack
font-iosevka
font-inconsolata
font-lato
font-liberation
font-google-noto-emoji
)
)
(define-public %snam-terminal-services
(list
(service home-bash-service-type
(home-bash-configuration
(aliases '(("ec" . "emacsclient -a=''")
("gst" . "git status")
("gca" . "git commit -a")
("gcl" . "git clone")
("gco" . "git checkout")
("gd" . "git diff")
("gl" . "git pull")
("gp" . "git push")
("ggpnp". "git pull && git push")
("grb" . "git rebase")
("grba" . "git rebase --abort")
("grbc" . "git rebase --continue")
("sway" . "sway --unsupported-gpu")))
(bashrc
(list
(plain-file
"helpers"
(format #f "~{~a~&~}"
(list
"export PATH=$PATH:$HOME/.local/bin"
"eval \"$(direnv hook bash)\""
"eval \"$(atuin init bash)\""
"if [[ \"$ALACRITTY_WINDOW_ID\" != \"\" ]]; then tmux; fi"
)))))))
;; (simple-service 'variant-packages-service home-channels-service-type ; extend default
(service home-channels-service-type ; replace default home-channels-service
(list
(channel
(name 'guix)
(url (channel-url %default-guix-channel))
(branch "master")
(introduction
(make-channel-introduction
"9edb3f66fd807b096b48283debdcddccfea34bad"
(openpgp-fingerprint
"BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))
(channel
(name 'nonguix)
(url "https://gitlab.com/nonguix/nonguix")
;; Enable signature verification:
(introduction
(make-channel-introduction
"897c1a470da759236cc11798f4e0a5f7d4d59fbc"
(openpgp-fingerprint
"2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5"))))
(channel
(name 'snamguix)
(url "https://forge.snamellit.com/pti/snamguix")
(branch "main"))
))
(service home-mcron-service-type)
))
;; add folders at the end of a PATH like string, removing duplicates but
;; keeping the order of first occurrence
(define
(add-folders-to-path path folders)
(if
(null? folders)
(string-join
(delete-duplicates
(string-split path #\:))
":")
(add-folders-to-path
(string-append path ":"
(car folders))
(cdr folders))))
(define-public %snam-desktop-services
(list
(service home-dbus-service-type)
(service home-pipewire-service-type)
(simple-service 'my-xdg-data-dirs home-environment-variables-service-type
`(
;; sort hidden (dot) files first in ls listings
("LC_COLLATE" . "C")
;; Emacs is our editor
("VISUAL" . "emacsclient")
("EDITOR" . "emacsclient")
;; Make sure Flatpak apps are visible
("XDG_DATA_DIRS" .
,(add-folders-to-path
(or (getenv "XDG_DATA_DIRS") "")
'("/var/lib/flatpak/exports/share"
"/home/pti/.local/share/flatpak/exports/share"
"/home/pti/.guix-home/profile/share")))
;; Set Wayland-specific environment variables (taken from RDE)
;;("XDG_CURRENT_DESKTOP" . "sway")
;;("XDG_SESSION_TYPE" . "wayland")
;;("RTC_USE_PIPEWIRE" . "true")
;;("SDL_VIDEODRIVER" . "wayland")
;;("MOZ_ENABLE_WAYLAND" . "1")
;;("CLUTTER_BACKEND" . "wayland")
;;("ELM_ENGINE" . "wayland_egl")
;;("ECORE_EVAS_ENGINE" . "wayland-egl")
;;("QT_QPA_PLATFORM" . "wayland-egl")
))
(simple-service 'additional-fonts-service
home-fontconfig-service-type
(list
'(alias
(family "monospace")
(prefer
(family "Fira Code")
(family "Liberation Mono")
(family "Google Noto Emoji")
))))
)
)