diff --git a/files/.config/niri/config.kdl b/files/.config/niri/config.kdl index 46da5eb..d44f532 100644 --- a/files/.config/niri/config.kdl +++ b/files/.config/niri/config.kdl @@ -272,6 +272,7 @@ layout { // See the binds section below for more spawn examples. spawn-sh-at-startup "emacs --daemon" +spawn-sh-at-startup "dms run -c $DMSDEFAULTCONFIG" spawn-at-startup "secretsd" spawn-at-startup "birdtray" spawn-at-startup "icedove" diff --git a/guix-config/home/workstation.scm b/guix-config/home/workstation.scm index 9d8ecc7..ecfc6a6 100644 --- a/guix-config/home/workstation.scm +++ b/guix-config/home/workstation.scm @@ -1,5 +1,6 @@ (define-module (guix-config home workstation) #:use-module (gnu home) + #:use-module (guix) #:use-module (gnu packages emacs) #:use-module (gnu packages glib) #:use-module (gnu packages shellutils) @@ -17,6 +18,7 @@ #:use-module (gnu packages linux) #:use-module (gnu packages freedesktop) #:use-module (gnu packages rust-apps) + #:use-module (gnu packages password-utils) #:use-module (gnu packages qt) #:use-module (gnu packages version-control) #:use-module (gnu packages librewolf) @@ -35,6 +37,7 @@ #:use-module (gnu home services sound) #:use-module (gnu home services desktop) #:use-module (guix-config packages emacs) + #:use-module (guix-config packages fonts) #:use-module (guix-config home services emacs) #:use-module (guix-config home services flatpak) #:use-module (guix-config home services secretsd) @@ -43,7 +46,7 @@ #:use-module (guix packages) #:use-module (gnu packages gimp) #:use-module (gnu packages inkscape) - #:use-module (gnu home services dankmaterialshell) + #:use-module (gnu packages wm) ) (define tune @@ -60,6 +63,7 @@ icecat vlc font-google-noto-emoji + font-nerd-fonts-symbols-mono font-openmoji direnv (package @@ -74,17 +78,21 @@ inkscape icedove nautilus + dankmaterialshell + secretsd xournalpp)) ;; Below is the list of Home services. To search for available ;; services, run 'guix home search KEYWORD' in a terminal. (services - (append (list (service home-dankmaterialshell-service-type - (home-dankmaterialshell-configuration - (launch-command (file-append niri "/bin/niri msg action spawn-sh --")))) - (service home-niri-service-type) + (append (list ;(service home-dankmaterialshell-service-type + ; (home-dankmaterialshell-configuration + ; (launch-command (file-append niri "/bin/niri msg action spawn-sh --")))) + (service home-niri-service-type + (niri-configuration + (environment-variables (list (string-append "DMSDEFAULTCONFIG=" (package-output (open-connection) dankmaterialshell) "/share/quickshell"))))) (service home-pipewire-service-type) - (service home-wayland-service-type) + ;(service home-wayland-service-type) (service home-dbus-service-type) (service home-bash-service-type (home-bash-configuration diff --git a/guix-config/packages/fonts.scm b/guix-config/packages/fonts.scm new file mode 100644 index 0000000..e018f57 --- /dev/null +++ b/guix-config/packages/fonts.scm @@ -0,0 +1,144 @@ +(define-module (guix-config packages fonts) + #:use-module (ice-9 regex) + #:use-module (guix utils) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix git-download) + #:use-module (guix build-system font) + #:use-module (guix build-system gnu) + #:use-module (guix build-system meson) + #:use-module (guix build-system trivial) + #:use-module (guix build-system copy) + #:use-module (gnu packages) + #:use-module (gnu packages c) + #:use-module (gnu packages base) + #:use-module (gnu packages bash) + #:use-module (gnu packages compression) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages gd) + #:use-module (gnu packages gettext) + #:use-module (gnu packages glib) + #:use-module (gnu packages gtk) + #:use-module (gnu packages perl) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages python) + #:use-module (gnu packages python-compression) + #:use-module (gnu packages python-xyz) + #:use-module (gnu packages sdl) + #:use-module (gnu packages xorg) + #:export (font-nerd-fonts-symbols-mono)) + +(define-public font-nerd-fonts-symbols-mono + (package + (name "font-nerd-fonts-symbols-mono") + (version "3.3.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ryanoasis/nerd-fonts") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0qlj9lgc0qlgqk716136p1f3c2kvzphkm4q0iy4isj0gz76iqrx0")) + (modules '((guix build utils))) + (snippet + #~(begin + ;; Remove large patched-fonts directory to save space and build time + (delete-file-recursively "patched-fonts"))))) + (build-system gnu-build-system) + (arguments + (list + #:tests? #f ; No test suite + #:phases + #~(modify-phases %standard-phases + (delete 'configure) + (delete 'build) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (font-dir (string-append out "/share/fonts/truetype")) + (blank-font "src/unpatched-fonts/NerdFontsSymbolsOnly/NerdFontsSymbolsNerdFontBlank.sfd")) + + ;; Ensure output directory exists + (mkdir-p font-dir) + + ;; Set HOME to avoid fontforge warnings + (setenv "HOME" (getcwd)) + + ;; Patch the blank font to create Symbols Only Mono + ;; --complete: Include all icon sets + ;; --mono: Create monospaced glyphs (fixed width) + ;; --ext ttf: Generate TrueType font + ;; --no-progressbars: Disable progress bars for clean build output + (invoke "fontforge" "-script" "font-patcher" + "--complete" + "--mono" + "--ext" "ttf" + "--no-progressbars" + "--outputdir" font-dir + blank-font)))) + (add-after 'install 'check-font + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (font-dir (string-append out "/share/fonts/truetype")) + (font-file (string-append font-dir "/SymbolsNerdFontMono-Regular.ttf"))) + + ;; Verify the font file exists + (unless (file-exists? font-file) + (error "Font file was not generated!")) + + ;; Use Python script with fontforge to validate the font + (invoke "python3" "-c" + (string-append + "import fontforge\n" + "font = fontforge.open('" font-file "')\n" + "glyph_count = len([g for g in font.glyphs() if g.unicode > 0])\n" + "print(f'Font has {glyph_count} glyphs with Unicode mapping')\n" + "if glyph_count < 8000:\n" + " raise ValueError(f'Font has too few glyphs: {glyph_count}')\n" + "print('✓ Font validation passed')\n" + "font.close()\n")) + + (format #t "✓ Font validation successful: ~a~%" font-file))))))) + (native-inputs + (list fontforge python)) + (home-page "https://www.nerdfonts.com/") + (synopsis "Monospaced symbol font containing Nerd Fonts icon glyphs") + (description + "This package provides the Nerd Fonts Symbols Only font in monospaced +variant, built from source using the Nerd Fonts patcher. It contains only the +icon glyphs from Nerd Fonts without any base font, making it suitable for use +as a fallback font for icon display in terminals and text editors such as Kitty. + +The font includes glyphs from multiple icon sets: + +@itemize +@item Powerline with Extra Symbols +@item Font Awesome and Font Awesome Extension +@item Material Design Icons +@item Weather Icons +@item Devicons +@item Octicons +@item Font Logos (formerly Font Linux) +@item Pomicons +@item Codeicons +@end itemize + +The monospaced variant ensures all glyphs have uniform width, which is +essential for terminal emulators that require consistent character spacing. + +@strong{Licensing:} This package combines glyphs from multiple sources: +@itemize +@item MIT: Nerd Fonts patcher and scripts +@item SIL OFL-1.1: Various font glyphs (Powerline, Devicons, Octicons, etc.) +@item Apache-2.0: Codicons, Material Design Icons +@item CC-BY-4.0: Font Awesome icons +@end itemize") + (license (list license:expat + license:silofl1.1 + license:asl2.0 + license:cc-by4.0))))