.
This commit is contained in:
parent
33506a3ec9
commit
3b24d44a5e
2 changed files with 563 additions and 112 deletions
668
config.org
668
config.org
|
@ -1,13 +1,70 @@
|
||||||
#+TITLE: GUIX System Configuration
|
#+TITLE: GUIX System Configuration
|
||||||
#+AUTHOR: Daniel Ziltener
|
#+AUTHOR: Daniel Ziltener
|
||||||
#+PROPERTY: scheme-implementation guile
|
#+PROPERTY: scheme-implementation guile
|
||||||
#+PROPERTY: header-args:scheme :comments none :session *guile*
|
#+PROPERTY: header-args:scheme :comments none :session *guile* :prologue "(use-modules (ice-9 pretty-print))"
|
||||||
|
|
||||||
#+begin_src emacs-lisp :results none
|
* Daniel Ziltener's System Configuration
|
||||||
(org-babel-lob-ingest "./library.org")
|
|
||||||
|
This is an attempt to fit my entire system's configuration in a file. Let's see how that turns out.
|
||||||
|
|
||||||
|
** Emacs Lisp Helpers
|
||||||
|
|
||||||
|
To be able to use Org-Mode lists and tables, I need a few helpers for the conversion.
|
||||||
|
|
||||||
|
*** Converting Lists
|
||||||
|
|
||||||
|
A sample list for testing purposes:
|
||||||
|
|
||||||
|
#+NAME: list-sample
|
||||||
|
- Entry 1
|
||||||
|
- Entry 2
|
||||||
|
|
||||||
|
First, a function that converts org lists into guile ~use-~ calls.
|
||||||
|
|
||||||
|
#+NAME: org-list-to-use
|
||||||
|
#+begin_src scheme :var use-call="use-modules" :var entries='() :var all-parens=0 :results output
|
||||||
|
(pretty-print
|
||||||
|
`(,(string->symbol use-call)
|
||||||
|
,@(map (lambda (x)
|
||||||
|
(let ((splits (string-split x #\ )))
|
||||||
|
(if (and (= (length splits) 1)
|
||||||
|
(= 0 all-parens))
|
||||||
|
(string->symbol (car splits))
|
||||||
|
(map (lambda (y) (string->symbol y))
|
||||||
|
splits))))
|
||||||
|
entries)))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* Makefile
|
Sometimes, I need lists of ~string->symbol~ calls.
|
||||||
|
|
||||||
|
#+NAME: org-to-scheme-sym-list
|
||||||
|
#+begin_src scheme :var input=list-sample :results output
|
||||||
|
(pretty-print
|
||||||
|
`(list ,@(map string->symbol input)))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** Converting Tables
|
||||||
|
|
||||||
|
**** Services
|
||||||
|
|
||||||
|
This function converts a table of simple services into service definitions.
|
||||||
|
|
||||||
|
#+NAME: service-converter
|
||||||
|
#+begin_src scheme :var input='() :colnames yes :results output
|
||||||
|
(pretty-print
|
||||||
|
`(list
|
||||||
|
,@(map
|
||||||
|
(lambda (row)
|
||||||
|
(let ((service-name (car row))
|
||||||
|
(configuration (cadr row)))
|
||||||
|
`(service ,(string->symbol (string-append service-name "-service-type"))
|
||||||
|
(,(string->symbol (string-append service-name "-configuration"))
|
||||||
|
,@(call-with-input-string configuration
|
||||||
|
read)))))
|
||||||
|
input)))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Makefile
|
||||||
|
|
||||||
#+begin_src makefile :tangle Makefile
|
#+begin_src makefile :tangle Makefile
|
||||||
reconfigure:
|
reconfigure:
|
||||||
|
@ -19,7 +76,7 @@ reconfigure:
|
||||||
flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* System Installation Script
|
** System Installation Script
|
||||||
|
|
||||||
This is to be run after setting up the partitions.
|
This is to be run after setting up the partitions.
|
||||||
|
|
||||||
|
@ -30,85 +87,380 @@ This is to be run after setting up the partitions.
|
||||||
mkdir -p /mnt/boot/efi
|
mkdir -p /mnt/boot/efi
|
||||||
mount /dev/disk/by-label/EFI /mnt/boot/efi
|
mount /dev/disk/by-label/EFI /mnt/boot/efi
|
||||||
herd start cow-store /mnt
|
herd start cow-store /mnt
|
||||||
|
guix pull -C channels.scm
|
||||||
GUIX_PROFILE="/root/.config/guix/current"
|
GUIX_PROFILE="/root/.config/guix/current"
|
||||||
. "$GUIX_PROFILE/etc/profile"
|
. "$GUIX_PROFILE/etc/profile"
|
||||||
hash guix
|
hash guix
|
||||||
guix system -L. init config.scm /mnt --substitute-urls="https://ci.guix.gnu.org https://bordeaux.guix.gnu.org https://substitutes.nonguix.org"
|
guix system -L. init config.scm /mnt --substitute-urls="https://ci.guix.gnu.org https://bordeaux.guix.gnu.org https://substitutes.nonguix.org"
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* Modules
|
** The Feature Record Type
|
||||||
|
|
||||||
There are many community modules at [[https://whereis.みんな/][Whereis]].
|
This record type exists to facilitate grouping together configuration related to a specific feature.
|
||||||
|
|
||||||
#+NAME: module-list
|
#+NAME: feature-record
|
||||||
- gnu
|
#+begin_src scheme
|
||||||
- gnu image
|
(define-record-type* <feature>
|
||||||
- gnu system nss
|
feature make-feature
|
||||||
- guix channels
|
feature?
|
||||||
- rosenthal packages wm
|
(name feature-name
|
||||||
- zilti packages hyprland
|
(default #f))
|
||||||
- nongnu packages firmware
|
(root-packages feature-root-packages
|
||||||
- nongnu packages linux
|
(default '()))
|
||||||
- nongnu system linux-initrd
|
(packages feature-packages
|
||||||
|
(default '()))
|
||||||
#+begin_src scheme :noweb yes :exports none :results output :tangle config.scm
|
(files feature-files
|
||||||
<<list-to-use(use-call="use-modules",entries=module-list,all-parens=1)>>
|
(default '()))
|
||||||
|
(xdg-config-files feature-xdg-config-files
|
||||||
|
(default '()))
|
||||||
|
(service feature-service
|
||||||
|
(default '()))
|
||||||
|
(home-service feature-home-service
|
||||||
|
(default '()))
|
||||||
|
(environment feature-environment
|
||||||
|
(default '())))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+RESULTS:
|
Since the records get written into a separate file to be consumed later, this helper function is necessary to do exactly that:
|
||||||
|
|
||||||
** Service Modules
|
#+NAME: record-load-helper
|
||||||
|
#+begin_src scheme :noweb strip-export
|
||||||
#+NAME: service-module-list
|
<<feature-record>>
|
||||||
- admin
|
(define* (consume-file fobj #:optional (result '()))
|
||||||
- authentication
|
(let ((next-elem (read fobj)))
|
||||||
- base
|
(if (eof-object? next-elem)
|
||||||
- configuration
|
(reverse result)
|
||||||
- dbus
|
(consume-file fobj (cons next-elem result)))))
|
||||||
- desktop
|
<<features-to-list>>
|
||||||
- docker
|
|
||||||
- linux
|
|
||||||
- networking
|
|
||||||
- nix
|
|
||||||
- pm
|
|
||||||
- sddm
|
|
||||||
- sound
|
|
||||||
- virtualization
|
|
||||||
- xorg
|
|
||||||
|
|
||||||
#+begin_src scheme :noweb yes :exports none :results output :tangle config.scm
|
|
||||||
<<list-to-use(use-call="use-service-modules",entries=service-module-list)>>
|
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Package Modules
|
And ultimately, this function turns a list of features into a list of whatever is needed at that place.
|
||||||
|
|
||||||
#+NAME: package-module-list
|
#+NAME: features-to-list
|
||||||
- bootloaders
|
#+begin_src scheme
|
||||||
- certs
|
(define (features->list features get-fn)
|
||||||
- containers
|
(filter
|
||||||
- freedesktop
|
(negate unspecified?)
|
||||||
- fonts
|
(fold append '()
|
||||||
- gl
|
(map get-fn
|
||||||
- gnome
|
(filter
|
||||||
- kde-frameworks
|
(negate unspecified?)
|
||||||
- linux
|
features)))))
|
||||||
- pciutils
|
|
||||||
- qt
|
|
||||||
- readline
|
|
||||||
- terminals
|
|
||||||
- version-control
|
|
||||||
- virtualization
|
|
||||||
- wm
|
|
||||||
- xdisorg
|
|
||||||
- xorg
|
|
||||||
|
|
||||||
#+begin_src scheme :noweb yes :exports none :results output :tangle config.scm
|
|
||||||
<<list-to-use(use-call="use-package-modules",entries=package-module-list)>>
|
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* Configuration Definitions
|
** Features
|
||||||
|
|
||||||
** File System
|
*** Git
|
||||||
|
|
||||||
|
Git configuration file:
|
||||||
|
|
||||||
|
#+begin_src :tagle xdg-config/git/config :mkdir-p yes
|
||||||
|
[commit]
|
||||||
|
gpgSign = true
|
||||||
|
user = dziltener@lyrion.ch
|
||||||
|
[core]
|
||||||
|
pager = "diff-so-fancy | less '--tabs=4' '-RFX'"
|
||||||
|
[diff-so-fancy]
|
||||||
|
changeHunkIndicators = true
|
||||||
|
markEmptyLines = true
|
||||||
|
stripLeadingSymbols = true
|
||||||
|
useUnicodeRuler = true
|
||||||
|
[gpg]
|
||||||
|
program = "gpg"
|
||||||
|
[interactive]
|
||||||
|
diffFilter = "diff-so-fancy --patch"
|
||||||
|
[pull]
|
||||||
|
rebase = true
|
||||||
|
[push]
|
||||||
|
autoSetupRemote = true
|
||||||
|
[rebase]
|
||||||
|
autoStash = true
|
||||||
|
[sendemail]
|
||||||
|
# sendmailCmd = msmtp -t
|
||||||
|
annotate = yes
|
||||||
|
smtpServer = lyrion.ch
|
||||||
|
smtpUser = dziltener
|
||||||
|
smtpEncryption = ssl
|
||||||
|
smtpServerPort = 465
|
||||||
|
[credential]
|
||||||
|
helper = cache
|
||||||
|
helper = !pass-git-helper $@
|
||||||
|
[tag]
|
||||||
|
gpgSign = true
|
||||||
|
[user]
|
||||||
|
email = "dziltener@lyrion.ch"
|
||||||
|
name = "Daniel Ziltener"
|
||||||
|
signingKey = "37F655BAF43BC0FF300A91A1B38976E82C9DAE42"
|
||||||
|
[init]
|
||||||
|
defaultBranch = master
|
||||||
|
[github]
|
||||||
|
user = dziltener@lyrion.ch
|
||||||
|
[gitlab]
|
||||||
|
user = zilti
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
I am using [[https://github.com/languitar/pass-git-helper][pass-git-helper]] to use Pass for git credentials.
|
||||||
|
|
||||||
|
#+begin_src :tangle xdg-config/pass-git-helper/git-pass-mapping.ini :mkdir-p yes
|
||||||
|
[*dziltener@lyrion.ch*]
|
||||||
|
target=Privat/Mailaccount
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Git service configuration:
|
||||||
|
|
||||||
|
#+begin_src scheme :tangle features.scm
|
||||||
|
(feature
|
||||||
|
(name 'git)
|
||||||
|
(root-packages '(git))
|
||||||
|
(packages '(git git:send-email pass-git-helper))
|
||||||
|
(xdg-config-files '(("git/config" ,(local-file "./xdg-config/git/config"))
|
||||||
|
("pass-git-helper/git-pass-mapping.ini" ,(local-file "./xdg-config/pass-git-helper/git-pass-mapping.ini")))))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** Hyprland
|
||||||
|
|
||||||
|
An amazing [[https://hyprland.org/][tiling compositor for Wayland]].
|
||||||
|
|
||||||
|
#+begin_src :tangle xdg-config/hypr/hyprland.conf :mkdir-p yes
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||||
|
monitor=eDP-1,2880x1800@90.0,0x1930,1.333333
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
|
||||||
|
|
||||||
|
# Execute your favorite apps at launch
|
||||||
|
# exec-once = waybar & hyprpaper & firefox
|
||||||
|
|
||||||
|
# Source a file (multi-file configs)
|
||||||
|
# source = ~/.config/hypr/myColors.conf
|
||||||
|
|
||||||
|
# Set programs that you use
|
||||||
|
$terminal = kitty
|
||||||
|
$fileManager = dolphin
|
||||||
|
$menu = fuzzel
|
||||||
|
|
||||||
|
# Some default env vars.
|
||||||
|
env = XCURSOR_SIZE,24
|
||||||
|
env = HYPRCURSOR_SIZE,24
|
||||||
|
env = HYPRCURSOR_THEME,hyprcursor_Dracula
|
||||||
|
env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that
|
||||||
|
env = MOZ_ENABLE_WAYLAND,1
|
||||||
|
env = XDG_SESSION_TYPE,wayland
|
||||||
|
env = CLUTTER_BACKEND,wayland
|
||||||
|
env = SDL_VIDEODRIVER,wayland
|
||||||
|
env = LIBGL_DRI3_ENABLE,1
|
||||||
|
env = GDK_BACKEND,wayland
|
||||||
|
env = XKB_DEFAULT_RULES,evdev
|
||||||
|
env = QT_QPA_PLATFORM,wayland
|
||||||
|
env = WLR_DRM_NO_ATOMIC,1
|
||||||
|
env = SSH_AUTH_SOCK,/run/user/1000/gnupg/S.gpg-agent.ssh
|
||||||
|
|
||||||
|
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
|
||||||
|
input {
|
||||||
|
kb_layout = de
|
||||||
|
kb_variant =
|
||||||
|
kb_model =
|
||||||
|
kb_options = caps:swapescape
|
||||||
|
kb_rules =
|
||||||
|
|
||||||
|
follow_mouse = 1
|
||||||
|
|
||||||
|
touchpad {
|
||||||
|
natural_scroll = no
|
||||||
|
}
|
||||||
|
|
||||||
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
|
}
|
||||||
|
|
||||||
|
general {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||||
|
|
||||||
|
gaps_in = 15
|
||||||
|
gaps_out = 20
|
||||||
|
border_size = 2
|
||||||
|
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||||
|
col.inactive_border = rgba(595959aa)
|
||||||
|
|
||||||
|
layout = master
|
||||||
|
|
||||||
|
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||||
|
allow_tearing = false
|
||||||
|
}
|
||||||
|
|
||||||
|
decoration {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||||
|
|
||||||
|
rounding = 10
|
||||||
|
|
||||||
|
blur {
|
||||||
|
enabled = true
|
||||||
|
size = 3
|
||||||
|
passes = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
drop_shadow = yes
|
||||||
|
shadow_range = 4
|
||||||
|
shadow_render_power = 3
|
||||||
|
col.shadow = rgba(1a1a1aee)
|
||||||
|
}
|
||||||
|
|
||||||
|
animations {
|
||||||
|
enabled = yes
|
||||||
|
|
||||||
|
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||||
|
|
||||||
|
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||||
|
|
||||||
|
animation = windows, 1, 7, myBezier
|
||||||
|
animation = windowsOut, 1, 7, default, popin 80%
|
||||||
|
animation = border, 1, 10, default
|
||||||
|
animation = borderangle, 1, 8, default
|
||||||
|
animation = fade, 1, 7, default
|
||||||
|
animation = workspaces, 1, 6, default
|
||||||
|
}
|
||||||
|
|
||||||
|
dwindle {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||||
|
pseudotile = no # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||||
|
preserve_split = yes # you probably want this
|
||||||
|
force_split = 0
|
||||||
|
default_split_ratio = 1.5
|
||||||
|
}
|
||||||
|
|
||||||
|
master {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||||
|
new_is_master = false
|
||||||
|
orientation = center
|
||||||
|
workspace = w[t2], layoutopt:orientation:left
|
||||||
|
always_center_master = true
|
||||||
|
mfact = 0.5
|
||||||
|
special_scale_factor = 0.8
|
||||||
|
}
|
||||||
|
|
||||||
|
gestures {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||||
|
workspace_swipe = off
|
||||||
|
}
|
||||||
|
|
||||||
|
misc {
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||||
|
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||||
|
vfr = true
|
||||||
|
vrr = 1
|
||||||
|
animate_manual_resizes = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# Example windowrule v1
|
||||||
|
# windowrule = float, ^(kitty)$
|
||||||
|
# Example windowrule v2
|
||||||
|
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||||
|
#windowrulev2 = nomaximizerequest, class:.* # You'll probably like this.
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
|
||||||
|
$mainMod = SUPER
|
||||||
|
|
||||||
|
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
||||||
|
bind = $mainMod, Q, exec, $terminal
|
||||||
|
bind = $mainMod, C, killactive,
|
||||||
|
bind = $mainMod, M, exec, wlogout
|
||||||
|
bind = $mainMod, E, exec, $fileManager
|
||||||
|
bind = $mainMod, V, togglefloating,
|
||||||
|
bind = $mainMod, R, exec, $menu
|
||||||
|
bind = $mainMod SHIFT, L, exec, hyprlock
|
||||||
|
bind = $mainMod, PRINT, exec, grim -l 9 -g "`slurp`" - | swappy -f -
|
||||||
|
bind = $mainMod, P, pseudo, # dwindle
|
||||||
|
bind = $mainMod, J, togglesplit, # dwindle
|
||||||
|
bind = $mainMod, T, togglegroup,
|
||||||
|
bind = $mainMod, A, layoutmsg, swapwithmaster master
|
||||||
|
bind = $mainMod, I, layoutmsg, orientationcenter
|
||||||
|
bind = $mainMod, H, layoutmsg, orientationleft
|
||||||
|
bind = $mainMod, L, layoutmsg, orientationright
|
||||||
|
|
||||||
|
# Move focus with mainMod + arrow keys
|
||||||
|
bind = $mainMod, left, movefocus, l
|
||||||
|
bind = $mainMod, right, movefocus, r
|
||||||
|
bind = $mainMod, up, movefocus, u
|
||||||
|
bind = $mainMod, down, movefocus, d
|
||||||
|
|
||||||
|
# Move windows inside a workspace
|
||||||
|
bind = $mainMod SHIFT, a, movewindoworgroup, l
|
||||||
|
bind = $mainMod SHIFT, d, movewindoworgroup, r
|
||||||
|
|
||||||
|
# Handle tabbed windows
|
||||||
|
bind = $mainMod, tab, changegroupactive,
|
||||||
|
bind = $mainMod SHIFT, t, lockactivegroup, toggle
|
||||||
|
|
||||||
|
# Switch workspaces with mainMod + [0-9]
|
||||||
|
bind = $mainMod, 1, split:workspace, 1
|
||||||
|
bind = $mainMod, 2, split:workspace, 2
|
||||||
|
bind = $mainMod, 3, split:workspace, 3
|
||||||
|
bind = $mainMod, 4, split:workspace, 4
|
||||||
|
bind = $mainMod, 5, split:workspace, 5
|
||||||
|
bind = $mainMod, 6, split:workspace, 6
|
||||||
|
bind = $mainMod, 7, split:workspace, 7
|
||||||
|
bind = $mainMod, 8, split:workspace, 8
|
||||||
|
bind = $mainMod, 9, split:workspace, 9
|
||||||
|
bind = $mainMod, 0, split:workspace, 10
|
||||||
|
|
||||||
|
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||||
|
bind = $mainMod SHIFT, 1, split:movetoworkspace, 1
|
||||||
|
bind = $mainMod SHIFT, 2, split:movetoworkspace, 2
|
||||||
|
bind = $mainMod SHIFT, 3, split:movetoworkspace, 3
|
||||||
|
bind = $mainMod SHIFT, 4, split:movetoworkspace, 4
|
||||||
|
bind = $mainMod SHIFT, 5, split:movetoworkspace, 5
|
||||||
|
bind = $mainMod SHIFT, 6, split:movetoworkspace, 6
|
||||||
|
bind = $mainMod SHIFT, 7, split:movetoworkspace, 7
|
||||||
|
bind = $mainMod SHIFT, 8, split:movetoworkspace, 8
|
||||||
|
bind = $mainMod SHIFT, 9, split:movetoworkspace, 9
|
||||||
|
bind = $mainMod SHIFT, 0, split:movetoworkspace, 10
|
||||||
|
|
||||||
|
# Example special workspace (scratchpad)
|
||||||
|
bind = ALT SHIFT, RETURN, togglespecialworkspace, magic
|
||||||
|
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
|
||||||
|
|
||||||
|
# Scroll through existing workspaces with mainMod + scroll
|
||||||
|
bind = $mainMod, mouse_down, workspace, e+1
|
||||||
|
bind = $mainMod, mouse_up, workspace, e-1
|
||||||
|
|
||||||
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
bindm = $mainMod, mouse:272, movewindow
|
||||||
|
bindm = $mainMod, mouse:273, resizewindow
|
||||||
|
|
||||||
|
# Autostart
|
||||||
|
exec-once = hyprctl dispatch togglespecialworkspace; sleep 1; $terminal; hyprctl dispatch layoutmsg orientationleft; hyprctl dispatch togglespecialworkspace
|
||||||
|
exec-once = hyprpaper
|
||||||
|
exec-once = waybar
|
||||||
|
exec-once = daemon syncthing serve
|
||||||
|
exec-once = hypridle &
|
||||||
|
exec-once = swaync &
|
||||||
|
exec-once = emacs --daemon
|
||||||
|
exec-once = hyprctl plugin load "$(find /gnu/store/ -name 'libhyprsplit.so' | head -n1)"
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Wallpaper via Hyprpaper
|
||||||
|
|
||||||
|
#+begin_src :tangle xdg-config/hypr/hyprland.conf :mkdir-p yes
|
||||||
|
preload = /home/zilti/config/wallpapers/Next/contents/images/5120x2880.png
|
||||||
|
wallpaper = ,/home/zilti/config/wallpapers/Next/contents/images/5120x2880.png
|
||||||
|
splash = true
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Main configuration
|
||||||
|
|
||||||
|
#+begin_src scheme :tangle features.scm
|
||||||
|
(feature
|
||||||
|
(name 'hyprland)
|
||||||
|
(root-packages 'hyprland-xwayland)
|
||||||
|
(packages '(hyprcursor
|
||||||
|
hyprpaper
|
||||||
|
hypridle
|
||||||
|
hyprlock
|
||||||
|
hyprland-xwayland-plugin-hyprsplit)))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Operating System Definitions
|
||||||
|
|
||||||
|
*** File System
|
||||||
|
|
||||||
Update the file system labels:
|
Update the file system labels:
|
||||||
#+begin_src shell
|
#+begin_src shell
|
||||||
|
@ -138,9 +490,9 @@ Update the file system labels:
|
||||||
(list (swap-space (target (file-system-label "swap")))))
|
(list (swap-space (target (file-system-label "swap")))))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** Channels
|
*** Channels
|
||||||
|
|
||||||
This adds the Nonguix channel.
|
This adds useful package channels.
|
||||||
|
|
||||||
#+NAME: root-channels
|
#+NAME: root-channels
|
||||||
#+begin_src scheme :tangle channels.scm
|
#+begin_src scheme :tangle channels.scm
|
||||||
|
@ -176,11 +528,107 @@ This adds the Nonguix channel.
|
||||||
%default-channels)
|
%default-channels)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+RESULTS: root-channels :tangle channels.scm
|
Here are the corresponding pubkeys:
|
||||||
|
|
||||||
#+RESULTS: root-channels
|
#+NAME: nonguix-pubkey
|
||||||
|
#+begin_src scheme :tangle keys/non-guix.pub :mkdirp yes
|
||||||
|
(public-key
|
||||||
|
(ecc
|
||||||
|
(curve Ed25519)
|
||||||
|
(q #C1FD53E5D4CE971933EC50C9F307AE2171A2D3B52C804642A7A35F84F3A4EA98#)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
** Packages
|
#+NAME: guix-ci-pubkey
|
||||||
|
#+begin_src scheme :tangle keys/guix-ci.pub :mkdirp yes
|
||||||
|
(public-key
|
||||||
|
(ecc
|
||||||
|
(curve Ed25519)
|
||||||
|
(q #8D156F295D24B0D9A86FA5741A840FF2D24F60F7B6C4134814AD55625971B394#)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+NAME: guix-bordeaux-pubkey
|
||||||
|
#+begin_src scheme :tangle keys/guix-bordeaux.pub :mkdirp yes
|
||||||
|
(public-key
|
||||||
|
(ecc
|
||||||
|
(curve Ed25519)
|
||||||
|
(q #7D602902D3A2DBB83F8A0FB98602A754C5493B0B778C8D1DD4E0F41DE14DE34F#)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** Modules
|
||||||
|
|
||||||
|
There are many community modules at [[https://whereis.みんな/][Whereis]].
|
||||||
|
|
||||||
|
#+NAME: module-list
|
||||||
|
- gnu
|
||||||
|
- gnu image
|
||||||
|
- gnu system nss
|
||||||
|
- guix channels
|
||||||
|
- rosenthal packages wm
|
||||||
|
- zilti packages hyprland
|
||||||
|
- nongnu packages firmware
|
||||||
|
- nongnu packages linux
|
||||||
|
- nongnu system linux-initrd
|
||||||
|
|
||||||
|
#+begin_src scheme :noweb yes :exports none :results output :tangle config.scm
|
||||||
|
<<list-to-use(use-call="use-modules",entries=module-list,all-parens=1)>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
**** Service Modules
|
||||||
|
|
||||||
|
#+NAME: service-module-list
|
||||||
|
- admin
|
||||||
|
- authentication
|
||||||
|
- base
|
||||||
|
- configuration
|
||||||
|
- dbus
|
||||||
|
- desktop
|
||||||
|
- docker
|
||||||
|
- linux
|
||||||
|
- networking
|
||||||
|
- nix
|
||||||
|
- pm
|
||||||
|
- sddm
|
||||||
|
- sound
|
||||||
|
- virtualization
|
||||||
|
- xorg
|
||||||
|
|
||||||
|
#+begin_src scheme :noweb yes :exports none :results output :tangle config.scm
|
||||||
|
<<list-to-use(use-call="use-service-modules",entries=service-module-list)>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
**** Package Modules
|
||||||
|
|
||||||
|
#+NAME: package-module-list
|
||||||
|
- bootloaders
|
||||||
|
- certs
|
||||||
|
- containers
|
||||||
|
- freedesktop
|
||||||
|
- fonts
|
||||||
|
- gl
|
||||||
|
- gnome
|
||||||
|
- kde-frameworks
|
||||||
|
- linux
|
||||||
|
- pciutils
|
||||||
|
- qt
|
||||||
|
- readline
|
||||||
|
- terminals
|
||||||
|
- version-control
|
||||||
|
- virtualization
|
||||||
|
- wm
|
||||||
|
- xdisorg
|
||||||
|
- xorg
|
||||||
|
|
||||||
|
#+begin_src scheme :noweb yes :exports none :results output :tangle config.scm
|
||||||
|
<<list-to-use(use-call="use-package-modules",entries=package-module-list)>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** Root Packages
|
||||||
|
|
||||||
#+NAME: root-packages
|
#+NAME: root-packages
|
||||||
- bluez-firmware
|
- bluez-firmware
|
||||||
|
@ -225,7 +673,7 @@ This adds the Nonguix channel.
|
||||||
|
|
||||||
#+RESULTS: root-package-block
|
#+RESULTS: root-package-block
|
||||||
|
|
||||||
** Services
|
*** Services
|
||||||
|
|
||||||
#+NAME: root-services-block
|
#+NAME: root-services-block
|
||||||
#+begin_src scheme :noweb yes :exports none :results code
|
#+begin_src scheme :noweb yes :exports none :results code
|
||||||
|
@ -242,7 +690,7 @@ This adds the Nonguix channel.
|
||||||
<<unattended-upgrade>>)))
|
<<unattended-upgrade>>)))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
*** Simple Services
|
**** Simple Services
|
||||||
|
|
||||||
These services are unmodified, or have just few settings.
|
These services are unmodified, or have just few settings.
|
||||||
|
|
||||||
|
@ -265,7 +713,7 @@ These services are unmodified, or have just few settings.
|
||||||
<<service-converter(input=root-simple-services)>>
|
<<service-converter(input=root-simple-services)>>
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
*** Unattended Upgrade Service
|
**** Unattended Upgrade Service
|
||||||
|
|
||||||
#+NAME: unattended-upgrade
|
#+NAME: unattended-upgrade
|
||||||
#+begin_src scheme :noweb no-export
|
#+begin_src scheme :noweb no-export
|
||||||
|
@ -276,7 +724,7 @@ These services are unmodified, or have just few settings.
|
||||||
<<root-channels>>)))
|
<<root-channels>>)))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
*** Hosts File
|
**** Hosts File
|
||||||
|
|
||||||
#+NAME: hosts-file-service
|
#+NAME: hosts-file-service
|
||||||
#+begin_src scheme :noweb no-export
|
#+begin_src scheme :noweb no-export
|
||||||
|
@ -286,37 +734,7 @@ These services are unmodified, or have just few settings.
|
||||||
(host "::1" "l.redsky.io" '("ld.redsky.io"))))
|
(host "::1" "l.redsky.io" '("ld.redsky.io"))))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
*** Modified Desktop Services
|
**** Modified Desktop Services
|
||||||
|
|
||||||
#+NAME: nonguix-pubkey
|
|
||||||
#+begin_src scheme :tangle keys/non-guix.pub :mkdirp yes
|
|
||||||
(public-key
|
|
||||||
(ecc
|
|
||||||
(curve Ed25519)
|
|
||||||
(q #C1FD53E5D4CE971933EC50C9F307AE2171A2D3B52C804642A7A35F84F3A4EA98#)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+NAME: guix-ci-pubkey
|
|
||||||
#+begin_src scheme :tangle keys/guix-ci.pub :mkdirp yes
|
|
||||||
(public-key
|
|
||||||
(ecc
|
|
||||||
(curve Ed25519)
|
|
||||||
(q #8D156F295D24B0D9A86FA5741A840FF2D24F60F7B6C4134814AD55625971B394#)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+NAME: guix-bordeaux-pubkey
|
|
||||||
#+begin_src scheme :tangle keys/guix-bordeaux.pub :mkdirp yes
|
|
||||||
(public-key
|
|
||||||
(ecc
|
|
||||||
(curve Ed25519)
|
|
||||||
(q #7D602902D3A2DBB83F8A0FB98602A754C5493B0B778C8D1DD4E0F41DE14DE34F#)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+NAME: root-modified-desktop-services
|
#+NAME: root-modified-desktop-services
|
||||||
#+begin_src scheme :exports none :results code :noweb no-export
|
#+begin_src scheme :exports none :results code :noweb no-export
|
||||||
|
@ -336,7 +754,7 @@ These services are unmodified, or have just few settings.
|
||||||
%default-authorized-guix-keys)))))
|
%default-authorized-guix-keys)))))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
*** Screen Locker Service
|
**** Screen Locker Service
|
||||||
|
|
||||||
For some reason, this service runs on root level for Guix.
|
For some reason, this service runs on root level for Guix.
|
||||||
|
|
||||||
|
@ -350,7 +768,7 @@ For some reason, this service runs on root level for Guix.
|
||||||
(using-setuid? #f)))
|
(using-setuid? #f)))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* Operating System
|
*** Operating System
|
||||||
|
|
||||||
This is the full operating system specification.
|
This is the full operating system specification.
|
||||||
|
|
||||||
|
@ -386,3 +804,35 @@ This is the full operating system specification.
|
||||||
<<root-services-block>>
|
<<root-services-block>>
|
||||||
(name-service-switch %mdns-host-lookup-nss))
|
(name-service-switch %mdns-host-lookup-nss))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
|
||||||
|
** Guix Home
|
||||||
|
|
||||||
|
This is the main home configuration. First, all the imports:
|
||||||
|
|
||||||
|
#+NAME: home-module-list
|
||||||
|
- gnu packages
|
||||||
|
- gnu packages gnupg
|
||||||
|
- gnu packages linux
|
||||||
|
- gnu packages shellutils
|
||||||
|
- nongnu packages game-client
|
||||||
|
- gnu services
|
||||||
|
- guix gexp
|
||||||
|
- guix channels
|
||||||
|
- gnu home
|
||||||
|
- gnu home services
|
||||||
|
- gnu home services desktop
|
||||||
|
- gnu home services gnupg
|
||||||
|
- gnu home services guix
|
||||||
|
- gnu home services mail
|
||||||
|
- gnu home services mcron
|
||||||
|
- gnu home services pm
|
||||||
|
- gnu home services shells
|
||||||
|
- gnu home services shepherd
|
||||||
|
- gnu home services sound
|
||||||
|
- gnu home services ssh
|
||||||
|
- gnu home services syncthing
|
||||||
|
|
||||||
|
#+begin_src scheme :noweb yes :exports none :results output :mkdir-p yes :tangle home/home-configuration.scm
|
||||||
|
<<list-to-use(use-call="use-modules",entries=home-module-list,all-parens=1)>>
|
||||||
|
#+end_src
|
||||||
|
|
|
@ -31,8 +31,7 @@
|
||||||
(home-environment
|
(home-environment
|
||||||
;; Below is the list of Home services. To search for available
|
;; Below is the list of Home services. To search for available
|
||||||
;; services, run 'guix home search KEYWORD' in a terminal.
|
;; services, run 'guix home search KEYWORD' in a terminal.
|
||||||
(
|
(services
|
||||||
services
|
|
||||||
(list
|
(list
|
||||||
(service home-shepherd-service-type)
|
(service home-shepherd-service-type)
|
||||||
(service home-msmtp-service-type
|
(service home-msmtp-service-type
|
||||||
|
@ -273,4 +272,6 @@ services
|
||||||
(service home-dbus-service-type)
|
(service home-dbus-service-type)
|
||||||
(service home-pipewire-service-type
|
(service home-pipewire-service-type
|
||||||
(home-pipewire-configuration
|
(home-pipewire-configuration
|
||||||
(wireplumber wireplumber-minimal))))))
|
(wireplumber wireplumber-minimal)))
|
||||||
|
)
|
||||||
|
))
|
||||||
|
|
Loading…
Reference in a new issue