Compare commits

..

46 Commits

Author SHA1 Message Date
marc
e87b0ddd24 Added screenshots module 2025-10-05 18:23:02 +02:00
marc
18cfc610e1 Add anki 2025-10-05 15:43:21 +02:00
marc
7277d5b080 Add input modules (greek and japanese) 2025-10-05 15:43:04 +02:00
marc
ed00a90dda Better emoji support in emacs (+ other) 2025-09-20 16:48:38 +02:00
marc
97b58f141a Change theme 2025-09-20 16:47:58 +02:00
marc
d388d2192a Added cliphist and changed starship config 2025-06-01 22:57:57 +02:00
marc
41d47f6152 Use ghostty, starship and remove powerlevel 10k 2025-05-25 14:20:12 +02:00
marc
df6c1c9402 Upgrade to nixpkgs 25.05 2025-05-24 19:06:04 +02:00
marc
fc548af96a Update folkugat nomad deployment 2025-05-24 17:20:10 +02:00
marc
1b8db86a98 Doom emacs: use eglot LSP 2025-03-24 23:01:12 +01:00
marc
e24078ec81 Moved nomad data files 2025-03-24 23:01:12 +01:00
marc
411bf5b0f2 Thingvellir fixes 2025-03-24 22:56:23 +01:00
marc
7312947723 Add folkugat host volume in thingvellir 2025-03-24 22:10:27 +01:00
marc
428a1756f3 Renew consul certificates 2025-03-14 20:01:35 +01:00
marc
f7afbe6973 Other changes 2025-02-16 22:51:35 +01:00
marc
e917ea97c6 Add zen browser 2025-02-16 22:51:22 +01:00
marc
8378eec1e0 Configure kanata for voyager (disable it) 2025-02-16 22:50:51 +01:00
marc
a39f38b3f2 Added keyboard settings for voyager 2025-02-01 00:54:05 +01:00
marc
aef9169245 Add Cargo.toml to Rust devenv 2024-12-30 18:59:35 +01:00
marc
bb7b073fe9 Changed kanata config 2024-12-30 18:59:14 +01:00
marc
b1a8174ea1 More changes in greeter 2024-12-30 18:59:03 +01:00
marc
4518cccec1 Changes in greeter 2024-12-24 17:57:58 +01:00
marc
8da975b098 Fix install docs and deploy keys script 2024-12-24 17:57:40 +01:00
marc
d452ec86dd Remove nameserver from quinto 2024-12-22 16:18:43 +01:00
marc
ed305126a2 Added quinto host 2024-12-22 16:15:46 +01:00
marc
a59c52a2a3 Added quinto secrets and deploy-ssh keys 2024-12-22 16:05:01 +01:00
marc
ab380782c3 Added brightness notifications 2024-12-08 19:03:42 +01:00
marc
5fd64d47cd Added swaync and some notifications 2024-12-06 19:05:56 +01:00
marc
2956327b0c Modify kanata 2024-12-04 19:30:14 +01:00
marc
40b3eaba12 Added notification center 2024-12-04 15:45:20 +01:00
marc
7fe62ab2ce Brightness control 2024-12-04 14:33:49 +01:00
marc
2af075c7dd More refactoring and added hyprlock 2024-12-03 22:57:56 +01:00
marc
a5cd3713e7 Desktop environment refactor 2024-12-03 20:03:23 +01:00
marc
c62acaa77f Upgrade nix to 24.11 2024-12-03 15:22:53 +01:00
marc
39cdbaa430 Use hy3 2024-12-03 14:26:09 +01:00
marc
228c57679b Upgrade flake 2024-12-01 15:55:27 +01:00
marc
81fedb6261 Add greek keyboard layout and include kanata in hyprland 2024-12-01 15:54:58 +01:00
marc
154b7fb9b2 Modify kanata config 2024-11-23 13:05:31 +01:00
marc
0584a50f5f Added yazi 2024-11-23 13:05:18 +01:00
marc
7cbf3cb37b Added kanata 2024-11-10 20:12:15 +01:00
marc
6ba393d433 Fix rofi, eww and gpg 2024-11-10 20:12:15 +01:00
marc
e4bf731436 Use python 3.12 in devenv 2024-11-10 20:12:15 +01:00
marc
eef75973d4 Upgrade flake 2024-11-10 20:12:12 +01:00
marc
25a24fe206 Add mouse shortuct to resize window in hyprland 2024-11-10 20:10:05 +01:00
marc
d49b475e16 Upgrade flake 2024-05-28 22:50:17 +02:00
marc
6ca66905b1 Fixed nomad bind address to use tailscale IP instead of 0.0.0.0 2024-05-28 22:50:17 +02:00
98 changed files with 2630 additions and 2966 deletions

View File

@@ -1,6 +1,6 @@
* NixOS * NixOS
** [[file:docs/install.org][Installing]] ** [[file:docs/install.org][Installing]]
** Rebuilding *** Rebuilding
#+BEGIN_SRC bash #+BEGIN_SRC bash
sudo nixos-rebuild switch --impure --flake ".#${HOST}" sudo nixos-rebuild switch --impure --flake ".#${HOST}"
#+END_SRC #+END_SRC

View File

@@ -0,0 +1,12 @@
[general]
import = ["~/.config/alacritty/theme.toml"]
[font]
size = 12
[font.normal]
family = "Iosevka Nerd Font"
style = "Regular"
[window]
opacity = 0.85

View File

@@ -1,9 +0,0 @@
window:
opacity: 0.85
font:
size: 12
normal:
family: Iosevka Nerd Font
style: Regular
import:
- ~/.config/alacritty/theme.yml

View File

@@ -10,22 +10,23 @@
(setq display-line-numbers-type t) (setq display-line-numbers-type t)
;; Fonts ;; Fonts
(setq doom-font (font-spec :family "Iosevka Nerd Font" :size 15)) (setq doom-font (font-spec :family "Iosevka Nerd Font" :size 18))
(setq doom-unicode-font (font-spec :family "Iosevka Nerd Font" :size 15)) (setq doom-symbol-font (font-spec :family "Iosevka Nerd Font" :size 18))
(setq doom-emoji-font (font-spec :family "Noto Color Emoji" :size 18))
;; Themeing ;; Themeing
;; (use-package base16-theme (use-package base16-theme
;; :init (add-to-list 'custom-theme-load-path "~/.config/doom/themes") :init (add-to-list 'custom-theme-load-path "~/.config/doom/themes")
;; :ensure t :ensure t
;; :config
;; (load-theme 'base16-samfelag t))
(after! doom-themes
(load-theme 'doom-nano-dark t))
(use-package! doom-nano-modeline
:config :config
(doom-nano-modeline-mode 1) (load-theme 'base16-samfelag t))
(global-hide-mode-line-mode 1)) ;; (after! doom-themes
;; (load-theme 'doom-nano-dark t))
;; (use-package! doom-nano-modeline
;; :config
;; (doom-nano-modeline-mode 1)
;; (global-hide-mode-line-mode 1))
;; Here are some additional functions/macros that could help you configure Doom: ;; Here are some additional functions/macros that could help you configure Doom:
;; ;;
@@ -48,6 +49,18 @@
(setq-default tab-width 4) (setq-default tab-width 4)
;; -----------------------------------------------------------------------------
;; Emojify
;; -----------------------------------------------------------------------------
(use-package! emojify
:config
(when (member "Noto Color Emoji" (font-family-list))
(set-fontset-font
t 'emoji (font-spec :family "Noto Color Emoji") nil 'prepend))
(setq emojify-display-style 'image)
(setq emojify-emoji-styles '(unicode)))
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
;; Projectile ;; Projectile
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
@@ -74,14 +87,14 @@
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
;; LSP ;; LSP
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
(use-package lsp-mode ;; (use-package lsp-mode
:init ;; :init
:hook (;; ;; :hook (;;
(clojure-mode . lsp-deferred) ;; (clojure-mode . lsp-deferred)
(python-mode . lsp-deferred) ;; (python-mode . lsp-deferred)
;; if you want which-key integration ;; ;; if you want which-key integration
(lsp-mode . lsp-enable-which-key-integration)) ;; (lsp-mode . lsp-enable-which-key-integration))
:commands (lsp lsp-deferred)) ;; :commands (lsp lsp-deferred))
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
@@ -109,7 +122,7 @@
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
;; Web (HTML + CSS) ;; Web (HTML + CSS)
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
(use-package! lsp-tailwindcss) ;; (use-package! lsp-tailwindcss)
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
;; Org ;; Org

View File

@@ -30,7 +30,7 @@
doom ; what makes DOOM look the way it does doom ; what makes DOOM look the way it does
doom-dashboard ; a nifty splash screen for Emacs doom-dashboard ; a nifty splash screen for Emacs
;; doom-quit ; DOOM quit-message prompts when you quit Emacs ;; doom-quit ; DOOM quit-message prompts when you quit Emacs
;;(emoji +unicode) ; 🙂 (emoji +unicode) ; 🙂
;; fill-column ; a `fill-column' indicator ;; fill-column ; a `fill-column' indicator
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
;;hydra ;;hydra
@@ -94,7 +94,7 @@
(eval +overlay) ; run code, run (also, repls) (eval +overlay) ; run code, run (also, repls)
;;gist ; interacting with github gists ;;gist ; interacting with github gists
lookup ; navigate your code and its documentation lookup ; navigate your code and its documentation
lsp (lsp +eglot)
magit ; a git porcelain for Emacs magit ; a git porcelain for Emacs
;;make ; run make tasks from Emacs ;;make ; run make tasks from Emacs
;;pass ; password manager for nerds ;;pass ; password manager for nerds
@@ -155,8 +155,7 @@
;;plantuml ; diagrams for confusing people more ;;plantuml ; diagrams for confusing people more
;;purescript ; javascript, but functional ;;purescript ; javascript, but functional
(python (python
+lsp +lsp) ; beautiful is better than ugly
+pyright) ; beautiful is better than ugly
;;qt ; the 'cutest' gui framework ever ;;qt ; the 'cutest' gui framework ever
;;racket ; a DSL for DSLs ;;racket ; a DSL for DSLs
;;raku ; the artist formerly known as perl6 ;;raku ; the artist formerly known as perl6

View File

@@ -1,700 +0,0 @@
;;; doom-nano-dark-theme.el --- Dark theme for Doom Emacs based on N Λ N O -*- lexical-binding: t; -*-
;; Copyright (C) 2023 Ronan Arraes Jardim Chagas
;;
;; This package is the implementation of N Λ N O theme by Nicolas P. Rougier
;; <Nicolas.Rougier@inria.fr> using doom-themes framework.
;;
;; Author : Ronan Arraes Jardim Chagas
;; Created : February 2023
;; Keywords : mode-line, header-line
;; Package-Requires : ((emacs "28") (doom-themes "2"))
;; URL : https://github.com/ronisbr/doom-nano-themes/
;; Version : 0.2.3
;;
;;; Usage:
;; 1. Copy this file to `~/.doom.d/themes/' or `~/.config/doom/themes/`.
;; 2. Load the theme using `(setq doom-theme 'doom-nano-dark)'.
;;
;;; License:
;; Permission is hereby granted, free of charge, to any person obtaining
;; a copy of this software and associated documentation files (the
;; "Software"), to deal in the Software without restriction, including
;; without limitation the rights to use, copy, modify, merge, publish,
;; distribute, sublicense, and/or sell copies of the Software, and to
;; permit persons to whom the Software is furnished to do so, subject to
;; the following conditions:
;;
;; The above copyright notice and this permission notice shall be
;; included in all copies or substantial portions of the Software.
;;
;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
;; FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
;; THE USE OR OTHER DEALINGS IN THE SOFTWARE.
;;
;;; Commentary:
;; This package provides a dark theme for Doom Emacs based on N Λ N O.
;;; Code:
(defgroup doom-nano-dark-theme nil
"Options for the `doom-nano-dark' theme."
:group 'doom-themes)
(defcustom doom-nano-dark-theme-highlight-tab-whitespaces nil
"If non-nil, the tab whitespaces will be highlighted."
:group 'doom-nano-dark-theme
:type 'boolean)
(def-doom-theme doom-nano-dark
"A dark theme for Doom Emacs based on N Λ N O."
(;; Colors defined by N Λ N O theme. Some colors for the 256 and 16 modes were
;; obtained from the Doom Nord theme.
(nano-foreground '("#ECEFF4" "#ECECEC" "white"))
(nano-background '("#2E3440" "#2E2E2E" "black"))
(nano-highlight '("#3B4252" "#262626" "brightblack"))
(nano-subtle '("#434C5E" "#3F3F3F" "brightblack"))
(nano-faded '("#677691" "#5699AF" "cyan"))
(nano-salient '("#81A1C1" "#51AFEF" "brightblue"))
(nano-strong '("#FFFFFF" "#FFFFFF" "brightwhite"))
(nano-popout '("#D08770" "#DD8844" "brightred"))
(nano-critical '("#EBCB8B" "#ECBE7B" "yellow"))
;; Required colors for a Doom theme.
(bg nano-background)
(fg nano-foreground)
(bg-alt nano-highlight)
(fg-alt nano-foreground)
(base0 '("#191C25" "black" "black" ))
(base1 '("#242832" "#1E1E1E" "brightblack" ))
(base2 '("#2C333F" "#2E2E2E" "brightblack" ))
(base3 '("#373E4C" "#262626" "brightblack" ))
(base4 '("#434C5E" "#3F3F3F" "brightblack" ))
(base5 '("#4C566A" "#525252" "brightblack" ))
(base6 '("#9099AB" "#6B6B6B" "brightblack" ))
(base7 '("#D8DEE9" "#979797" "brightblack" ))
(base8 '("#F0F4FC" "#DFDFDF" "white" ))
(bright-blue '("#BBDEFB" "#BBDEFB" "brightblue"))
(bright-cyan '("#B2EBF2" "#B2EBF2" "brightcyan"))
(bright-green '("#C8E6C9" "#C8E6C9" "brightgreen"))
(bright-magenta '("#E1BEE7" "#E1BEE7" "brightmagenta"))
(bright-red '("#FFCDD2" "#FFCDD2" "brightred"))
(bright-white nano-background)
(bright-yellow '("#FFF9C4" "#FFF9C4" "brightyellow"))
(blue '("#42A5F5" "#42A5F5" "blue"))
(cyan '("#26C6DA" "#26C6DA" "cyan"))
(dark-blue '("#A0BCF8" "#A0BCF8" "blue"))
(dark-cyan '("#005478" "#005478" "cyan"))
(green '("#66BB6A" "#66BB6A" "green"))
(grey base4)
(magenta '("#AB47BC" "#AB47BC" "magenta"))
(orange '("#DA8548" "#DD8844" "brightred"))
(red '("#EF5350" "#EF5350" "red"))
(teal '("#4DB5BD" "#44B9B1" "brightgreen"))
(violet '("#B751B6" "#B751B6" "brightmagenta"))
(white nano-subtle)
(yellow '("#FFEE58" "#FFEE58" "yellow"))
(highlight nano-highlight)
(vertical-bar nano-background)
(selection nano-subtle)
(builtin nano-salient)
(comments nano-faded)
(doc-comments nano-faded)
(constants nano-salient)
(functions nano-strong)
(keywords nano-salient)
(methods nano-strong)
(operators nano-salient)
(type nano-salient)
(strings nano-faded)
(variables nano-salient)
(numbers nano-salient)
(region nano-subtle)
(error nano-critical)
(warning nano-popout)
(success nano-salient)
(vc-modified nano-popout)
(vc-added nano-salient)
(vc-deleted nano-faded))
(;; Overwrite faces set by Doom theme framework.
;; === Base =================================================================
(cursor :foreground bg :background fg)
(mouse :foreground fg :background bg)
;; === General ==============================================================
(buffer-menu-buffer :foreground nano-strong :weight 'bold)
(completions-annotations :foreground nano-faded)
(completions-common-part :foreground nano-strong :weight 'bold)
(completions-first-difference :foreground fg)
(fill-column-indicator :foreground nano-subtle)
(help-argument-name :foreground nano-faded)
(isearch :foreground nano-strong :weight 'bold)
(isearch-fail :foreground nano-faded)
(lazy-highlight :background nano-subtle)
(minibuffer-prompt :foreground nano-strong :weight 'bold)
(nobreak-hyphen :foreground nano-popout)
(nobreak-space :foreground nano-popout)
(read-multiple-choice-face :foreground nano-strong :weight 'bold)
(secondary-selection :background nano-subtle)
(show-paren-match :foreground nano-strong :weight 'bold)
(show-paren-mismatch :foreground nano-critical)
(tabulated-list-fake-header :foreground nano-strong :weight 'bold)
(tool-bar :foreground bg :background nano-faded)
(tooltip :background nano-subtle)
(trailing-whitespace :background nano-subtle)
(whitespace-tab :background
(if doom-nano-dark-theme-highlight-tab-whitespaces
nano-subtle
bg))
;; === Ace window ===========================================================
(aw-leading-char-face :foreground nano-popout)
(aw-background-face :foreground nano-faded :background bg)
;; === ANSI colors ==========================================================
(ansi-color-black :foreground fg)
(ansi-color-bold :foreground nano-strong :weight 'bold)
(ansi-color-bright-black :foreground nano-strong :weight 'bold)
(ansi-color-faint :foreground nano-faded)
(ansi-color-fast-blink :foreground nano-faded)
(ansi-color-slow-blink :foreground nano-faded)
(ansi-color-inverse :foreground bg :background fg)
(ansi-color-italic :foreground fg :slant 'italic)
(ansi-color-underline :foreground nano-faded)
(ansi-color-blue :foreground blue)
(ansi-color-bright-blue :foreground bright-blue)
(ansi-color-cyan :foreground cyan)
(ansi-color-bright-cyan :foreground bright-cyan)
(ansi-color-green :foreground green)
(ansi-color-bright-green :foreground bright-green)
(ansi-color-magenta :foreground magenta)
(ansi-color-bright-magenta :foreground bright-magenta)
(ansi-color-red :foreground red)
(ansi-color-bright-red :foreground bright-red)
(ansi-color-white :foreground white)
(ansi-color-bright-white :foreground bright-white)
(ansi-color-yellow :foreground yellow)
(ansi-color-bright-yellow :foreground bright-yellow)
;; === Buttons ==============================================================
(button :foreground nano-faded :background nano-highlight :box nil)
((custom-button &override) :foreground nano-faded :background nano-highlight :box nil)
((custom-button-unraised &override) :foreground nano-faded :background nano-highlight :box nil)
((custom-button-mouse &override) :foreground fg :background nano-subtle :box nil)
((custom-button-pressed &override) :foreground bg :background fg :box nil)
;; === Custom edit ==========================================================
(custom-changed :foreground nano-salient)
(custom-comment :foreground nano-faded)
(custom-comment-tag :foreground nano-faded)
(custom-face-tag :foreground nano-strong :weight 'bold)
(custom-group-subtitle :foreground nano-strong :weight 'bold)
(custom-group-tag :foreground nano-strong :weight 'bold)
(custom-group-tag-1 :foreground nano-strong :weight 'bold)
(custom-invalid :foreground nano-popout)
(custom-link :foreground nano-salient)
(custom-modified :foreground nano-salient)
(custom-state :foreground nano-salient)
(custom-variable-obsolete :foreground nano-faded)
(custom-variable-tag :foreground nano-strong :weight 'bold)
(custom-visibility :foreground nano-salient)
(widget-button :foreground nano-strong :weight 'bold)
(widget-field :background base2)
(widget-single-line-field :background base2)
;; === Company tooltip ======================================================
(company-scrollbar-bg :foreground bg :background nano-faded)
(company-scrollbar-fg :foreground bg :background fg)
(company-tooltip :background nano-subtle)
(company-tooltip-annotation :foreground fg)
(company-tooltip-annotation-selection :background nano-salient)
(company-tooltip-common :foreground nano-strong :weight 'bold)
(company-tooltip-common-selection :foreground bg :background nano-salient :weight 'normal)
(company-tooltip-mouse :foreground bg :background nano-faded)
(company-tooltip-scrollbar-thumb :foreground bg :background fg)
(company-tooltip-scrollbar-track :foreground bg :foreground nano-faded)
(company-tooltip-selection :foreground bg :background nano-salient)
;; === Diff =================================================================
(diff-header :foreground nano-faded)
(diff-file :foreground nano-strong :weight 'bold)
(diff-context :foreground fg)
(diff-removed :foreground nano-faded)
(diff-changed :foreground nano-popout)
(diff-added :foreground nano-salient)
(diff-refine-added :foreground nano-salient :weight 'bold)
(diff-refine-changed :foreground nano-popout)
(diff-refine-removed :foreground nano-faded :strike-through t)
;; === Doom NANO modeline ===================================================
(doom-nano-modeline-evil-emacs-state-face :foreground bg :background nano-faded)
(doom-nano-modeline-evil-insert-state-face :foreground bg :background nano-popout)
(doom-nano-modeline-evil-motion-state-face :foreground bg :background nano-faded)
(doom-nano-modeline-evil-normal-state-face :foreground bg :background nano-faded)
(doom-nano-modeline-evil-operator-state-face :foreground bg :background nano-faded)
(doom-nano-modeline-evil-replace-state-face :foreground bg :background nano-critical)
(doom-nano-modeline-evil-visual-state-face :foreground bg :background nano-salient)
(doom-nano-modeline-inactive-face :foreground nano-faded :background nano-highlight)
;; === Evil mode ============================================================
(evil-snipe-first-match-face :background nano-highlight :weight 'bold)
(evil-snipe-matches-face :background nano-subtle)
;; === Flycheck =============================================================
(flycheck-posframe-background-face :background nano-subtle)
;; === Font lock ============================================================
(font-lock-variable-name-face :foreground nano-salient :weight 'bold)
(font-lock-function-name-face :foreground nano-strong :weight 'bold)
;; === Info =================================================================
(Info-quoted :foreground nano-faded)
(info-header-node :foreground fg)
(info-index-match :foreground nano-salient)
(info-menu-header :foreground nano-strong :weight 'bold)
(info-menu-star :foreground fg)
(info-node :foreground nano-strong :weight 'bold)
(info-title-1 :foreground nano-strong :weight 'bold)
(info-title-2 :foreground nano-strong :weight 'bold)
(info-title-3 :foreground nano-strong :weight 'bold)
(info-title-4 :foreground nano-strong :weight 'bold)
;; === Helpful ==============================================================
(helpful-heading :foreground nano-strong :weight 'bold)
;; === Highlight indent guides ==============================================
(highlight-indent-guides-f)
;; === Hydra ================================================================
(hydra-face-red :foreground nano-popout :weight 'bold)
;; === Line numbers =========================================================
(line-number :foreground nano-faded)
(line-number-current-line :foreground fg)
(line-number-major-tick :foreground nano-faded)
(line-number-minor-tick :foreground nano-faded)
;; === LSP ==================================================================
(lsp-face-highlight-textual :background base1)
;; === Markdown =============================================================
(markdown-blockquote-face :foreground fg)
(markdown-bold-face :foreground nano-strong :weight 'bold)
(markdown-code-face :foreground fg)
(markdown-comment-face :foreground nano-faded)
(markdown-footnote-marker-face :foreground fg)
(markdown-footnote-text-face :foreground fg)
(markdown-gfm-checkbox-face :foreground fg)
(markdown-header-delimiter-face :foreground nano-faded)
(markdown-header-face :foreground nano-strong :weight 'bold)
(markdown-header-face-1 :foreground nano-strong :weight 'bold)
(markdown-header-face-2 :foreground nano-strong :weight 'bold)
(markdown-header-face-3 :foreground nano-strong :weight 'bold)
(markdown-header-face-4 :foreground nano-strong :weight 'bold)
(markdown-header-face-5 :foreground nano-strong :weight 'bold)
(markdown-header-face-6 :foreground nano-strong :weight 'bold)
(markdown-header-rule-face :foreground fg)
(markdown-highlight-face :foreground fg)
(markdown-hr-face :foreground fg)
(markdown-html-attr-name-face :foreground fg)
(markdown-html-attr-value-face :foreground fg)
(markdown-html-entity-face :foreground fg)
(markdown-html-tag-delimiter-face :foreground fg)
(markdown-html-tag-name-face :foreground fg)
(markdown-inline-code-face :foreground nano-popout)
(markdown-italic-face :foreground nano-faded :slant 'italic)
(markdown-language-info-face :foreground fg)
(markdown-language-keyword-face :foreground fg)
(markdown-line-break-face :foreground fg)
(markdown-link-face :foreground nano-salient)
(markdown-link-title-face :foreground fg)
(markdown-list-face :foreground nano-faded)
(markdown-markup-face :foreground nano-faded)
(markdown-math-face :foreground fg)
(markdown-metadata-key-face :foreground nano-faded)
(markdown-metadata-value-face :foreground nano-faded)
(markdown-missing-link-face :foreground fg)
(markdown-plain-url-face :foreground fg)
(markdown-pre-face :foreground nano-popout)
(markdown-reference-face :foreground nano-salient)
(markdown-strike-through-face :foreground nano-faded)
(markdown-table-face :foreground fg)
(markdown-url-face :foreground nano-salient)
;; === Magit ================================================================
(magit-bisect-bad :foreground fg)
(magit-bisect-good :foreground fg)
(magit-bisect-skip :foreground fg)
(magit-blame-date :foreground fg)
(magit-blame-dimmed :foreground fg)
(magit-blame-hash :foreground nano-faded)
(magit-blame-heading :background nano-subtle :weight 'bold)
(magit-blame-highlight :background highlight)
(magit-blame-margin :foreground fg)
(magit-blame-name :foreground fg)
(magit-blame-summary :foreground fg)
(magit-branch-current :foreground nano-salient :weight 'bold)
(magit-branch-local :foreground nano-salient)
(magit-branch-remote :foreground nano-salient)
(magit-branch-remote-head :foreground nano-salient)
(magit-branch-upstream :foreground nano-salient)
(magit-cherry-equivalent :foreground fg)
(magit-cherry-unmatched :foreground fg)
(magit-diff-added :foreground nano-salient :weight 'bold)
(magit-diff-added-highlight :foreground nano-salient :weight 'bold)
(magit-diff-base :foreground fg)
(magit-diff-base-highlight :background highlight)
(magit-diff-conflict-heading :background nano-subtle :weight 'bold)
(magit-diff-context :foreground nano-faded)
(magit-diff-context-highlight :foreground nano-faded)
(magit-diff-file-heading :foreground nano-strong :weight 'bold)
(magit-diff-file-heading-highlight :background highlight :weight 'bold)
(magit-diff-file-heading-selection :foreground fg)
(magit-diff-hunk-heading :background nano-subtle)
(magit-diff-hunk-heading-highlight :foreground fg)
(magit-diff-hunk-heading-selection :foreground fg)
(magit-diff-hunk-region :foreground fg)
(magit-diff-lines-boundary :foreground fg)
(magit-diff-lines-heading :background nano-subtle :weight 'bold)
(magit-diff-our :foreground fg)
(magit-diff-our-highlight :background highlight)
(magit-diff-removed :foreground nano-popout :weight 'bold)
(magit-diff-removed-highlight :foreground nano-popout :weight 'bold)
(magit-diff-revision-summary :foreground nano-popout)
(magit-diff-revision-summary-highlight :foreground fg)
(magit-diff-their :foreground fg)
(magit-diff-their-highlight :background highlight)
(magit-diff-whitespace-warning :background nano-subtle)
(magit-diffstat-added :foreground fg)
(magit-diffstat-removed :foreground fg)
(magit-dimmed :foreground nano-faded)
(magit-filename :foreground fg)
(magit-hash :foreground nano-faded)
(magit-head :foreground fg)
(magit-header-line :foreground fg)
(magit-header-line-key :foreground fg)
(magit-header-line-log-select :foreground fg)
(magit-keyword :foreground nano-salient)
(magit-keyword-squash :foreground nano-salient)
(magit-log-author :foreground fg)
(magit-log-date :foreground fg)
(magit-log-graph :foreground fg)
(magit-mode-line-process :foreground fg)
(magit-mode-line-process-error :foreground nano-critical)
(magit-process-ng :foreground fg)
(magit-process-ok :foreground fg)
(magit-reflog-amend :foreground fg)
(magit-reflog-checkout :foreground fg)
(magit-reflog-cherry-pick :foreground fg)
(magit-reflog-commit :foreground fg)
(magit-reflog-merge :foreground fg)
(magit-reflog-other :foreground fg)
(magit-reflog-rebase :foreground fg)
(magit-reflog-remote :foreground fg)
(magit-reflog-reset :foreground fg)
(magit-refname :foreground fg)
(magit-refname-pullreq :foreground fg)
(magit-refname-stash :foreground fg)
(magit-refname-wip :foreground fg)
(magit-section-heading :foreground nano-salient :weight 'bold)
(magit-section-heading-selection :foreground fg)
(magit-section-highlight :background highlight)
(magit-section-secondary-heading :foreground fg)
(magit-sequence-done :foreground fg)
(magit-sequence-drop :foreground fg)
(magit-sequence-exec :foreground fg)
(magit-sequence-head :foreground fg)
(magit-sequence-onto :foreground fg)
(magit-sequence-part :foreground fg)
(magit-sequence-pick :foreground fg)
(magit-sequence-stop :foreground fg)
(magit-signature-bad :foreground fg)
(magit-signature-error :foreground fg)
(magit-signature-expired :foreground fg)
(magit-signature-expired-key :foreground fg)
(magit-signature-good :foreground fg)
(magit-signature-revoked :foreground fg)
(magit-signature-untrusted :foreground fg)
(magit-tag :foreground nano-strong)
;; === Marginalia ===========================================================
(marginalia-archive :foreground nano-faded)
(marginalia-char :foreground nano-faded)
(marginalia-date :foreground nano-faded)
(marginalia-documentation :foreground nano-faded)
(marginalia-file-name :foreground nano-faded)
(marginalia-file-owner :foreground nano-faded)
(marginalia-file-priv-dir :foreground nano-faded)
(marginalia-file-priv-exec :foreground nano-faded)
(marginalia-file-priv-link :foreground nano-faded)
(marginalia-file-priv-no :foreground nano-faded)
(marginalia-file-priv-other :foreground nano-faded)
(marginalia-file-priv-rare :foreground nano-faded)
(marginalia-file-priv-read :foreground nano-faded)
(marginalia-file-priv-write :foreground nano-faded)
(marginalia-function :foreground nano-faded)
(marginalia-installed :foreground nano-faded)
(marginalia-key :foreground nano-faded)
(marginalia-lighter :foreground nano-faded)
(marginalia-list :foreground nano-faded)
(marginalia-mode :foreground nano-faded)
(marginalia-modified :foreground nano-faded)
(marginalia-null :foreground nano-faded)
(marginalia-number :foreground nano-faded)
(marginalia-off :foreground nano-faded)
(marginalia-on :foreground nano-faded)
(marginalia-size :foreground nano-faded)
(marginalia-string :foreground nano-faded)
(marginalia-symbol :foreground nano-faded)
(marginalia-true :foreground nano-faded)
(marginalia-type :foreground nano-faded)
(marginalia-value :foreground nano-faded)
(marginalia-version :foreground nano-faded)
;; === Message ==============================================================
(message-cited-text :foreground nano-faded)
(message-cited-text-1 :foreground nano-faded)
(message-cited-text-2 :foreground nano-faded)
(message-cited-text-3 :foreground nano-faded)
(message-cited-text-4 :foreground nano-faded)
(message-header-cc :foreground fg)
(message-header-name :foreground nano-strong :weight 'bold)
(message-header-newsgroups :foreground fg)
(message-header-other :foreground fg)
(message-header-subject :foreground nano-salient)
(message-header-to :foreground nano-salient)
(message-header-xheader :foreground fg)
(message-mml :foreground nano-popout)
(message-separator :foreground nano-faded)
;; === Modeline =============================================================
(mode-line :foreground fg :background nano-subtle)
(mode-line-inactive :foreground nano-strong :background nano-highlight)
(mode-line-emphasis :foreground nano-strong :weight 'bold)
;; === Packages =============================================================
(package-description :foreground fg)
(package-help-section-name :foreground fg)
(package-name :foreground nano-salient)
(package-status-avail-obso :foreground nano-faded)
(package-status-available :foreground fg)
(package-status-built-in :foreground nano-salient)
(package-status-dependency :foreground nano-salient)
(package-status-disabled :foreground nano-faded)
(package-status-external :foreground fg)
(package-status-held :foreground fg)
(package-status-incompat :foreground nano-faded)
(package-status-installed :foreground nano-salient)
(package-status-new :foreground fg)
(package-status-unsigned :foreground fg)
;; === Orderless ============================================================
(orderless-match-face-0 :foreground nano-salient :weight 'bold)
(orderless-match-face-1 :foreground nano-strong :weight 'bold)
(orderless-match-face-2 :foreground nano-strong :weight 'bold)
(orderless-match-face-3 :foreground nano-strong :weight 'bold)
;; === Org mode =============================================================
(org-archived :foreground nano-faded)
(org-block :background highlight)
(org-block-begin-line :background nano-subtle :foreground nano-faded)
(org-block-end-line :background nano-subtle :foreground nano-faded)
(org-checkbox :foreground nano-faded)
(org-checkbox-statistics-done :foreground nano-faded)
(org-checkbox-statistics-todo :foreground nano-faded)
(org-clock-overlay :foreground nano-faded)
(org-code :foreground nano-salient)
(org-column :foreground nano-faded)
(org-column-title :foreground nano-faded)
(org-date :foreground nano-faded)
(org-date-selected :foreground nano-popout)
(org-default :foreground nano-faded)
(org-document-info :foreground nano-faded)
(org-document-info-keyword :foreground nano-faded)
(org-document-title :foreground nano-faded)
(org-done :foreground nano-faded)
(org-drawer :foreground nano-faded)
(org-ellipsis :foreground nano-faded)
(org-footnote :foreground nano-faded)
(org-formula :foreground nano-faded)
(org-headline-done :foreground nano-faded)
(org-latex-and-related :foreground nano-faded)
(org-level-1 :foreground nano-strong :weight 'bold)
(org-level-2 :foreground nano-strong :weight 'bold)
(org-level-3 :foreground nano-strong :weight 'bold)
(org-level-4 :foreground nano-strong :weight 'bold)
(org-level-5 :foreground nano-strong :weight 'bold)
(org-level-6 :foreground nano-strong :weight 'bold)
(org-level-7 :foreground nano-strong :weight 'bold)
(org-level-8 :foreground nano-strong :weight 'bold)
(org-link :foreground nano-salient)
(org-list-dt :foreground nano-faded)
(org-macro :foreground nano-faded)
(org-meta-line :foreground nano-faded)
(org-mode-line-clock :foreground nano-faded)
(org-mode-line-clock-overrun :foreground nano-faded)
(org-priority :foreground nano-faded)
(org-property-value :foreground nano-faded)
(org-quote :foreground nano-faded)
(org-scheduled :foreground nano-faded)
(org-scheduled-previously :foreground nano-faded)
(org-scheduled-today :foreground nano-faded)
(org-sexp-date :foreground nano-faded)
(org-special-keyword :foreground nano-faded)
(org-table :foreground nano-faded)
(org-tag :foreground nano-popout)
(org-tag-group :foreground nano-faded)
(org-target :foreground nano-faded)
(org-time-grid :foreground nano-faded)
(org-todo :foreground nano-salient)
(org-upcoming-deadline :foreground nano-popout)
(org-verbatim :foreground nano-popout)
(org-verse :foreground nano-faded)
(org-warning :foreground nano-popout)
;; === Org-agenda ===========================================================
(org-agenda-calendar-event :foreground fg)
(org-agenda-calendar-sexp :foreground nano-salient)
(org-agenda-clocking :foreground nano-faded)
(org-agenda-column-dateline :foreground nano-faded)
(org-agenda-current-time :foreground nano-salient :weight 'bold)
(org-agenda-date :foreground nano-strong :weight 'bold)
(org-agenda-date-today :foreground nano-salient :weight 'bold)
(org-agenda-date-weekend :foreground nano-faded)
(org-agenda-diary :foreground nano-faded)
(org-agenda-dimmed-todo-face :foreground nano-faded)
(org-agenda-done :foreground nano-faded)
(org-agenda-filter-category :foreground nano-faded)
(org-agenda-filter-effort :foreground nano-faded)
(org-agenda-filter-regexp :foreground nano-faded)
(org-agenda-filter-tags :foreground nano-faded)
(org-agenda-property-face :foreground nano-faded)
(org-agenda-restriction-lock :foreground nano-faded)
(org-agenda-structure :foreground nano-strong :weight 'bold)
;; === Popup ================================================================
(popup-face :foreground highlight)
(popup-isearch-match :foreground nano-popout)
(popup-menu-face :foreground nano-subtle)
(popup-menu-mouse-face :foreground bg :background nano-faded)
(popup-menu-selection-face :foreground bg :background nano-salient)
(popup-menu-summary-face :foreground nano-faded)
(popup-scroll-bar-background-face :foreground nano-subtle)
(popup-scroll-bar-foreground-face :foreground nano-subtle)
(popup-summary-face :foreground nano-faded)
(popup-tip-face :foreground bg :background nano-popout)
;; === Semantics ============================================================
(match :foreground nano-popout)
(shadow :foreground nano-faded)
;; === smerge ===============================================================
(smerge-lower :background bg)
(smerge-markers :background nano-subtle :weight 'bold :distant-foreground 'unspecified)
(smerge-refined-added :foreground nano-salient :weight 'bold)
(smerge-refined-changed :foreground nano-popout)
(smerge-refined-removed :foreground nano-faded :strike-through t)
(smerge-upper :background bg)
;; === Structural ===========================================================
(bold :foreground nano-strong :weight 'bold)
(bold-italic :foreground nano-strong :weight 'bold)
(fixed-pitch :foreground fg)
(fixed-pitch-serif :foreground fg)
(fringe :foreground nano-faded)
(hl-line :background highlight)
(italic :foreground nano-faded :slant 'italic)
(link :foreground nano-salient)
(region :background nano-subtle :distant-foreground 'unspecified)
;; === Terminal =============================================================
(term-bold :foreground nano-strong :weight 'bold)
(term-color-black :foreground fg)
(term-color-blue :foreground blue :background bright-blue)
(term-color-cyan :foreground cyan :background bright-cyan)
(term-color-green :foreground green :background bright-green)
(term-color-magenta :foreground magenta :background bright-magenta)
(term-color-red :foreground red :background bright-red)
(term-color-yellow :foreground yellow :background bright-yellow)
;; === Transient ============================================================
;; Set only faces that influence Magit.
(transient-value :foreground fg)
;; === Vertico ==============================================================
(vertico-current :background nano-subtle :weight 'bold)
(vertico-group-separator :foreground nano-faded)
(vertico-group-title :foreground nano-faded)
(vertico-multiline :foreground nano-faded)
;;; === Vterm ===============================================================
(vterm-color-black :foreground fg :background fg)
(vterm-color-blue :foreground blue :background bright-blue)
(vterm-color-cyan :foreground cyan :background bright-cyan)
(vterm-color-green :foreground green :background bright-green)
(vterm-color-magenta :foreground magenta :background bright-magenta)
(vterm-color-red :foreground red :background bright-red)
(vterm-color-yellow :foreground yellow :background bright-yellow)
(vterm-color-white :foreground white :background white)
;; === Workspaces ===========================================================
(+workspace-tab-selected-face :foreground nano-salient :weight 'bold)
;; === Which key ============================================================
(which-key-command-description-face :foreground fg)
(which-key-key-face :foreground nano-strong :weight 'bold)
(which-key-key-group-description-face :foreground nano-salient)))
(provide 'doom-nano-dark-theme)
;;; doom-nano-dark-theme.el ends here

View File

@@ -2,5 +2,5 @@
hyprctl monitors -j | jq '.[] | select(.focused) | .activeWorkspace.id' hyprctl monitors -j | jq '.[] | select(.focused) | .activeWorkspace.id'
socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - |
stdbuf -o0 awk -F '>>|,' -e '/^workspace>>/ {print $2}' -e '/^focusedmon>>/ {print $3}' stdbuf -o0 awk -F '>>|,' -e '/^workspace>>/ {print $2}' -e '/^focusedmon>>/ {print $3}'

View File

@@ -6,6 +6,6 @@ spaces (){
} }
spaces spaces
socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do
spaces spaces
done done

View File

@@ -0,0 +1,72 @@
#!/usr/bin/env bash
# Dependencies:
# - amixer
# - pactl
# - jq
# - libnotify
ACTION=$1
get_brightness() {
brightnessctl | \
grep "Current brightness" | \
sed -e 's/^\s\+Current brightness: [0-9]\+ (\([0-9]\+\)%).*$/\1/'
}
get_kb_brightness() {
brightnessctl -d platform::kbd_backlight | \
grep "Current brightness" | \
sed -e 's/^\s\+Current brightness: [0-9]\+ (\([0-9]\+\)%).*$/\1/'
}
notify() {
notify-send "$1" "$2" -e -t 1500 -h string:x-canonical-private-synchronous:brightness
}
set_brightness() {
# Set the brightness
TARGET=$1
brightnessctl set $TARGET > /dev/null
# Send a notification
BRIGHTNESS=$(get_brightness)
ACTION=$([[ ${TARGET:0:1} == "+" ]] && echo "Brightness Up" || echo "Brightness Down")
BRIGHTNESS_ICON="󰃠"
TITLE=$(echo "$BRIGHTNESS_ICON $ACTION")
BODY=$(echo "$BRIGHTNESS%")
notify "$TITLE" "$BODY"
}
set_kb_brightness() {
# Set the brightness
TARGET=$1
brightnessctl -d platform::kbd_backlight set $TARGET > /dev/null
# Send a notification
BRIGHTNESS=$(get_kb_brightness)
ACTION=$([[ ${TARGET:0:1} == "+" ]] && echo "Keyboard brightness Up" || echo "Keyboard brightness Down")
BRIGHTNESS_ICON="󰃠"
TITLE=$(echo "$BRIGHTNESS_ICON $ACTION")
BODY=$(echo "$BRIGHTNESS%")
notify "$TITLE" "$BODY"
}
case $ACTION in
set)
set_brightness $2
;;
kb_set)
set_kb_brightness $2
;;
*)
echo "Unknown action"
exit 1
;;
esac

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env bash
set -e
# Dependencies:
# - slurp
# - grim
ACTION=$1
DATESTAMP=$(date +"%Y%m%d%H%M%S")
OUT_DIR="${HOME}/screenshots"
OUT_FILE="capture-${ACTION}-${DATESTAMP}.png"
case $ACTION in
region)
[[ ! -d "${OUT_DIR}" ]] && mkdir $OUT_DIR
slurp | grim -t png -g - "${OUT_DIR}/${OUT_FILE}"
;;
screen)
[[ ! -d "${OUT_DIR}" ]] && mkdir $OUT_DIR
grim -t png "${OUT_DIR}/${OUT_FILE}"
;;
*)
echo "Unknown action"
exit 1
;;
esac

View File

@@ -0,0 +1,79 @@
#!/usr/bin/env bash
# Dependencies:
# - amixer
# - pactl
# - jq
# - libnotify
ACTION=$1
get_volume_info() {
amixer sget Master | \
grep 'Left:' | \
sed -e 's/[^[]*\[\([0-9]*\)%\][^[]\[\(\w*\)\]/{"volume": \1, "muted": \2}/' \
-e 's/on/false/' \
-e 's/off/true/'
}
notify() {
notify-send "$1" "$2" -e -t 1500 -h string:x-canonical-private-synchronous:volume
}
mute() {
pactl set-sink-mute @DEFAULT_SINK@ toggle
VOLUME_INFO=$(get_volume_info)
VOLUME=$(echo $VOLUME_INFO | jq .volume)
if [ $(echo $VOLUME_INFO | jq .muted) == "true" ]
then
AUDIO_ICON="󰝟"
MUTED_STR="Muted"
BODY=""
else
AUDIO_ICON="󰕾"
MUTED_STR="Unmuted"
BODY=$(echo "$VOLUME%")
fi
TITLE=$(echo "$AUDIO_ICON $MUTED_STR")
notify "$TITLE" "$BODY"
}
set_volume() {
# Set the volume
TARGET=$1
pactl set-sink-volume @DEFAULT_SINK@ $TARGET
# Send a notification
VOLUME_INFO=$(get_volume_info)
ACTION=$([[ ${TARGET:0:1} == "+" ]] && echo "Volume Up" || echo "Volume Down")
VOLUME=$(echo $VOLUME_INFO | jq .volume)
if [ $(echo $VOLUME_INFO | jq .muted) == "true" ]
then
AUDIO_ICON="󰝟"
MUTED_STR="[muted]"
else
AUDIO_ICON="󰕾"
MUTED_STR=""
fi
TITLE=$(echo "$AUDIO_ICON $ACTION")
BODY=$(echo "$VOLUME% $MUTED_STR")
notify "$TITLE" "$BODY"
}
case $ACTION in
mute)
mute
;;
set)
set_volume $2
;;
*)
echo "Unknown action"
exit 1
;;
esac

70
config/kanata/kanata.kbd Normal file
View File

@@ -0,0 +1,70 @@
(defcfg
linux-dev-names-exclude (
"ZSA Technology Labs Voyager"
"ZSA Technology Labs Voyager Consumer Control"
"ZSA Technology Labs Voyager Keyboard"
)
)
(deflocalkeys-linux
ImpPt 99
º 41
' 12
¡ 13
` 26
+ 27
ñ 39
´ 40
ç 43
< 86
- 53
)
(defsrc
esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 ins ImpPt del home end pgup pgdn
º 1 2 3 4 5 6 7 8 9 0 ' ¡ Backspace nlck kp/ kp* kp-
tab q w e r t y u i o p ` + kp7 kp8 kp9
caps a s d f g h j k l ñ ´ ç ret kp4 kp5 kp6 kp+
lsft < z x c v b n m , . - rsft kp1 kp2 kp3
lctl lmet lalt spc ralt rctl up kp0 kp. kprt
left down rght
)
(defvar
tap-time 200
hold-time 250
)
(defalias
caps (tap-hold $tap-time $hold-time caps (layer-while-held layer1))
a (tap-hold $tap-time $hold-time a lalt)
s (tap-hold $tap-time $hold-time s lsft)
d (tap-hold $tap-time $hold-time d lmet)
f (tap-hold $tap-time $hold-time f lctl)
g (tap-hold $tap-time $hold-time g (layer-while-held layer1))
h (tap-hold $tap-time $hold-time h rctl)
j (tap-hold $tap-time $hold-time j rmet)
k (tap-hold $tap-time $hold-time k rsft)
l (tap-hold $tap-time $hold-time l ralt)
)
(deflayer base
esc mute vold volu - brdn brup - - - - - - ins ImpPt del home end pgup pgdn
º 1 2 3 4 5 6 7 8 9 0 ' ¡ Backspace nlck kp/ kp* kp-
tab q w e r t y u i o p ` + kp7 kp8 kp9
@caps @a @s @d @f @g @h @j @k @l ñ ´ ç ret kp4 kp5 kp6 kp+
lsft < z x c v b n m , . - rsft kp1 kp2 kp3
lctl lmet lalt spc ralt rctl up kp0 kp. kprt
left down rght
)
(deflayer layer1
_ f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ left down up right _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _
_ _ _
)

View File

@@ -1,6 +1,8 @@
{ {
"datacenter": "samfelag", "datacenter": "samfelag",
"bind_addr": "{{ GetInterfaceIP \"tailscale0\" }}",
"advertise": { "advertise": {
"http": "{{ GetInterfaceIP \"tailscale0\" }}", "http": "{{ GetInterfaceIP \"tailscale0\" }}",
"rpc": "{{ GetInterfaceIP \"tailscale0\" }}", "rpc": "{{ GetInterfaceIP \"tailscale0\" }}",

View File

@@ -31,4 +31,10 @@ client {
path = "/mnt/vatnajokull/nomad_volumes/gitea/data" path = "/mnt/vatnajokull/nomad_volumes/gitea/data"
read_only = false read_only = false
} }
# Folkugat
host_volume "folkugat" {
path = "/var/lib/nomad_volumes/folkugat"
read_only = false
}
} }

View File

@@ -4,7 +4,7 @@
* *
**/ **/
@import "../../theme.rasi" @import "~/.config/rofi/theme.rasi"
/*****----- Configuration -----*****/ /*****----- Configuration -----*****/
configuration { configuration {

View File

@@ -0,0 +1,147 @@
/**
*
* Author : Marc Sastre, based on Aditya Shakya (adi1090x, Github : @adi1090x)
*
**/
@import "~/.config/rofi/theme.rasi"
/*****----- Configuration -----*****/
configuration {
show-icons: false;
}
/*****----- Main Window -----*****/
window {
/* properties for window widget */
transparency: "real";
location: center;
anchor: center;
fullscreen: false;
width: 800px;
x-offset: 0px;
y-offset: 0px;
/* properties for all widgets */
enabled: true;
margin: 0px;
padding: 0px;
border: 2px solid;
border-radius: 15px;
border-color: @background-alt;
cursor: "default";
background-color: @background;
}
/*****----- Main Box -----*****/
mainbox {
enabled: true;
spacing: 15px;
margin: 0px;
padding: 30px;
border: 0px solid;
border-radius: 0px;
border-color: @selected;
background-color: transparent;
children: [ "inputbar", "listview" ];
}
message {
enabled: true;
margin: 0px;
padding: 10px;
border: 0px solid;
border-radius: 10px;
border-color: @selected;
background-color: @background-alt;
text-color: @foreground;
}
textbox {
background-color: inherit;
text-color: inherit;
vertical-align: 0.5;
horizontal-align: 0.0;
placeholder-color: @foreground;
blink: true;
markup: true;
}
/*****----- Inputbar -----*****/
inputbar {
enabled: true;
spacing: 10px;
padding: 15px;
border-radius: 10px;
background-color: @background-alt;
text-color: @foreground;
children: [ "textbox-prompt-colon", "entry" ];
}
textbox-prompt-colon {
enabled: true;
expand: false;
str: "";
background-color: inherit;
text-color: inherit;
}
entry {
enabled: true;
background-color: inherit;
text-color: inherit;
cursor: text;
}
/*****----- Listview -----*****/
listview {
enabled: true;
columns: 1;
lines: 5;
cycle: true;
dynamic: true;
scrollbar: false;
layout: vertical;
reverse: false;
fixed-height: true;
fixed-columns: true;
spacing: 5px;
margin: 0px;
padding: 0px;
border: 0px solid;
border-radius: 0px;
border-color: @selected;
background-color: transparent;
text-color: @foreground;
cursor: "default";
}
/*****----- Elements -----*****/
element {
enabled: true;
spacing: 0px;
margin: 0px;
padding: 12px;
border: 0px solid;
border-radius: 100%;
border-color: @selected;
background-color: transparent;
text-color: @foreground;
cursor: pointer;
}
element-text {
background-color: transparent;
text-color: inherit;
cursor: inherit;
vertical-align: 0.5;
horizontal-align: 0.0;
}
element selected.normal {
background-color: var(selected);
text-color: var(background);
}
element active {
background-color: var(active);
text-color: var(background);
}
element selected.active {
background-color: var(selected);
text-color: var(background);
}

View File

@@ -0,0 +1,12 @@
#!/usr/bin/env bash
# For debugging/development purposes
# PREFIX=projects/samfelag/config/
# Rofi command to pipe into, can add any options here
dir="$HOME/$PREFIX.config/rofi/menus/cliphist/"
theme='cliphist'
rofi_command="rofi -dmenu -i -theme ${dir}/${theme}.rasi"
cliphist list | $rofi_command | cliphist decode | wl-copy

View File

@@ -4,7 +4,7 @@
* *
**/ **/
@import "../../theme.rasi" @import "~/.config/rofi/theme.rasi"
/*****----- Configuration -----*****/ /*****----- Configuration -----*****/
configuration { configuration {

View File

@@ -4,7 +4,7 @@
* *
**/ **/
@import "../../theme.rasi" @import "~/.config/rofi/theme.rasi"
/*****----- Configuration -----*****/ /*****----- Configuration -----*****/
configuration { configuration {

View File

@@ -4,7 +4,7 @@
* *
**/ **/
@import "../../theme.rasi" @import "~/.config/rofi/theme.rasi"
/*****----- Configuration -----*****/ /*****----- Configuration -----*****/
configuration { configuration {

View File

@@ -81,8 +81,8 @@ case ${chosen} in
$lock) $lock)
if command -v i3lock-color; then if command -v i3lock-color; then
i3lock-color -c 808F85 && sleep 1 i3lock-color -c 808F85 && sleep 1
# elif command -v betterlockscreen; then elif command -v hyprlock; then
# betterlockscreen -l hyprlock
fi fi
;; ;;
$suspend) $suspend)

View File

@@ -4,7 +4,7 @@
* *
**/ **/
@import "../../theme.rasi" @import "~/.config/rofi/theme.rasi"
/*****----- Configuration -----*****/ /*****----- Configuration -----*****/
configuration { configuration {

View File

@@ -1,5 +1,5 @@
[[ -x "$(command -v eza)" ]] && { [[ -x "$(command -v eza)" ]] && {
alias ll="eza --group-directories-first --color=auto --git -la" alias ll="eza --group-directories-first --color=auto --icons=auto --git -la"
} || { } || {
alias ll="ls -alh --color=always --group-directories-first" alias ll="ls -alh --color=always --group-directories-first"
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
description = "Development flake for this python project"; description = "Development flake for this python project";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
inputs.flake-utils.url = "github:numtide/flake-utils"; inputs.flake-utils.url = "github:numtide/flake-utils";
outputs = { self, nixpkgs, flake-utils }: outputs = { self, nixpkgs, flake-utils }:
@@ -8,8 +8,8 @@
pkgs = nixpkgs.legacyPackages.${system}; pkgs = nixpkgs.legacyPackages.${system};
python = pkgs.python39; python = pkgs.python312;
pythonPackages = pkgs.python39Packages; pythonPackages = pkgs.python312Packages;
projectDependencies = with pythonPackages; [ projectDependencies = with pythonPackages; [
]; ];

View File

@@ -0,0 +1,8 @@
[package]
name = ""
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

62
data/nomad/folkugat.nomad Normal file
View File

@@ -0,0 +1,62 @@
job "folkugat" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "folkugat" {
count = 1
restart {
attempts = 5
delay = "15s"
}
network {
port "http" {
to = 80
}
}
# Volumes
volume "folkugat" {
type = "host"
read_only = false
source = "folkugat"
}
# FOLKUGAT WEB
task "folkugat" {
driver = "docker"
env {
JWT_SECRET = "12345"
ADMIN_PASSWORD = "banshee"
URL_SCHEME = "https"
DB_DIR = "/folkugat/db"
}
config {
image = "marc.sastre.cat/folkugat-web:latest"
ports = ["http"]
}
volume_mount {
volume = "folkugat"
destination = "/folkugat/db"
read_only = false
}
resources {
cpu = 100
memory = 512
}
service {
name = "folkugat"
port = "http"
}
}
}
}

View File

@@ -38,7 +38,7 @@ job "gitea" {
resources { resources {
cpu = 1000 cpu = 1000
memory = 256 memory = 400
} }
service { service {

View File

@@ -0,0 +1,46 @@
job "cua-quinto" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "cua-quinto" {
count = 1
restart {
attempts = 5
delay = "15s"
}
network {
port "http" {
to = 80
}
}
# CUA-QUINTO APP
task "cua-quinto" {
driver = "docker"
env {
API_PREFIX = "/cua-quinto"
API_SCHEME = "https"
}
config {
image = "marc.sastre.cat/quinto-cua:latest"
ports = ["http"]
}
resources {
cpu = 50
memory = 64
}
service {
name = "cua-quinto"
port = "http"
}
}
}
}

View File

@@ -1,6 +1,6 @@
#+title: Consul #+title: Consul
* Server setup * Server setup
** Create a server keypair ** Create a server keypair <<create_keypair>>
Decrypt the CA (from the agenix secrets) Decrypt the CA (from the agenix secrets)
#+begin_src bash #+begin_src bash
agenix -i ~/.ssh/id_reykjavik -d consul.d/consul-agent-ca.pem.age > ~/tmp/consul-agent-ca.pem agenix -i ~/.ssh/id_reykjavik -d consul.d/consul-agent-ca.pem.age > ~/tmp/consul-agent-ca.pem
@@ -78,3 +78,10 @@ JSON config:
} }
} }
#+end_src #+end_src
* Renew expired certificates
** Find the expired certificate
#+begin_src
openssl x509 -in /etc/consul.d/certs/samfelag-server-consul.pem -enddate -noout
#+end_src
Follow the steps described in [[create_keypair][Create a server keypair]].

View File

@@ -1,4 +1,18 @@
#+title: Hosts #+title: Hosts
* Setting up a new vult host
** Generate a password for your host
#+begin_src bash
pass generate samfelag/<host>
#+end_src
** Change the password in the host
Enter into the host via the vultr dashboard "View Console"
#+begin_src bash
passwd
#+end_src
** You can now ssh into the host with the new password
#+begin_src bash
ssh nixos@<host_public_ip>
#+end_src
* Setting up a new host * Setting up a new host
** Generate a host ssh key pair ** Generate a host ssh key pair
Generate the key pair (we'll use the name `id_<host>`) Generate the key pair (we'll use the name `id_<host>`)

View File

@@ -105,7 +105,7 @@ cp ~/.ssh/id_<hostname> /mnt/home/marc/.ssh/id_<hostname>
* Initialization * Initialization
Steps after reboot Steps after reboot
** Set up the user ** Set up the user
You'll set the root password during the installation. You can then reboot and use the installed OS. First thing you'll have to do is log in as root and set the password for your user: You'll set the root password during the installation. You can then reboot and use the installed OS. First thing you'll have to do is log in as root (via vultr dashboard) and set the password for your user:
#+BEGIN_SRC bash #+BEGIN_SRC bash
passwd marc passwd marc
#+END_SRC #+END_SRC

662
flake.lock generated
View File

@@ -10,11 +10,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1707830867, "lastModified": 1723293904,
"narHash": "sha256-PAdwm5QqdlwIqGrfzzvzZubM+FXtilekQ/FA0cI49/o=", "narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=",
"owner": "ryantm", "owner": "ryantm",
"repo": "agenix", "repo": "agenix",
"rev": "8cb01a0e717311680e0cbca06a76cbceba6f3ed6", "rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -23,6 +23,39 @@
"type": "github" "type": "github"
} }
}, },
"aquamarine": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1747864449,
"narHash": "sha256-PIjVAWghZhr3L0EFM2UObhX84UQxIACbON0IC0zzSKA=",
"owner": "hyprwm",
"repo": "aquamarine",
"rev": "389372c5f4dc1ac0e7645ed29a35fd6d71672ef5",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "aquamarine",
"type": "github"
}
},
"base16-schemes": { "base16-schemes": {
"flake": false, "flake": false,
"locked": { "locked": {
@@ -41,16 +74,15 @@
}, },
"emacs-overlay": { "emacs-overlay": {
"inputs": { "inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"nixpkgs-stable": "nixpkgs-stable" "nixpkgs-stable": "nixpkgs-stable"
}, },
"locked": { "locked": {
"lastModified": 1708275876, "lastModified": 1733127808,
"narHash": "sha256-GzC+0fJhU/0TnFyVMe309ffmRIyRiMzqQ6zDcmn5s9s=", "narHash": "sha256-UJUFsa1jmYSgAhrii1HVEl//ggT3Nzaw6kDN6TnkGXM=",
"owner": "nix-community", "owner": "nix-community",
"repo": "emacs-overlay", "repo": "emacs-overlay",
"rev": "6c7eca7e41d5d47a0777b045a125a6f076b70c34", "rev": "51d6aafb5e3bbf10a29bd8ff417b617e35b14d0e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -59,21 +91,41 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils": { "flake-compat": {
"inputs": { "flake": false,
"systems": "systems_2"
},
"locked": { "locked": {
"lastModified": 1705309234, "lastModified": 1696426674,
"narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "numtide", "owner": "edolstra",
"repo": "flake-utils", "repo": "flake-compat",
"rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "numtide", "owner": "edolstra",
"repo": "flake-utils", "repo": "flake-compat",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"hyprland",
"pre-commit-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github" "type": "github"
} }
}, },
@@ -105,20 +157,371 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1706981411, "lastModified": 1747556831,
"narHash": "sha256-cLbLPTL1CDmETVh4p0nQtvoF+FSEjsnJTFpTxhXywhQ=", "narHash": "sha256-Qb84nbYFFk0DzFeqVoHltS2RodAYY5/HZQKE8WnBDsc=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "652fda4ca6dafeb090943422c34ae9145787af37", "rev": "d0bbd221482c2713cccb80220f3c9d16a6e20a33",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "release-23.11", "ref": "release-25.05",
"repo": "home-manager", "repo": "home-manager",
"type": "github" "type": "github"
} }
}, },
"hy3": {
"inputs": {
"hyprland": [
"hyprland"
]
},
"locked": {
"lastModified": 1747077256,
"narHash": "sha256-ryaXKevnISRiJb93QIAv7tGc6ZJqSkwETKm4oGh8HWI=",
"owner": "outfoxxed",
"repo": "hy3",
"rev": "567dc9dd20e15d95a56a81c516a70dba30bc2c9c",
"type": "github"
},
"original": {
"owner": "outfoxxed",
"repo": "hy3",
"type": "github"
}
},
"hyprcursor": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1745948457,
"narHash": "sha256-lzTV10FJTCGNtMdgW5YAhCAqezeAzKOd/97HbQK8GTU=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "ac903e80b33ba6a88df83d02232483d99f327573",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprcursor",
"type": "github"
}
},
"hyprcursor-rose-pine": {
"inputs": {
"hyprlang": "hyprlang",
"nixpkgs": "nixpkgs_2",
"utils": "utils"
},
"locked": {
"lastModified": 1718180692,
"narHash": "sha256-J5IYvKcdGRL/sBuST5WaoESEIl7KPv8aJK8aLY6C91E=",
"owner": "ndom91",
"repo": "rose-pine-hyprcursor",
"rev": "40ce26cb29206722ff73839ead0d871d94751e90",
"type": "github"
},
"original": {
"owner": "ndom91",
"repo": "rose-pine-hyprcursor",
"type": "github"
}
},
"hyprgraphics": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1745015490,
"narHash": "sha256-apEJ9zoSzmslhJ2vOKFcXTMZLUFYzh1ghfB6Rbw3Low=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "60754910946b4e2dc1377b967b7156cb989c5873",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprgraphics",
"type": "github"
}
},
"hyprland": {
"inputs": {
"aquamarine": "aquamarine",
"hyprcursor": "hyprcursor",
"hyprgraphics": "hyprgraphics",
"hyprland-protocols": "hyprland-protocols",
"hyprland-qtutils": "hyprland-qtutils",
"hyprlang": "hyprlang_2",
"hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner",
"nixpkgs": "nixpkgs_3",
"pre-commit-hooks": "pre-commit-hooks",
"systems": "systems_4",
"xdph": "xdph"
},
"locked": {
"lastModified": 1748036495,
"narHash": "sha256-kYyrhoxu8pZ/YHd2Yy2VNaRGeqydOh1OTayvknhweGg=",
"owner": "hyprwm",
"repo": "Hyprland",
"rev": "81cd526f923f4a9074bbfef59b4c7e9f3350c349",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "Hyprland",
"type": "github"
}
},
"hyprland-plugins": {
"inputs": {
"hyprland": [
"hyprland"
],
"nixpkgs": [
"hyprland-plugins",
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland-plugins",
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1748089895,
"narHash": "sha256-XS2inFEyCsA91E2yRUlylHN7DUBwbLpqX1og4JDSXoE=",
"owner": "hyprwm",
"repo": "hyprland-plugins",
"rev": "c04dee3d0cd92423a2b970614ec4b423cf5a3f9c",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-plugins",
"type": "github"
}
},
"hyprland-protocols": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1743714874,
"narHash": "sha256-yt8F7NhMFCFHUHy/lNjH/pjZyIDFNk52Q4tivQ31WFo=",
"owner": "hyprwm",
"repo": "hyprland-protocols",
"rev": "3a5c2bda1c1a4e55cc1330c782547695a93f05b2",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-protocols",
"type": "github"
}
},
"hyprland-qt-support": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprland-qtutils",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"hyprland-qtutils",
"nixpkgs"
],
"systems": [
"hyprland",
"hyprland-qtutils",
"systems"
]
},
"locked": {
"lastModified": 1737634706,
"narHash": "sha256-nGCibkfsXz7ARx5R+SnisRtMq21IQIhazp6viBU8I/A=",
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"rev": "8810df502cdee755993cb803eba7b23f189db795",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"type": "github"
}
},
"hyprland-qtutils": {
"inputs": {
"hyprland-qt-support": "hyprland-qt-support",
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprland-qtutils",
"hyprlang",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1745951494,
"narHash": "sha256-2dModE32doiyQMmd6EDAQeZnz+5LOs6KXyE0qX76WIg=",
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"rev": "4be1d324faf8d6e82c2be9f8510d299984dfdd2e",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"type": "github"
}
},
"hyprlang": {
"inputs": {
"nixpkgs": [
"hyprcursor-rose-pine",
"nixpkgs"
],
"systems": "systems_2"
},
"locked": {
"lastModified": 1709914708,
"narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlang",
"type": "github"
}
},
"hyprlang_2": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1747484975,
"narHash": "sha256-+LAQ81HBwG0lwshHlWe0kfWg4KcChIPpnwtnwqmnoEU=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "163c83b3db48a17c113729c220a60b94596c9291",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlang",
"type": "github"
}
},
"hyprutils": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1746635225,
"narHash": "sha256-W9G9bb0zRYDBRseHbVez0J8qVpD5QbizX67H/vsudhM=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "674ea57373f08b7609ce93baff131117a0dfe70d",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprutils",
"type": "github"
}
},
"hyprwayland-scanner": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1747584298,
"narHash": "sha256-PH9qZqWLHvSBQiUnA0NzAyQA3tu2no2z8kz0ZeHWj4w=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "e511882b9c2e1d7a75d45d8fddd2160daeafcbc3",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"type": "github"
}
},
"nix-colors": { "nix-colors": {
"inputs": { "inputs": {
"base16-schemes": "base16-schemes", "base16-schemes": "base16-schemes",
@@ -140,11 +543,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1708118438, "lastModified": 1733015953,
"narHash": "sha256-kk9/0nuVgA220FcqH/D2xaN6uGyHp/zoxPNUmPCMmEE=", "narHash": "sha256-t4BBVpwG9B4hLgc6GUBuj3cjU7lP/PJfpTHuSqE+crk=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "5863c27340ba4de8f83e7e3c023b9599c3cb3c80", "rev": "ac35b104800bff9028425fec3b6e8a41de2bbfff",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -171,43 +574,91 @@
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1708161998, "lastModified": 1732981179,
"narHash": "sha256-6KnemmUorCvlcAvGziFosAVkrlWZGIc6UNT9GUYr0jQ=", "narHash": "sha256-F7thesZPvAMSwjRu0K8uFshTk3ZZSNAsXTIFvXBT+34=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "84d981bae8b5e783b3b548de505b22880559515f", "rev": "62c435d93bf046a5396f3016472e8f7c8e2aed65",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixos-23.11", "ref": "nixos-24.11",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1708161998, "lastModified": 1710272261,
"narHash": "sha256-6KnemmUorCvlcAvGziFosAVkrlWZGIc6UNT9GUYr0jQ=", "narHash": "sha256-g0bDwXFmTE7uGDOs9HcJsfLFhH7fOsASbAuOzDC+fhQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0ad13a6833440b8e238947e47bea7f11071dc2b2",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1747744144,
"narHash": "sha256-W7lqHp0qZiENCDwUZ5EX/lNhxjMdNapFnbErcbnP11Q=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "2795c506fe8fb7b03c36ccb51f75b6df0ab2553f",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1747953325,
"narHash": "sha256-y2ZtlIlNTuVJUZCqzZAhIw5rrKP4DOSklev6c8PyCkQ=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "84d981bae8b5e783b3b548de505b22880559515f", "rev": "55d1f923c480dadce40f5231feb472e81b0bab48",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "nixos",
"ref": "nixos-23.11", "ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_5": {
"locked": {
"lastModified": 1727348695,
"narHash": "sha256-J+PeFKSDV+pHL7ukkfpVzCOO7mBSrrpJ3svwBFABbhI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "1925c603f17fc89f4c8f6bf6f631a802ad85d784",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nur": { "nur": {
"locked": { "locked": {
"lastModified": 1708293570, "lastModified": 1733136078,
"narHash": "sha256-S8qH9mIUma122q9Wboh+5u+dJmZC2lnnG4MkOGteFwo=", "narHash": "sha256-F+gLv1YTOfP5BP0kHPEOLtrJWL1s3XGoaBhfwDsndNw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NUR", "repo": "NUR",
"rev": "7ccf5f725834f28e908780ffdacc744319f2834b", "rev": "aadc32a2305cd303d1866be1d500ad6f7b344b82",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -216,14 +667,42 @@
"type": "github" "type": "github"
} }
}, },
"pre-commit-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"gitignore": "gitignore",
"nixpkgs": [
"hyprland",
"nixpkgs"
]
},
"locked": {
"lastModified": 1747372754,
"narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"root": { "root": {
"inputs": { "inputs": {
"agenix": "agenix", "agenix": "agenix",
"emacs-overlay": "emacs-overlay", "emacs-overlay": "emacs-overlay",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"hy3": "hy3",
"hyprcursor-rose-pine": "hyprcursor-rose-pine",
"hyprland": "hyprland",
"hyprland-plugins": "hyprland-plugins",
"nix-colors": "nix-colors", "nix-colors": "nix-colors",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_4",
"nur": "nur" "nur": "nur",
"zen-browser": "zen-browser"
} }
}, },
"systems": { "systems": {
@@ -242,6 +721,21 @@
} }
}, },
"systems_2": { "systems_2": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_3": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@@ -255,6 +749,98 @@
"repo": "default", "repo": "default",
"type": "github" "type": "github"
} }
},
"systems_4": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"utils": {
"inputs": {
"systems": "systems_3"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"xdph": {
"inputs": {
"hyprland-protocols": [
"hyprland",
"hyprland-protocols"
],
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1745871725,
"narHash": "sha256-M24SNc2flblWGXFkGQfqSlEOzAGZnMc9QG3GH4K/KbE=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "76bbf1a6b1378e4ab5230bad00ad04bc287c969e",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"type": "github"
}
},
"zen-browser": {
"inputs": {
"nixpkgs": "nixpkgs_5"
},
"locked": {
"lastModified": 1739222645,
"narHash": "sha256-6FsTAjrO0TN5+gVxx3hmWqEJWs1sJ1p3E8DKWHdlN6M=",
"owner": "youwen5",
"repo": "zen-browser-flake",
"rev": "7e60ade066a54797b376ebaf554bc2efa255ff8a",
"type": "github"
},
"original": {
"owner": "youwen5",
"repo": "zen-browser-flake",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

View File

@@ -4,10 +4,10 @@
inputs = { inputs = {
# - Nixpkgs ---------------------------------- # - Nixpkgs ----------------------------------
nixpkgs.url = "github:nixos/nixpkgs/nixos-23.11"; nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
# - Home Manager ----------------------------- # - Home Manager -----------------------------
home-manager.url = "github:nix-community/home-manager/release-23.11"; home-manager.url = "github:nix-community/home-manager/release-25.05";
home-manager.inputs.nixpkgs.follows = "nixpkgs"; home-manager.inputs.nixpkgs.follows = "nixpkgs";
# - Agenix ----------------------------------- # - Agenix -----------------------------------
@@ -24,6 +24,22 @@
# - Themeing --------------------------------- # - Themeing ---------------------------------
nix-colors.url = "github:misterio77/nix-colors"; nix-colors.url = "github:misterio77/nix-colors";
# - Hyprland ---------------------------------
hyprland.url = "github:hyprwm/Hyprland";
hyprland-plugins = {
url = "github:hyprwm/hyprland-plugins";
inputs.hyprland.follows = "hyprland";
};
hy3 = {
url = "github:outfoxxed/hy3";
inputs.hyprland.follows = "hyprland";
};
hyprcursor-rose-pine.url = "github:ndom91/rose-pine-hyprcursor";
# - More stuff -------------------------------
zen-browser.url = "github:youwen5/zen-browser-flake";
}; };
outputs = inputs @ { self, nixpkgs, home-manager, ... }: outputs = inputs @ { self, nixpkgs, home-manager, ... }:

55
hosts/quinto/default.nix Normal file
View File

@@ -0,0 +1,55 @@
{ config, pkgs, lib, inputs, ... }:
with lib;
{
imports = [
./hardware.nix
./secrets.nix
];
# - Basic --------------------------------------
user.name = "marc";
user.shell = pkgs.zsh;
networking = {
hostName = "quinto";
firewall = {
enable = false;
allowedUDPPorts = [
];
};
};
# - Bootloader ---------------------------------
boot.loader.grub = {
enable = true;
device = "/dev/vda";
};
# - Agenix ---------------------------------
age.identityPaths = [
"/home/marc/.ssh/id_ed25519"
];
# - Modules ------------------------------------
samfelag.modules = {
# - Common -----------------------------------
# See modules/common.nix for common packages installed
# - System -----------------------------------
system.utils.enable = true;
system.ssh.enable = true;
# - Server ----------------------------------
# - Editors and development ------------------
dev.git.userName = "marc";
dev.git.userEmail = "marc@sastre.cat";
dev.docker.enable = true;
dev.docker.users = ["marc"];
};
}

35
hosts/quinto/hardware.nix Normal file
View File

@@ -0,0 +1,35 @@
{ config, lib, pkgs, modulesPath, ... }:
{
imports = [ ];
boot = {
initrd = {
availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "sr_mod" "virtio_blk" ];
kernelModules = [ ];
};
kernelModules = [ ];
extraModulePackages = [ ];
};
fileSystems = {
"/" = {
device = "/dev/disk/by-label/nixos";
fsType = "ext4";
};
};
swapDevices = [
{ device = "/dev/disk/by-label/swap"; }
];
networking = {
useDHCP = lib.mkDefault true;
interfaces = {
ens3.useDHCP = lib.mkDefault true;
};
};
virtualisation.hypervGuest.enable = true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

2
hosts/quinto/quinto.org Normal file
View File

@@ -0,0 +1,2 @@
* Quinto
Servidor a Vultr per a la cua del quinto

6
hosts/quinto/secrets.nix Normal file
View File

@@ -0,0 +1,6 @@
{ ... }:
{
age.secrets = {
};
}

View File

@@ -3,7 +3,7 @@
with lib; with lib;
let let
nix-colors-lib = inputs.nix-colors.lib-contrib { inherit pkgs; }; nix-colors-lib = inputs.nix-colors.lib-contrib { inherit pkgs; };
wallpaper = ../../data/wallpapers/wallhaven/muntanya.png; wallpaper = ../../data/wallpapers/globus.jpg;
in in
{ {
imports = [ imports = [
@@ -65,12 +65,24 @@ in
server.vatnajokull.enable = true; server.vatnajokull.enable = true;
# - Keyboards -
system.kanata.enable = true;
system.devices.voyager.enable = true;
system.input = {
japanese.enable = true;
greek.enable = true;
};
# - Desktop ---------------------------------- # - Desktop ----------------------------------
desktop = { desktop = {
inherit wallpaper; inherit wallpaper;
enable = true;
laptop = true; # Use Γραφείο (custom) desktop environment
hyprland.enable = true; grapheio.enable = true;
# # Add greek keyboard layout -- currently commented as fcitx5 adds greek support
# wm.hyprland.kb_layout = "es,gr";
}; };
# - Editors and development ------------------ # - Editors and development ------------------
@@ -84,9 +96,11 @@ in
dev.docker.users = ["marc"]; dev.docker.users = ["marc"];
# - Other apps ------------------------------- # - Other apps -------------------------------
app.anki.enable = true;
app.spotify.enable = true; app.spotify.enable = true;
app.skype.enable = true; # app.skype.enable = true;
app.nextcloud.enable = true; app.nextcloud.enable = true;
app.yazi.enable = true;
# - Gaming ----------------------------------- # - Gaming -----------------------------------
gaming.lutris.enable = true; gaming.lutris.enable = true;

View File

@@ -10,6 +10,7 @@
}; };
kernelModules = [ "kvm-intel" ]; kernelModules = [ "kvm-intel" ];
extraModulePackages = [ ]; extraModulePackages = [ ];
supportedFilesystems = [ "ntfs" ];
}; };
fileSystems = { fileSystems = {

View File

@@ -2,8 +2,8 @@
let let
cfg = config.samfelag.modules.app.alacritty; cfg = config.samfelag.modules.app.alacritty;
i3Cfg = config.samfelag.modules.desktop.i3; i3Cfg = config.samfelag.modules.desktop.wm.i3;
hyprCfg = config.samfelag.modules.desktop.hyprland; hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in in
{ {
options.samfelag.modules.app.alacritty = { options.samfelag.modules.app.alacritty = {
@@ -18,47 +18,51 @@ in
fonts.packages = with pkgs; [ fonts.packages = with pkgs; [
iosevka iosevka
(nerdfonts.override { fonts = [ "Iosevka" ]; }) pkgs.nerd-fonts.iosevka
]; ];
hm.xdg.configFile."alacritty/alacritty.yml".source = ../../config/alacritty/alacritty.yml; hm.xdg.configFile."alacritty/alacritty.toml".source = ../../config/alacritty/alacritty.toml;
# - Themeing --------------------------------- # - Themeing ---------------------------------
hm.xdg.configFile."alacritty/theme.yml".text = '' hm.xdg.configFile."alacritty/theme.toml".text = ''
colors: [colors]
primary: draw_bold_text_with_bright_colors = false
background: '0x${config.colorScheme.palette.base00}'
foreground: '0x${config.colorScheme.palette.base05}' [colors.primary]
cursor: background = "0x${config.colorScheme.palette.base00}"
text: '0x${config.colorScheme.palette.base00}' foreground = "0x${config.colorScheme.palette.base05}"
cursor: '0x${config.colorScheme.palette.base05}'
normal: [colors.cursor]
black: '0x${config.colorScheme.palette.base00}' text = "0x${config.colorScheme.palette.base00}"
red: '0x${config.colorScheme.palette.base08}' cursor = "0x${config.colorScheme.palette.base05}"
green: '0x${config.colorScheme.palette.base0B}'
yellow: '0x${config.colorScheme.palette.base0A}' [colors.normal]
blue: '0x${config.colorScheme.palette.base0D}' black = "0x${config.colorScheme.palette.base00}"
magenta: '0x${config.colorScheme.palette.base0E}' red = "0x${config.colorScheme.palette.base08}"
cyan: '0x${config.colorScheme.palette.base0C}' green = "0x${config.colorScheme.palette.base0B}"
white: '0x${config.colorScheme.palette.base05}' yellow = "0x${config.colorScheme.palette.base0A}"
bright: blue = "0x${config.colorScheme.palette.base0D}"
black: '0x${config.colorScheme.palette.base03}' magenta = "0x${config.colorScheme.palette.base0E}"
red: '0x${config.colorScheme.palette.base09}' cyan = "0x${config.colorScheme.palette.base0C}"
green: '0x${config.colorScheme.palette.base01}' white = "0x${config.colorScheme.palette.base05}"
yellow: '0x${config.colorScheme.palette.base02}'
blue: '0x${config.colorScheme.palette.base04}' [colors.bright]
magenta: '0x${config.colorScheme.palette.base06}' black = "0x${config.colorScheme.palette.base03}"
cyan: '0x${config.colorScheme.palette.base0F}' red = "0x${config.colorScheme.palette.base09}"
white: '0x${config.colorScheme.palette.base07}' green = "0x${config.colorScheme.palette.base01}"
draw_bold_text_with_bright_colors: false yellow = "0x${config.colorScheme.palette.base02}"
blue = "0x${config.colorScheme.palette.base04}"
magenta = "0x${config.colorScheme.palette.base06}"
cyan = "0x${config.colorScheme.palette.base0F}"
white = "0x${config.colorScheme.palette.base07}"
''; '';
samfelag.modules.desktop.i3.extraKeybindings = lib.mkIf i3Cfg.enable { samfelag.modules.desktop.wm.i3.extraKeybindings = lib.mkIf i3Cfg.enable {
"${i3Cfg.mod}+Return" = "exec ${pkgs.alacritty}/bin/alacritty"; "${i3Cfg.mod}+Return" = "exec ${pkgs.alacritty}/bin/alacritty";
"${i3Cfg.mod}+Shift+Return" = "exec ${pkgs.alacritty}/bin/alacritty -t floating-term"; "${i3Cfg.mod}+Shift+Return" = "exec ${pkgs.alacritty}/bin/alacritty -t floating-term";
}; };
samfelag.modules.desktop.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [ samfelag.modules.desktop.wm.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [
"${hyprCfg.mod}, Return, exec, ${pkgs.alacritty}/bin/alacritty" "${hyprCfg.mod}, Return, exec, ${pkgs.alacritty}/bin/alacritty"
"${hyprCfg.mod} SHIFT, Return, exec, [float] ${pkgs.alacritty}/bin/alacritty" "${hyprCfg.mod} SHIFT, Return, exec, [float] ${pkgs.alacritty}/bin/alacritty"
]; ];

15
modules/app/anki.nix Normal file
View File

@@ -0,0 +1,15 @@
{ config, lib, pkgs, ... }:
let
cfg = config.samfelag.modules.app.anki;
in
{
options.samfelag.modules.app.anki = {
enable = lib.mkEnableOption "anki";
};
config = lib.mkIf cfg.enable {
hm.home.packages = with pkgs; [
anki
];
};
}

View File

@@ -2,8 +2,8 @@
let let
cfg = config.samfelag.modules.app.firefox; cfg = config.samfelag.modules.app.firefox;
i3Cfg = config.samfelag.modules.desktop.i3; i3Cfg = config.samfelag.modules.desktop.wm.i3;
hyprCfg = config.samfelag.modules.desktop.hyprland; hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in in
{ {
options.samfelag.modules.app.firefox = { options.samfelag.modules.app.firefox = {
@@ -27,11 +27,11 @@ in
}; };
}; };
samfelag.modules.desktop.i3.extraKeybindings = lib.mkIf i3Cfg.enable { samfelag.modules.desktop.wm.i3.extraKeybindings = lib.mkIf i3Cfg.enable {
"${i3Cfg.mod}+Shift+i" = "exec ${pkgs.firefox}/bin/firefox"; "${i3Cfg.mod}+Shift+i" = "exec ${pkgs.firefox}/bin/firefox";
}; };
samfelag.modules.desktop.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [ samfelag.modules.desktop.wm.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [
"${hyprCfg.mod} SHIFT, i, exec, ${pkgs.firefox}/bin/firefox" "${hyprCfg.mod} SHIFT, i, exec, ${pkgs.firefox}/bin/firefox"
]; ];
}; };

44
modules/app/ghostty.nix Normal file
View File

@@ -0,0 +1,44 @@
{ config, lib, pkgs, ... }:
let
cfg = config.samfelag.modules.app.ghostty;
i3Cfg = config.samfelag.modules.desktop.wm.i3;
hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in
{
options.samfelag.modules.app.ghostty = {
enable = lib.mkEnableOption "ghostty";
};
config = lib.mkIf cfg.enable {
hm.home.packages = with pkgs; [
ghostty
];
fonts.fontconfig.enable = true;
fonts.packages = with pkgs; [
iosevka
pkgs.nerd-fonts.iosevka
];
hm.xdg.configFile."ghostty/config".text = ''
background = "${config.colorScheme.palette.base00}"
foreground = "${config.colorScheme.palette.base05}"
font-family = "Iosevka Nerd Font"
background-opacity = 0.85
background-blur = true
'';
samfelag.modules.desktop.wm.i3.extraKeybindings = lib.mkIf i3Cfg.enable {
"${i3Cfg.mod}+Return" = "exec ${pkgs.ghostty}/bin/ghostty";
# "${i3Cfg.mod}+Shift+Return" = "exec ${pkgs.ghostty}/bin/ghostty -t floating-term";
};
samfelag.modules.desktop.wm.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [
"${hyprCfg.mod}, Return, exec, ${pkgs.ghostty}/bin/ghostty"
"${hyprCfg.mod} SHIFT, Return, exec, [float] ${pkgs.ghostty}/bin/ghostty"
];
};
}

View File

@@ -2,8 +2,8 @@
let let
cfg = config.samfelag.modules.app.spotify; cfg = config.samfelag.modules.app.spotify;
i3Cfg = config.samfelag.modules.desktop.i3; i3Cfg = config.samfelag.modules.desktop.wm.i3;
hyprCfg = config.samfelag.modules.desktop.hyprland; hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in in
{ {
options.samfelag.modules.app.spotify = { options.samfelag.modules.app.spotify = {
@@ -14,11 +14,11 @@ in
spotify spotify
]; ];
samfelag.modules.desktop.i3.extraKeybindings = lib.mkIf i3Cfg.enable { samfelag.modules.desktop.wm.i3.extraKeybindings = lib.mkIf i3Cfg.enable {
"${i3Cfg.mod}+Shift+m" = "exec ${pkgs.spotify}/bin/spotify"; "${i3Cfg.mod}+Shift+m" = "exec ${pkgs.spotify}/bin/spotify";
}; };
samfelag.modules.desktop.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [ samfelag.modules.desktop.wm.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [
"${hyprCfg.mod} SHIFT, m, exec, ${pkgs.spotify}/bin/spotify" "${hyprCfg.mod} SHIFT, m, exec, ${pkgs.spotify}/bin/spotify"
]; ];
}; };

34
modules/app/yazi.nix Normal file
View File

@@ -0,0 +1,34 @@
{ config, lib, pkgs, ... }:
let
cfg = config.samfelag.modules.app.yazi;
in
{
options.samfelag.modules.app.yazi = {
enable = lib.mkEnableOption "yazi";
};
config = lib.mkIf cfg.enable {
hm.home.packages = with pkgs; [
yazi
ffmpeg
ffmpegthumbnailer
jq
poppler
fd
ripgrep
fzf
zoxide
imagemagick
wl-clipboard
];
fonts.fontconfig.enable = true;
fonts.packages = with pkgs; [
iosevka
pkgs.nerd-fonts.iosevka
];
};
}

View File

@@ -0,0 +1,26 @@
{ config, lib, pkgs, inputs, system, ... }:
let
cfg = config.samfelag.modules.app.zen-browser;
i3Cfg = config.samfelag.modules.desktop.wm.i3;
hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
zen-pkg = inputs.zen-browser.packages."${system}".default;
in
{
options.samfelag.modules.app.zen-browser = {
enable = lib.mkEnableOption "zen-browser";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
zen-pkg
];
samfelag.modules.desktop.wm.i3.extraKeybindings = lib.mkIf i3Cfg.enable {
"${i3Cfg.mod}+Shift+i" = "exec ${zen-pkg}/bin/zen";
};
samfelag.modules.desktop.wm.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [
"${hyprCfg.mod} SHIFT, i, exec, ${zen-pkg}/bin/zen"
];
};
}

View File

@@ -11,9 +11,9 @@
system.stateVersion = "22.05"; system.stateVersion = "22.05";
nix = { nix = {
package = pkgs.nixFlakes; package = pkgs.nixVersions.stable;
extraOptions = lib.optionalString (config.nix.package == pkgs.nixFlakes) extraOptions = lib.optionalString (config.nix.package == pkgs.nixVersions.stable)
"experimental-features = nix-command flakes"; "experimental-features = nix-command flakes";
gc = { gc = {
@@ -27,11 +27,11 @@
# - Locale ------------------------------------- # - Locale -------------------------------------
time.timeZone = "Europe/Madrid"; time.timeZone = "Europe/Madrid";
i18n.defaultLocale = "ca_ES.utf8"; i18n.defaultLocale = "ca_ES.UTF-8";
console.keyMap = "es"; console.keyMap = "es";
services.xserver = { services.xserver.xkb = {
layout = "es"; layout = "es";
xkbVariant = "cat"; variant = "cat";
}; };
# - Packages ----------------------------------- # - Packages -----------------------------------

View File

@@ -3,75 +3,11 @@
with lib; with lib;
let let
cfg = config.samfelag.modules.desktop; cfg = config.samfelag.modules.desktop;
laptopPkgs = with pkgs; [
];
in in
{ {
options.samfelag.modules.desktop = { options.samfelag.modules.desktop = {
# Define generic desktop options to be used by the environments
enable = mkEnableOption "desktop environment";
laptop = mkOption {
description = "Enable features for a laptop (trackpad, battery, etc...)";
type = types.bool;
default = false;
};
wallpaper = my.mkOpt' types.path ../../data/wallpaper/flors "Path to wallpaper(s)"; wallpaper = my.mkOpt' types.path ../../data/wallpaper/flors "Path to wallpaper(s)";
}; };
config = mkIf cfg.enable {
# - Packages ---------------------------------
environment.systemPackages = with pkgs; [
pamixer
i3lock-blur
brightnessctl
playerctl
feh
] ++ optionals cfg.laptop laptopPkgs;
# - Audio ------------------------------------
sound.enable = true;
hardware = {
pulseaudio = {
enable = true;
support32Bit = true;
package = pkgs.pulseaudioFull;
};
};
# - Compositor -------------------------------
services.picom.enable = true;
# - Modules ----------------------------------
samfelag.modules = {
app.alacritty.enable = true;
app.firefox.enable = true;
desktop.rofi.enable = true;
desktop.polybar.enable = true;
desktop.i3 = {
laptop = cfg.laptop;
extraStartup = [
{ command = "systemctl --user restart polybar"; always = true; notification = false; }
{ command = "feh --bg-fill -B \"#${config.colorScheme.palette.base00}\" -z --no-fehbg ${cfg.wallpaper}"; always = true; notification = false; }
];
extraKeybindings = {
"${cfg.i3.mod}+space" = "exec $HOME/.config/rofi/menus/launcher/launcher.sh";
"${cfg.i3.mod}+End" = "exec $HOME/.config/rofi/menus/powermenu/powermenu.sh";
};
};
};
};
} }

View File

@@ -0,0 +1,130 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.samfelag.modules.desktop.grapheio;
hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in
{
options.samfelag.modules.desktop.grapheio = {
enable = mkEnableOption "Γραφείο desktop environment - hyprland based";
};
config = mkIf cfg.enable {
# - Packages ---------------------------------
environment.systemPackages = with pkgs; [
# - Tools ----------------------------------
jq
# - Appearance -----------------------------
rose-pine-gtk-theme
rose-pine-icon-theme
# - Cursor
inputs.hyprcursor-rose-pine.packages.${pkgs.system}.default
rose-pine-cursor
];
# - Data files -------------------------------
hm.xdg.configFile."grapheio".source = ../../config/grapheio;
# - Cursor -----------------------------------
hm.home.pointerCursor = {
gtk.enable = true;
package = pkgs.rose-pine-cursor;
name = "BreezeX Cursor";
size = 24;
};
hm.gtk = {
enable = true;
theme = {
package = pkgs.rose-pine-gtk-theme;
name = "rose-pine-gtk-theme";
};
iconTheme = {
package = pkgs.rose-pine-icon-theme;
name = "rose-pine-icons";
};
cursorTheme = {
package = pkgs.rose-pine-cursor;
name = "BreezeX-RoséPine";
size = 24;
};
};
# - Hyprland keybindings ---------------------
hm.wayland.windowManager.hyprland.settings = lib.mkIf hyprCfg.enable {
bind = [
# Pulse Audio controls (mute)
", XF86AudioMute, exec, $HOME/.config/grapheio/scripts/volume.sh mute"
# Media player controls
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioPause, exec, playerctl play-pause"
", XF86AudioNext, exec, playerctl next"
", XF86AudioPrev, exec, playerctl previous"
", XF86AudioStop, exec, playerctl stop"
# Keyboard brightness control
"${hyprCfg.mod}, XF86MonBrightnessUp, exec, brightnessctl -d platform::kbd_backlight set +1"
"${hyprCfg.mod}, XF86MonBrightnessDown, exec, brightnessctl -d platform::kbd_backlight set -1"
];
binde = [
# Pulse Audio controls (keep button pressed)
", XF86AudioRaiseVolume, exec, $HOME/.config/grapheio/scripts/volume.sh set +5%"
", XF86AudioLowerVolume, exec, $HOME/.config/grapheio/scripts/volume.sh set -5%"
# Brightness control (keep button pressed)
", XF86MonBrightnessUp, exec, $HOME/.config/grapheio/scripts/brightness.sh set +5%"
", XF86MonBrightnessDown, exec, $HOME/.config/grapheio/scripts/brightness.sh set 5%-"
# Keyboard brightness control (keep button pressed)
"${hyprCfg.mod}, XF86MonBrightnessUp, exec, $HOME/.config/grapheio/scripts/brightness.sh kb_set +1"
"${hyprCfg.mod}, XF86MonBrightnessDown, exec, $HOME/.config/grapheio/scripts/brightness.sh kb_set 1-"
];
};
# - Modules ----------------------------------
samfelag.modules = {
system.audio.enable = true;
system.brightness.enable = true;
desktop = {
# Window Manager
wm.hyprland.enable = true;
tools = {
# Greeter (login screen)
greetd = {
enable = true;
wm_cmd = "Hyprland";
};
# Locker
hyprlock.enable = true;
# Status bars
eww.enable = true;
# Wallpapper
hyprpaper.enable = true;
# Launcher
rofi.enable = true;
# Notification center
swaync.enable = true;
# Clipboard manager (history)
cliphist.enable = true;
# Take screenshots
screenshot.enable = true;
};
};
app = {
ghostty.enable = true;
zen-browser.enable = true;
};
};
};
}

View File

@@ -1,182 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.samfelag.modules.desktop.hyprland;
mod = "Mod4";
in {
options.samfelag.modules.desktop.hyprland = with lib; {
enable = mkEnableOption "hyprland window manager";
mod = my.mkOpt' types.str "Mod4" "Main modifier key for hyprland";
laptop = mkEnableOption "Enable features for a laptop (trackpad, battery, etc...)";
extraKeybindings = my.mkOpt (types.listOf types.str) [ ];
extraStartup = my.mkOpt (types.listOf types.attrs) [ ];
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
# Wallpaper
hyprpaper
greetd.gtkgreet
cage
];
# - Login screen -----------------------------
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.cage}/bin/cage -d -s ${pkgs.greetd.gtkgreet}/bin/gtkgreet -- -c Hyprland -s /etc/greetd/greetd.css";
user = config.user.name;
};
};
};
environment.etc."greetd/environments".text = ''
Hyprland
'';
environment.etc."greetd/greetd.css".text = ''
window {
background-image: url("file://${config.samfelag.modules.desktop.wallpaper}");
background-size: cover;
background-position: center;
font-family: Iosevka;
color: #${config.colorScheme.palette.base00};
}
box#body {
background-color: #${config.colorScheme.palette.base06};
opacity: 0.75;
border-radius: 10px;
padding: 50px;
}
'';
# - Dependencies -----------------------------
samfelag.modules.desktop.rofi.enable = true;
samfelag.modules.desktop.eww.enable = true;
# - Configuration -----------------------------
# Hyprpaper
hm.xdg.configFile."hypr/hyprpaper.conf".text = ''
preload = ${config.samfelag.modules.desktop.wallpaper}
wallpaper = ,${config.samfelag.modules.desktop.wallpaper}
'';
programs.hyprland = {
enable = true;
xwayland.enable = true;
enableNvidiaPatches = true;
};
hm.wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
enableNvidiaPatches = true;
package = pkgs.hyprland;
# Optional
# Whether to enable hyprland-session.target on hyprland startup
systemd.enable = true;
settings = {
input = {
kb_layout = "es";
};
monitor = ",highres,auto,1";
exec-once = [
"hyprpaper"
"eww open top-bar"
];
decoration = {
rounding = 10;
};
gestures = {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
workspace_swipe = true;
};
bind = [
"${cfg.mod}, Q, killactive,"
"${cfg.mod}, F, fullscreen, 1"
"${cfg.mod} SHIFT, F, fullscreen, 0"
"${cfg.mod} SHIFT, SPACE, togglefloating"
# Move focus
"${cfg.mod}, left, movefocus, l"
"${cfg.mod}, right, movefocus, r"
"${cfg.mod}, up, movefocus, u"
"${cfg.mod}, down, movefocus, d"
"${cfg.mod}, h, movefocus, l"
"${cfg.mod}, l, movefocus, r"
"${cfg.mod}, k, movefocus, u"
"${cfg.mod}, j, movefocus, d"
# Move focus
"${cfg.mod} SHIFT, left, movewindow, l"
"${cfg.mod} SHIFT, right, movewindow, r"
"${cfg.mod} SHIFT, up, movewindow, u"
"${cfg.mod} SHIFT, down, movewindow, d"
"${cfg.mod} SHIFT, h, movewindow, l"
"${cfg.mod} SHIFT, l, movewindow, r"
"${cfg.mod} SHIFT, k, movewindow, u"
"${cfg.mod} SHIFT, j, movewindow, d"
# Switch workspace
"${cfg.mod}, 1, workspace, 1"
"${cfg.mod}, 2, workspace, 2"
"${cfg.mod}, 3, workspace, 3"
"${cfg.mod}, 4, workspace, 4"
"${cfg.mod}, 5, workspace, 5"
"${cfg.mod}, 0, workspace, 6"
# Move to workspace
"${cfg.mod} SHIFT, 1, movetoworkspace, 1"
"${cfg.mod} SHIFT, 2, movetoworkspace, 2"
"${cfg.mod} SHIFT, 3, movetoworkspace, 3"
"${cfg.mod} SHIFT, 4, movetoworkspace, 4"
"${cfg.mod} SHIFT, 5, movetoworkspace, 5"
"${cfg.mod} SHIFT, 0, movetoworkspace, 6"
# - Media ------------------------------
# Pulse Audio controls (mute)
", XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle"
# Media player controls
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioPause, exec, playerctl play-pause"
", XF86AudioNext, exec, playerctl next"
", XF86AudioPrev, exec, playerctl previous"
", XF86AudioStop, exec, playerctl stop"
] ++ cfg.extraKeybindings;
binde = [
# Pulse Audio controls (volume)
", XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5%"
", XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5%"
];
bindm = [
"${cfg.mod}, mouse:272, movewindow"
];
};
};
};
}

View File

@@ -0,0 +1,36 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.samfelag.modules.desktop.tools.cliphist;
hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
rofiCfg = config.samfelag.modules.desktop.tools.rofi;
in
{
options.samfelag.modules.desktop.tools.cliphist = {
enable = mkEnableOption "Clipboard history";
};
config = mkIf cfg.enable {
# - Clipboard manager ------------------------
hm.services.cliphist = {
enable = true;
extraOptions = [
"-max-dedupe-search"
"10"
"-max-items"
"500"
];
};
# - Hyprland keybindings ---------------------
hm.wayland.windowManager.hyprland.settings = lib.mkIf (hyprCfg.enable && rofiCfg.enable) {
bind = [
# Clipboard manager
"${hyprCfg.mod}, v, exec, $HOME/.config/rofi/menus/cliphist/cliphist.sh"
];
};
};
}

View File

@@ -1,14 +1,11 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
let let
cfg = config.samfelag.modules.desktop.eww; cfg = config.samfelag.modules.desktop.tools.eww;
hyprCfg = config.samfelag.modules.desktop.hyprland; hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
# Paths
paths = {
};
in { in {
options.samfelag.modules.desktop.eww = { options.samfelag.modules.desktop.tools.eww = {
enable = lib.mkEnableOption "eww"; enable = lib.mkEnableOption "eww";
}; };
@@ -17,17 +14,22 @@ in {
# - Configuration ---------------------------- # - Configuration ----------------------------
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
eww-wayland eww
# Scripts' dependencies # Scripts' dependencies
jq jq
socat socat
]; ];
hm.xdg.configFile."eww/eww.yuck".source = ../../config/eww/eww.yuck; hm.xdg.configFile."eww/eww.yuck".source = ../../../config/eww/eww.yuck;
hm.xdg.configFile."eww/eww.scss".source = ../../config/eww/eww.scss; hm.xdg.configFile."eww/eww.scss".source = ../../../config/eww/eww.scss;
hm.xdg.configFile."eww/bars".source = ../../config/eww/bars; hm.xdg.configFile."eww/bars".source = ../../../config/eww/bars;
hm.xdg.configFile."eww/widgets".source = ../../config/eww/widgets; hm.xdg.configFile."eww/widgets".source = ../../../config/eww/widgets;
hm.xdg.configFile."eww/scripts".source = ../../config/eww/scripts; hm.xdg.configFile."eww/scripts".source = ../../../config/eww/scripts;
# - Execute on startup -----------------------
hm.wayland.windowManager.hyprland.settings.exec-once = lib.mkIf hyprCfg.enable [
"eww open top-bar"
];
# - Themeing --------------------------------- # - Themeing ---------------------------------
hm.xdg.configFile."eww/colour-scheme.scss".text = '' hm.xdg.configFile."eww/colour-scheme.scss".text = ''
@@ -50,7 +52,7 @@ in {
''; '';
# - Dependencies ----------------------------- # - Dependencies -----------------------------
samfelag.modules.desktop.rofi.enable = true; samfelag.modules.desktop.tools.rofi.enable = true;
}; };
} }

View File

@@ -0,0 +1,90 @@
{ inputs, config, lib, pkgs, ... }:
let
cfg = config.samfelag.modules.desktop.tools.greetd;
in {
options.samfelag.modules.desktop.tools.greetd = with lib; {
enable = mkEnableOption "Greetd based greeter";
wm_cmd = lib.my.mkOpt' types.str "" "Window manager command";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
greetd.gtkgreet
cage
];
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.cage}/bin/cage -d -s ${pkgs.greetd.gtkgreet}/bin/gtkgreet -- -c ${cfg.wm_cmd} -s /etc/greetd/greetd.css";
user = config.user.name;
};
};
};
environment.etc."greetd/environments".text = ''
${cfg.wm_cmd}
'';
environment.etc."greetd/greetd.css".text = ''
window {
background-image: url("file://${config.samfelag.modules.desktop.wallpaper}");
background-size: cover;
background-position: center;
font-family: Iosevka;
}
label#clock {
font-size: 25px;
color: #${config.colorScheme.palette.base00};
}
entry {
color: #${config.colorScheme.palette.base05};
padding: 0px 15px;
background-color: #${config.colorScheme.palette.base00};
border-color: #${config.colorScheme.palette.base02};
border-radius: 20px;
}
button.combo {
box-shadow: none;
margin-left: 5px;
border-radius: 20px;
border-color: #${config.colorScheme.palette.base02};
background-image: image(#${config.colorScheme.palette.base00});
color: #${config.colorScheme.palette.base05};
}
menu {
color: #${config.colorScheme.palette.base05};
background-color: #${config.colorScheme.palette.base00};
}
menuitem {
border-radius: 20px;
background-color: #${config.colorScheme.palette.base00};
}
menuitem:hover {
background-color: #${config.colorScheme.palette.base0C};
}
.text-button {
border-radius: 20px;
border-color: #${config.colorScheme.palette.base02};
color: #${config.colorScheme.palette.base05};
background-image: image(#${config.colorScheme.palette.base00});
}
box#body {
padding: 50px;
}
'';
};
}

View File

@@ -0,0 +1,115 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.samfelag.modules.desktop.tools.hyprlock;
hexToRGBString = inputs.nix-colors.lib-core.conversions.hexToRGBString ",";
in
{
options.samfelag.modules.desktop.tools.hyprlock = {
enable = mkEnableOption "Hyprlock screen locker";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
hypridle
];
hm.programs.hyprlock = {
enable = true;
settings = {
general = {
# disable_loading_bar = true;
# grace = 5;
};
background = [
{
path = "${config.samfelag.modules.desktop.wallpaper}";
blur_passes = 2;
blur_size = 4;
}
];
input-field = [
{
font_family = "Iosevka";
size = "300, 40";
position = "0, -80";
outline_thickness = 1;
fade_on_empty = "false";
placeholder_text = "";
outer_color = "rgba(${hexToRGBString config.colorScheme.palette.base02},1.0)";
inner_color = "rgba(${hexToRGBString config.colorScheme.palette.base00},1.0)";
font_color = "rgba(${hexToRGBString config.colorScheme.palette.base05},1.0)";
check_color = "rgba(${hexToRGBString config.colorScheme.palette.base07},1.0)";
fail_color = "rgba(${hexToRGBString config.colorScheme.palette.base06},1.0)";
}
];
label = [
{
text = "$TIME";
color = "rgba(${hexToRGBString config.colorScheme.palette.base00},1.0)";
font_size = 25;
font_family = "Iosevka";
position = "0, 80";
halign = "center";
valign = "center";
}
];
};
};
hm.services.hypridle = {
enable = true;
settings = {
general = {
lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances.
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
};
listener = [
{
timeout = 90;
on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
on-resume = "brightnessctl -r"; # monitor backlight restore.
}
{
timeout = 90;
on-timeout = "brightnessctl -sd platform::kbd_backlight set 0"; # turn off keyboard backlight.
on-resume = "brightnessctl -rd platform::kbd_backlight"; # turn on keyboard backlight.
}
{
timeout = 300; # 5min
on-timeout = "loginctl lock-session"; # lock screen when timeout has passed
}
{
timeout = 330; # 5.5min
on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
on-resume = "hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired.
}
{
timeout = 1800; # 30min
on-timeout = "systemctl suspend"; # suspend pc
}
];
};
};
# - Execute on startup -----------------------
hm.wayland.windowManager.hyprland.settings.exec-once = [
"hypridle"
];
};
}

View File

@@ -0,0 +1,28 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.samfelag.modules.desktop.tools.hyprpaper;
in
{
options.samfelag.modules.desktop.tools.hyprpaper = {
enable = mkEnableOption "Hyprpaper desktop wallpaper";
};
config = mkIf cfg.enable {
hm.services.hyprpaper = {
enable = true;
settings = {
preload = "${config.samfelag.modules.desktop.wallpaper}";
wallpaper = ",${config.samfelag.modules.desktop.wallpaper}";
};
};
# - Execute on startup -----------------------
hm.wayland.windowManager.hyprland.settings.exec-once = [
"hyprpaper"
];
};
}

View File

@@ -1,8 +1,8 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
let let
cfg = config.samfelag.modules.desktop.polybar; cfg = config.samfelag.modules.desktop.tools.polybar;
i3Cfg = config.samfelag.modules.desktop.i3; i3Cfg = config.samfelag.modules.desktop.wm.i3;
polybar_pkg = pkgs.polybar.override { polybar_pkg = pkgs.polybar.override {
i3Support = true; i3Support = true;
pulseSupport = true; pulseSupport = true;
@@ -13,13 +13,13 @@ let
''; '';
# Paths # Paths
paths = { paths = {
config = ../../config/polybar/config.ini; config = ../../../config/polybar/config.ini;
bars = ../../config/polybar/bars; bars = ../../../config/polybar/bars;
scripts = ../../config/polybar/scripts; scripts = ../../../config/polybar/scripts;
}; };
in { in {
options.samfelag.modules.desktop.polybar = { options.samfelag.modules.desktop.tools.polybar = {
enable = lib.mkEnableOption "polybar"; enable = lib.mkEnableOption "polybar";
}; };
@@ -59,10 +59,14 @@ in {
# - Dependencies ----------------------------- # - Dependencies -----------------------------
# The polybar modules use rofi # The polybar modules use rofi
samfelag.modules.desktop.rofi.enable = true; samfelag.modules.desktop.tools.rofi.enable = true;
samfelag.modules.desktop.i3.extraKeybindings = lib.mkIf i3Cfg.enable { samfelag.modules.desktop.wm.i3.extraKeybindings = lib.mkIf i3Cfg.enable {
"${i3Cfg.mod}+Shift+w" = "exec $HOME/.config/rofi/menus/wifi/wifi.sh"; "${i3Cfg.mod}+Shift+w" = "exec $HOME/.config/rofi/menus/wifi/wifi.sh";
}; };
samfelag.modules.desktop.wm.i3.extraStartup = lib.mkIf i3Cfg.enable [
{ command = "systemctl --user restart polybar"; always = true; notification = false; }
{ command = "feh --bg-fill -B \"#${config.colorScheme.palette.base00}\" -z --no-fehbg ${cfg.wallpaper}"; always = true; notification = false; }
];
# - Services --------------------------------- # - Services ---------------------------------

View File

@@ -1,20 +1,24 @@
{ config, lib, pkgs, inputs, ... }: { config, lib, pkgs, inputs, ... }:
let let
cfg = config.samfelag.modules.desktop.rofi; cfg = config.samfelag.modules.desktop.tools.rofi;
hyprCfg = config.samfelag.modules.desktop.hyprland; hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
i3Cfg = config.samfelag.modules.desktop.wm.i3;
nix-colors-lib = inputs.nix-colors.lib-contrib { inherit pkgs; }; nix-colors-lib = inputs.nix-colors.lib-contrib { inherit pkgs; };
in in
{ {
options.samfelag.modules.desktop.rofi = { options.samfelag.modules.desktop.tools.rofi = {
enable = lib.mkEnableOption "rofi"; enable = lib.mkEnableOption "rofi";
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs;
if hyprCfg.enable then [
rofi-wayland
] else [
rofi rofi
]; ];
hm.xdg.configFile."rofi/menus".source = ../../config/rofi/menus; hm.xdg.configFile."rofi/menus".source = ../../../config/rofi/menus;
hm.xdg.configFile."rofi/nix.png".source = nix-colors-lib.nixWallpaperFromScheme { hm.xdg.configFile."rofi/nix.png".source = nix-colors-lib.nixWallpaperFromScheme {
scheme = config.colorScheme; scheme = config.colorScheme;
width = 600; width = 600;
@@ -35,11 +39,17 @@ in
} }
''; '';
samfelag.modules.desktop.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [ samfelag.modules.desktop.wm.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [
"${hyprCfg.mod}, SPACE, exec, $HOME/.config/rofi/menus/launcher/launcher.sh" "${hyprCfg.mod}, SPACE, exec, $HOME/.config/rofi/menus/launcher/launcher.sh"
"${hyprCfg.mod}, END, exec, $HOME/.config/rofi/menus/powermenu/powermenu.sh" "${hyprCfg.mod} SHIFT, P, exec, $HOME/.config/rofi/menus/powermenu/powermenu.sh"
"${hyprCfg.mod} SHIFT, W, exec, $HOME/.config/rofi/menus/wifi/wifi.sh" "${hyprCfg.mod} SHIFT, W, exec, $HOME/.config/rofi/menus/wifi/wifi.sh"
]; ];
samfelag.modules.desktop.wm.i3.extraKeybindings = lib.mkIf i3Cfg.enable {
"${i3Cfg.mod}+space" = "exec $HOME/.config/rofi/menus/launcher/launcher.sh";
"${i3Cfg.mod}+End" = "exec $HOME/.config/rofi/menus/powermenu/powermenu.sh";
"${i3Cfg.mod}+Shift+w" = "exec $HOME/.config/rofi/menus/wifi/wifi.sh";
};
}; };
} }

View File

@@ -0,0 +1,31 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.samfelag.modules.desktop.tools.screenshot;
hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in
{
options.samfelag.modules.desktop.tools.screenshot = {
enable = mkEnableOption "Screenshot utilities";
};
config = mkIf cfg.enable {
# - Screenshot utilities ---------------------
environment.systemPackages = [
pkgs.slurp # to select the region
pkgs.grim # actual screenshot program
];
# - Hyprland keybindings ---------------------
hm.wayland.windowManager.hyprland.settings = lib.mkIf hyprCfg.enable {
bind = [
# Screenshots
"${hyprCfg.mod}, s, exec, $HOME/.config/grapheio/scripts/screenshot.sh region"
"${hyprCfg.mod}, SHIFT s, exec, $HOME/.config/grapheio/scripts/screenshot.sh screen"
];
};
};
}

View File

@@ -0,0 +1,121 @@
{ inputs, config, lib, pkgs, ... }:
let
cfg = config.samfelag.modules.desktop.tools.swaync;
hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in {
options.samfelag.modules.desktop.tools.swaync = with lib; {
enable = mkEnableOption "Sway Notification Center";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
libnotify
swaynotificationcenter
];
hm.services.swaync = {
enable = true;
settings = {
widgets = [
"title"
"dnd"
"notifications"
];
widget-config = {
dnd = {
text = "Silence";
};
title = {
text = "Notifications";
clear-all-button = true;
button-text = "󰆴";
};
};
};
style = ''
* {
font-family: Iosevka;
color: #${config.colorScheme.palette.base05};
}
.notification {
border-width: 2px;
padding: 2px 4px;
background-color: #${config.colorScheme.palette.base00};
color: #${config.colorScheme.palette.base05};
}
.notification-content {
background-color: inherit;
color: inherit;
}
.critical.notification {
background-color: #${config.colorScheme.palette.base0C};
}
.image {
margin: 5px;
padding-right: 5px;
}
.control-center {
margin: 30px;
margin-left: 0px;
border-radius: 10px;
border: solid #${config.colorScheme.palette.base05} 1px;
background-color: #${config.colorScheme.palette.base01};
color: #${config.colorScheme.palette.base05};
opacity: 0.95;
}
.control-center-clear-all {
background: #${config.colorScheme.palette.base02};
}
.control-center-dnd:checked {
background: #${config.colorScheme.palette.base08};
}
.close-button {
background: #${config.colorScheme.palette.base08};
}
.notification-group-collapse-button {
margin: 4px;
box-shadow: none;
background: #${config.colorScheme.palette.base0A};
}
.notification-group-close-all-button {
margin: 4px;
box-shadow: none;
background: #${config.colorScheme.palette.base08};
}
'';
};
# - Execute on startup -----------------------
hm.wayland.windowManager.hyprland.settings = lib.mkIf hyprCfg.enable {
exec-once = [
"swaync"
];
layerrule = [
"animation slide top, swaync-control-center"
"animation slide top, swaync-notification-window"
];
bind = [
# Notification center
"${hyprCfg.mod}, n, exec, swaync-client -t -sw"
];
};
};
}

View File

@@ -0,0 +1,124 @@
{ inputs, config, lib, pkgs, ... }:
let
cfg = config.samfelag.modules.desktop.wm.hyprland;
mod = "Mod4";
in {
options.samfelag.modules.desktop.wm.hyprland = with lib; {
enable = mkEnableOption "hyprland window manager";
mod = my.mkOpt' types.str "Mod4" "Main modifier key for hyprland";
kb_layout = my.mkOpt' types.str "es" "Keyboard layout(s) for hyprland";
extraKeybindings = my.mkOpt (types.listOf types.str) [ ];
};
config = lib.mkIf cfg.enable {
# - Configuration -----------------------------
# Hyprland config
programs.hyprland = {
enable = true;
xwayland.enable = true;
};
hm.wayland.windowManager.hyprland = {
enable = true;
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
xwayland.enable = true;
systemd.enable = true;
plugins = [
inputs.hy3.packages.${pkgs.stdenv.hostPlatform.system}.hy3
];
settings = {
general = {
layout = "hy3";
};
env = [
"HYPRCURSOR_THEME,rose-pine-hyprcursor"
"HYPRCURSOR_SIZE,24"
];
input = {
kb_layout = cfg.kb_layout;
};
monitor = ",highres,auto,1";
exec-once = [
];
decoration = {
rounding = 10;
};
gestures = {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
workspace_swipe = true;
};
bind = [
"${cfg.mod}, Q, killactive,"
"${cfg.mod}, F, fullscreen, 1"
"${cfg.mod} SHIFT, F, fullscreen, 0"
"${cfg.mod} SHIFT, SPACE, togglefloating"
# Move focus
"${cfg.mod}, left, hy3:movefocus, l"
"${cfg.mod}, right, hy3:movefocus, r"
"${cfg.mod}, up, hy3:movefocus, u"
"${cfg.mod}, down, hy3:movefocus, d"
"${cfg.mod}, h, hy3:movefocus, l"
"${cfg.mod}, l, hy3:movefocus, r"
"${cfg.mod}, k, hy3:movefocus, u"
"${cfg.mod}, j, hy3:movefocus, d"
# Move focus
"${cfg.mod} SHIFT, left, hy3:movewindow, l"
"${cfg.mod} SHIFT, right, hy3:movewindow, r"
"${cfg.mod} SHIFT, up, hy3:movewindow, u"
"${cfg.mod} SHIFT, down, hy3:movewindow, d"
"${cfg.mod} SHIFT, h, hy3:movewindow, l"
"${cfg.mod} SHIFT, l, hy3:movewindow, r"
"${cfg.mod} SHIFT, k, hy3:movewindow, u"
"${cfg.mod} SHIFT, j, hy3:movewindow, d"
# Switch workspace
"${cfg.mod}, 1, workspace, 1"
"${cfg.mod}, 2, workspace, 2"
"${cfg.mod}, 3, workspace, 3"
"${cfg.mod}, 4, workspace, 4"
"${cfg.mod}, 5, workspace, 5"
"${cfg.mod}, 0, workspace, 6"
# Move to workspace
"${cfg.mod} SHIFT, 1, movetoworkspace, 1"
"${cfg.mod} SHIFT, 2, movetoworkspace, 2"
"${cfg.mod} SHIFT, 3, movetoworkspace, 3"
"${cfg.mod} SHIFT, 4, movetoworkspace, 4"
"${cfg.mod} SHIFT, 5, movetoworkspace, 5"
"${cfg.mod} SHIFT, 0, movetoworkspace, 6"
# # - Keyboard ---------------------------
# "${cfg.mod}, Escape, exec, hyprctl switchxkblayout current next"
] ++ cfg.extraKeybindings;
bindm = [
"${cfg.mod}, mouse:272, hy3:movewindow"
"${cfg.mod} SHIFT, mouse:272, resizewindow 1"
];
};
};
};
}

View File

@@ -1,11 +1,11 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
let let
cfg = config.samfelag.modules.desktop.i3; cfg = config.samfelag.modules.desktop.wm.i3;
mod = "Mod4"; mod = "Mod4";
in { in {
options.samfelag.modules.desktop.i3 = with lib; { options.samfelag.modules.desktop.wm.i3 = with lib; {
enable = mkEnableOption "i3 window manager"; enable = mkEnableOption "i3 window manager";
mod = my.mkOpt' types.str "Mod4" "Main modifier key for i3"; mod = my.mkOpt' types.str "Mod4" "Main modifier key for i3";
@@ -23,11 +23,15 @@ in {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
playerctl playerctl
i3lock-blur
feh
]; ];
samfelag.modules.desktop.tools.polybar.enable = true;
fonts.packages = with pkgs; [ fonts.packages = with pkgs; [
iosevka iosevka
(nerdfonts.override { fonts = [ "Iosevka" ]; }) pkgs.nerd-fonts.iosevka
]; ];
services.xserver = { services.xserver = {

View File

@@ -5,7 +5,7 @@
let let
cfg = config.samfelag.modules.dev.devenv; cfg = config.samfelag.modules.dev.devenv;
i3Cfg = config.samfelag.modules.desktop.i3; i3Cfg = config.samfelag.modules.desktop.wm.i3;
in in
{ {
options.samfelag.modules.dev.devenv = { options.samfelag.modules.dev.devenv = {
@@ -20,9 +20,9 @@ in
devenv = "source $HOME/.local/share/devenv/devenv.sh"; devenv = "source $HOME/.local/share/devenv/devenv.sh";
}; };
# TODO: This assumes we have alacritty and a python39 devenv set up (may want to fix this at some point) # TODO: This assumes we have alacritty and a python311 devenv set up (may want to fix this at some point)
samfelag.modules.desktop.i3.extraKeybindings = lib.mkIf i3Cfg.enable { samfelag.modules.desktop.wm.i3.extraKeybindings = lib.mkIf i3Cfg.enable {
"${i3Cfg.mod}+Shift+P" = "exec ${pkgs.alacritty}/bin/alacritty -t floating-term -e zsh -c \"direnv exec ~/sandbox/python39 ipython\""; "${i3Cfg.mod}+Shift+P" = "exec ${pkgs.alacritty}/bin/alacritty -t floating-term -e zsh -c \"direnv exec ~/sandbox/python311 ipython\"";
}; };
# - Requirements ----------------------------- # - Requirements -----------------------------

View File

@@ -19,6 +19,11 @@ in
userName = cfg.userName; userName = cfg.userName;
userEmail = cfg.userEmail; userEmail = cfg.userEmail;
ignores = [
".direnv"
".project"
];
extraConfig = { extraConfig = {
init.defaultBranch = "main"; init.defaultBranch = "main";
}; };

View File

@@ -3,8 +3,8 @@
with lib; with lib;
let let
cfg = config.samfelag.modules.editors.emacs; cfg = config.samfelag.modules.editors.emacs;
i3Cfg = config.samfelag.modules.desktop.i3; i3Cfg = config.samfelag.modules.desktop.wm.i3;
hyprCfg = config.samfelag.modules.desktop.hyprland; hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
emacsPackages = epkgs: [ emacsPackages = epkgs: [
epkgs.vterm epkgs.vterm
]; ];
@@ -53,6 +53,7 @@ in {
fonts.packages = with pkgs; [ fonts.packages = with pkgs; [
iosevka iosevka
emacs-all-the-icons-fonts emacs-all-the-icons-fonts
noto-fonts-color-emoji
]; ];
env.PATH = [ "$HOME/.config/emacs/bin" ]; env.PATH = [ "$HOME/.config/emacs/bin" ];
@@ -63,34 +64,34 @@ in {
"doom/custom.el".source = ../../config/doom/custom.el; "doom/custom.el".source = ../../config/doom/custom.el;
"doom/init.el".source = ../../config/doom/init.el; "doom/init.el".source = ../../config/doom/init.el;
"doom/packages.el".source = ../../config/doom/packages.el; "doom/packages.el".source = ../../config/doom/packages.el;
"doom/themes".source = ../../config/doom/themes; # "doom/themes".source = ../../config/doom/themes;
# # Themeing # Themeing
# "doom/themes/base16-samfelag-theme.el".text = '' "doom/themes/base16-samfelag-theme.el".text = ''
# (require 'base16-theme) (require 'base16-theme)
# (defvar base16-samfelag-theme-colors (defvar base16-samfelag-theme-colors
# '(:base00 "#${config.colorScheme.palette.base00}" '(:base00 "#${config.colorScheme.palette.base00}"
# :base01 "#${config.colorScheme.palette.base01}" :base01 "#${config.colorScheme.palette.base01}"
# :base02 "#${config.colorScheme.palette.base02}" :base02 "#${config.colorScheme.palette.base02}"
# :base03 "#${config.colorScheme.palette.base03}" :base03 "#${config.colorScheme.palette.base03}"
# :base04 "#${config.colorScheme.palette.base04}" :base04 "#${config.colorScheme.palette.base04}"
# :base05 "#${config.colorScheme.palette.base05}" :base05 "#${config.colorScheme.palette.base05}"
# :base06 "#${config.colorScheme.palette.base06}" :base06 "#${config.colorScheme.palette.base06}"
# :base07 "#${config.colorScheme.palette.base07}" :base07 "#${config.colorScheme.palette.base07}"
# :base08 "#${config.colorScheme.palette.base08}" :base08 "#${config.colorScheme.palette.base08}"
# :base09 "#${config.colorScheme.palette.base09}" :base09 "#${config.colorScheme.palette.base09}"
# :base0A "#${config.colorScheme.palette.base0A}" :base0A "#${config.colorScheme.palette.base0A}"
# :base0B "#${config.colorScheme.palette.base0B}" :base0B "#${config.colorScheme.palette.base0B}"
# :base0C "#${config.colorScheme.palette.base0C}" :base0C "#${config.colorScheme.palette.base0C}"
# :base0D "#${config.colorScheme.palette.base0D}" :base0D "#${config.colorScheme.palette.base0D}"
# :base0E "#${config.colorScheme.palette.base0E}" :base0E "#${config.colorScheme.palette.base0E}"
# :base0F "#${config.colorScheme.palette.base0F}") :base0F "#${config.colorScheme.palette.base0F}")
# "All colors for Base16 Samfelag are defined here.") "All colors for Base16 Samfelag are defined here.")
# (deftheme base16-samfelag) (deftheme base16-samfelag)
# (base16-theme-define 'base16-samfelag base16-samfelag-theme-colors) (base16-theme-define 'base16-samfelag base16-samfelag-theme-colors)
# (provide-theme 'base16-samfelag) (provide-theme 'base16-samfelag)
# (provide 'base16-samfelag-theme) (provide 'base16-samfelag-theme)
# ''; '';
}; };
@@ -103,11 +104,11 @@ in {
''; '';
}; };
samfelag.modules.desktop.i3.extraKeybindings = lib.mkIf i3Cfg.enable { samfelag.modules.desktop.wm.i3.extraKeybindings = lib.mkIf i3Cfg.enable {
"${i3Cfg.mod}+Shift+e" = "exec ${emacsWithPackages}/bin/emacs"; "${i3Cfg.mod}+Shift+e" = "exec ${emacsWithPackages}/bin/emacs";
}; };
samfelag.modules.desktop.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [ samfelag.modules.desktop.wm.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [
"${hyprCfg.mod} SHIFT, e, exec, ${emacsWithPackages}/bin/emacs" "${hyprCfg.mod} SHIFT, e, exec, ${emacsWithPackages}/bin/emacs"
]; ];

View File

@@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
let
cfg = config.samfelag.modules.shell.starship;
in
{
options.samfelag.modules.shell.starship = {
enable = lib.mkEnableOption "A prompt for any shell";
};
config = lib.mkIf cfg.enable {
hm.programs.starship = {
enable = true;
settings = {
add_newline = false;
# Prompt on the right
right_format = "$time";
time.disabled = false;
# Status: Show error code of failed commands
status.disabled = false;
};
};
};
}

View File

@@ -11,24 +11,19 @@ in
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
zsh zsh
zsh-powerlevel10k
]; ];
# fonts.packages = with pkgs; [
# iosevka
# (nerdfonts.override { fonts = [ "Iosevka" ]; })
# ];
programs.zsh.enable = true; programs.zsh.enable = true;
hm.programs.zsh = { hm.programs.zsh = {
enable = true; enable = true;
dotDir = ".config/zsh"; dotDir = ".config/zsh";
enableAutosuggestions = true; autosuggestion.enable = true;
enableCompletion = true; enableCompletion = true;
syntaxHighlighting.enable = true; syntaxHighlighting.enable = true;
initExtra = '' initContent = let
zshConfig = lib.mkOrder 1000 ''
# Source generic (bash) configuration # Source generic (bash) configuration
if [ -d $HOME/.config/shell/sh ]; then if [ -d $HOME/.config/shell/sh ]; then
for rc in $HOME/.config/shell/sh/*.sh; do for rc in $HOME/.config/shell/sh/*.sh; do
@@ -43,12 +38,10 @@ in
done done
fi fi
''; '';
in
initExtraBeforeCompInit = '' lib.mkMerge [
# p10k instant prompt zshConfig
P10K_INSTANT_PROMPT="$XDG_CACHE_HOME/p10k-instant-prompt-''${(%):-%n}.zsh" ];
[[ ! -r "$P10K_INSTANT_PROMPT" ]] || source "$P10K_INSTANT_PROMPT"
'';
oh-my-zsh = { oh-my-zsh = {
enable = true; enable = true;
@@ -59,11 +52,6 @@ in
}; };
plugins = [ plugins = [
{
file = "powerlevel10k.zsh-theme";
name = "powerlevel10k";
src = "${pkgs.zsh-powerlevel10k}/share/zsh-powerlevel10k";
}
{ {
name = "zsh-nix-shell"; name = "zsh-nix-shell";
file = "nix-shell.plugin.zsh"; file = "nix-shell.plugin.zsh";
@@ -74,10 +62,14 @@ in
sha256 = "0za4aiwwrlawnia4f29msk822rj9bgcygw6a8a6iikiwzjjz0g91"; sha256 = "0za4aiwwrlawnia4f29msk822rj9bgcygw6a8a6iikiwzjjz0g91";
}; };
} }
{
name = "vi-mode";
src = pkgs.zsh-vi-mode;
file = "share/zsh-vi-mode/zsh-vi-mode.plugin.zsh";
}
]; ];
}; };
hm.xdg.configFile."zsh/.p10k.zsh".source = ../../config/zsh/.p10k.zsh; samfelag.modules.shell.starship.enable = true;
}; };
} }

23
modules/system/audio.nix Normal file
View File

@@ -0,0 +1,23 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.samfelag.modules.system.audio;
hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in
{
options.samfelag.modules.system.audio = {
enable = mkEnableOption "Audio support";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
alsa-utils
playerctl
brightnessctl
];
services.pipewire.enable = true;
};
}

View File

@@ -2,7 +2,6 @@
let let
cfg = config.samfelag.modules.system.bluetooth; cfg = config.samfelag.modules.system.bluetooth;
desktopCfg = config.samfelag.modules.desktop;
in in
{ {
options.samfelag.modules.system.bluetooth = { options.samfelag.modules.system.bluetooth = {
@@ -11,9 +10,5 @@ in
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
hardware.bluetooth.enable = true; hardware.bluetooth.enable = true;
services.blueman.enable = true; services.blueman.enable = true;
samfelag.modules.desktop.i3.extraKeybindings = lib.mkIf desktopCfg.enable {
"${desktopCfg.i3.mod}+b" = "exec $HOME/.config/rofi/menus/bluetooth/bluetooth.sh";
};
}; };
} }

View File

@@ -0,0 +1,19 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.samfelag.modules.system.brightness;
hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in
{
options.samfelag.modules.system.brightness = {
enable = mkEnableOption "Brightness support";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
brightnessctl
];
};
}

View File

@@ -0,0 +1,17 @@
{ config, pkgs, lib, ... }:
let
cfg = config.samfelag.modules.system.devices.voyager;
in
{
options.samfelag.modules.system.devices.voyager = {
enable = lib.mkEnableOption "voyager";
};
config = lib.mkIf cfg.enable {
hardware.keyboard.zsa.enable = true;
environment.systemPackages = with pkgs; [
keymapp
];
};
}

View File

@@ -11,7 +11,7 @@ in
programs.gnupg.agent = { programs.gnupg.agent = {
enable = true; enable = true;
enableSSHSupport = true; enableSSHSupport = true;
pinentryFlavor = "qt"; pinentryPackage = pkgs.pinentry-qt;
}; };
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
pinentry pinentry

View File

@@ -0,0 +1,39 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.samfelag.modules.system.input.greek;
hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in
{
options.samfelag.modules.system.input.greek = {
enable = mkEnableOption "Enable greek input";
};
config = mkIf cfg.enable {
i18n.inputMethod = {
type = "fcitx5";
enable = true;
fcitx5.addons = with pkgs; [
fcitx5-gtk
fcitx5-nord
];
};
environment.variables = {
GTK_IM_MODULE = "fcitx";
QT_IM_MODULE = "fcitx";
XMODIFIERS = "@im=fcitx";
};
hm.wayland.windowManager.hyprland.settings = lib.mkIf hyprCfg.enable {
windowrule = "pseudo, class:fcitx";
exec-once = [
"fcitx -d -r"
"fcitx-remote -r"
];
};
};
}

View File

@@ -0,0 +1,46 @@
{ config, lib, pkgs, inputs, ... }:
with lib;
let
cfg = config.samfelag.modules.system.input.japanese;
hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in
{
options.samfelag.modules.system.input.japanese = {
enable = mkEnableOption "Enable japanese input";
};
config = mkIf cfg.enable {
i18n.inputMethod = {
type = "fcitx5";
enable = true;
fcitx5.addons = with pkgs; [
fcitx5-mozc-ut
fcitx5-gtk
fcitx5-nord
];
};
fonts.packages = with pkgs; [
ipafont
kochi-substitute
noto-fonts-cjk-sans
];
environment.variables = {
GTK_IM_MODULE = "fcitx";
QT_IM_MODULE = "fcitx";
XMODIFIERS = "@im=fcitx";
};
hm.wayland.windowManager.hyprland.settings = lib.mkIf hyprCfg.enable {
windowrule = "pseudo, class:fcitx";
exec-once = [
"fcitx -d -r"
"fcitx-remote -r"
];
};
};
}

26
modules/system/kanata.nix Normal file
View File

@@ -0,0 +1,26 @@
{ config, pkgs, lib, ... }:
let
cfg = config.samfelag.modules.system.kanata;
in
{
options.samfelag.modules.system.kanata = {
enable = lib.mkEnableOption "kanata";
};
config = lib.mkIf cfg.enable {
users.users.${config.user.name}.extraGroups = [
"input"
"uinput"
];
services.kanata = {
enable = true;
keyboards = {
internalKeyboard = {
extraDefCfg = "process-unmapped-keys yes";
configFile = ../../config/kanata/kanata.kbd;
};
};
};
};
}

View File

@@ -23,10 +23,12 @@ in
services.xserver.videoDrivers = [ "nvidia" ]; services.xserver.videoDrivers = [ "nvidia" ];
hardware.opengl.enable = true; hardware = {
hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.stable; graphics.enable = true;
nvidia = {
hardware.nvidia.prime = { package = config.boot.kernelPackages.nvidiaPackages.stable;
open = true;
prime = {
offload.enable = true; offload.enable = true;
# Bus ID of the Intel GPU. You can find it using lspci, either under 3D or VGA # Bus ID of the Intel GPU. You can find it using lspci, either under 3D or VGA
@@ -36,4 +38,6 @@ in
nvidiaBusId = cfg.nvidiaBusId; nvidiaBusId = cfg.nvidiaBusId;
}; };
}; };
};
};
} }

View File

@@ -2,8 +2,8 @@
let let
cfg = config.samfelag.modules.system.pass; cfg = config.samfelag.modules.system.pass;
i3Cfg = config.samfelag.modules.desktop.i3; i3Cfg = config.samfelag.modules.desktop.wm.i3;
hyprCfg = config.samfelag.modules.desktop.hyprland; hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in in
{ {
options.samfelag.modules.system.pass = { options.samfelag.modules.system.pass = {
@@ -36,11 +36,11 @@ in
''; '';
}; };
samfelag.modules.desktop.i3.extraKeybindings = lib.mkIf i3Cfg.enable { samfelag.modules.desktop.wm.i3.extraKeybindings = lib.mkIf i3Cfg.enable {
"${i3Cfg.mod}+p" = "exec rofi-pass"; "${i3Cfg.mod}+p" = "exec rofi-pass";
}; };
samfelag.modules.desktop.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [ samfelag.modules.desktop.wm.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [
"${hyprCfg.mod}, P, exec, rofi-pass" "${hyprCfg.mod}, P, exec, rofi-pass"
]; ];
}; };

View File

@@ -8,13 +8,16 @@ in
enable = lib.mkEnableOption "ssh"; enable = lib.mkEnableOption "ssh";
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
services.openssh = { services = {
openssh = {
enable = true; enable = true;
settings = { settings = {
# TODO: Use ssh keys # TODO: Use ssh keys
PasswordAuthentication = true; PasswordAuthentication = true;
}; };
}; };
# fail2ban.enable = true;
};
networking.firewall.allowedTCPPorts = [ 22 ]; networking.firewall.allowedTCPPorts = [ 22 ];
}; };

View File

@@ -1,7 +1,7 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 GWuf0Q 8KY3le+D4r6SJVPdkjL3P4fLA7rS00F+LkRieMGcrA0 -> ssh-ed25519 GWuf0Q z5DKW5ikWJPBjNjrgoUuJF8be9f9naDOxZ74sOpf5FY
0ffzmUzTFEPiYmLG02Y0XweXTvFjEt6lao8ySE73Eoo kiV2yRp+BVwTInS1EMkzhGyfGGEdHcB9DGlbzTA9lpQ
-> ssh-ed25519 kNjiNQ 0Hg11FGDMDrus/MA9UMRA8jt3aoJYbQMJ8vM4PrYtyY -> ssh-ed25519 kNjiNQ YLZNTRHp6sj3v0wu7WMitqBykTcqaGYcfZbJkF0ougM
H9ZURqsrkmviJMpsbiKDUk8r+NWlAsrQ0OpO5U7U0dg dI8B6KF6bvSONOo/dTOq6jyYIn6Rj1AMABUeOU2hWUQ
--- jQa7EUd7cX7AexX3FCJaOb4xVZ9/TP7WXakcgVKH5PM --- V+29XmjyMdtKIFBz9VW/D/A9sM6HPLYe1HZf458md64
COˆ `ÎPØg‡êhe«E™ hyÖ×<C396>ê<EFBFBD>õø‡ƒFùfãÇ¥<C387>@ì¥AUGý ³LÑêʳÝ:÷;{ø¹<kH±í -Ú¥âŒÈwËm èœÔé~)øÄwoÏ¡šEb{÷’#{çøT '”w"<22>2sÿýIIê©§çgȦM£&”;X±éjŽS{Å ñçÂŒHxlôy¼¾úîkóòcrÅϽܟkdZÑ”\ÜÞ|¦Y²¥Þƒ¸û"ì˜S,­íwQkÝ@¡ìKnÕùªTÞ83G˜^€ŸµÇ2ð38,¼ˆdJùNgüûŸŸ¹µ¸f dþÓ¯LDÍ]éBÏîfvTO„ºÅýèŸlnž÷ŽŠ-ŽZmMn<7qwé

View File

@@ -1,9 +1,10 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 GWuf0Q V6HZPuKmDsfaVVnJveBuLwLCndktAB7xudXvB9niGRg -> ssh-ed25519 GWuf0Q HU052z43DHXbPh4m0Cn8YWEabVMdT9Ab9ZvnRTkiGiM
hEKkg2Ltbt3Ie1Ci6VabOSjp/pZeandKlZl67kqZd9A jsGBcbgj1JeYBdvnRqKT310VnWqZmRYIE+LbkPVmDxs
-> ssh-ed25519 zhVGHw BwZzAbAXSX/frkhi5wFJzDaEWXOQaqNfdEC4EIZwBX0 -> ssh-ed25519 zhVGHw 1oy7y5z6KQy+JYRIPyqfeCgJUbGWdo77NiGnVRA0QRk
cbysAZi82rbqH2T+cipPPNgsnHn2aU/tQYMlmt8zpPE qNrRnats5cFFv8K3YUtUXdSwhWkgcBGTeDlhWTkrNRM
-> ssh-ed25519 kNjiNQ ijvaL5MqfKqzD5X9uOAx78PfsUNSJkQ+nhC/EGyG03Y -> ssh-ed25519 kNjiNQ IWfsJxXu1Kg6Z5p1qNBopU0RkYt7/s6jw/DJDQXpTHc
uq2HskFBaNjTiNeipz4H9eoHJ4KDz614DSMfW3rz9Yk ouzaIxV7Y+pE8t/8s4Vk/AO/MccUpgHGhn1cq6C+E08
--- FWfT5xb1cTntOfVIjzbw1ZD6nFRfKunQL0k/0/xx+dQ --- LL3bXyeMTogvYXqjhwL75j64P9bNIFG2pwFanjOYm2o
hµôqÂâsaƒmîíì`v¸»öíŠãBÙxeZp „}§àÏÌý'd2$ürÏ»0ÚqßKE5‰NÐÊ®9®£R&(tuxX4¶<34>ïëÝ<>qgÄŒŒzvkèŸXän9B Ò )Љ>‹ÊóFÚâ®ö=»!‰Ëvÿ•½ƒE`¹Æe*ëmOg¸Jö+CT‰
Õèw+ïºÖÍtΫpû[ÝéÏ^8kÿ RYœ°_”ôýã= 8xgîö!ƒÇ

View File

@@ -1,8 +1,7 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 GWuf0Q 4t1WD76CN3hhc3073abxAsobKWKDX+yemaIxHy8PiDk -> ssh-ed25519 GWuf0Q GSvUmcsNXSkoVOD8V/UP+KAGfKX4REahFDmwlROkoSw
9O2cAi7MJVqGiTNnOIez4MACEYMB3/YyLSz4Z4YWe2c ruTijdplgtQZP3wjnNGemh3a0omKK95xsfXzkWce0lM
-> ssh-ed25519 kNjiNQ WaXpqZbqRuLo9q241VclrLfHOQ94VRB8D0RY2es8KBM -> ssh-ed25519 kNjiNQ zT/ticPDHAujEWqSUrPaGsgPBdbaLvLQ/RSMz5C0aW8
P6iayA+emjHOEg59EzXU32RCRKZaGS0j7d3wk4Is6tQ JTy+b/N6yjfPtrhYXkFWb26PGa+b/M1DVKeGsW2oimg
--- QsnjyrQe2d1K59Q/i3/NIXaK87rsDf4neQS5sKJ6yeY --- TKdmCeaBKPBBIkKvUqqqQz9DQigRuLRT2ZFto7Jtqr0
±&8"Ú¨?4 ™?¬ ÈëW†3L®<EFBFBD>þj䯕¤'HgçRs†;•¸Û<C39B>¿Ö<C2BF>t{E"ÜævóŸè©Š•÷õÍ17%&Óü­(†ô{Ë<>õŸE¦.§Óô3ÇSˆzNcÅçVÒ·läˆfŠWÊu5d2
$É!þÈÄëYíêjuÌ*8Éc¿DÖC°Á!"<22>

View File

@@ -2,12 +2,14 @@ let
id-reykjavik = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFwwpKfxNmUyBoPZqz1jYc6arCdHPvJrEsBN49m/P3By"; id-reykjavik = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFwwpKfxNmUyBoPZqz1jYc6arCdHPvJrEsBN49m/P3By";
id-hvannadal = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICy1ocZywBvFHpIj+FvaC7QspRWuLXjy6fwakq9t+0Ev"; id-hvannadal = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICy1ocZywBvFHpIj+FvaC7QspRWuLXjy6fwakq9t+0Ev";
id-thingvellir = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEIvWEwYayFK8iRb4g2+cnQXlqiMBu3aWxTahXkaCNG7"; id-thingvellir = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEIvWEwYayFK8iRb4g2+cnQXlqiMBu3aWxTahXkaCNG7";
id-quinto = " ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINxgIT2+aoP+ZLMPupV8M0UwCLX6A3s+H6z3BJPCjJc0";
# --- Host lists --- # --- Host lists ---
# Since we want to be able to manage/edit all secrets from reykjavik, we create helper lists that # Since we want to be able to manage/edit all secrets from reykjavik, we create helper lists that
# always contain reykjavik # always contain reykjavik
reykjavik = [id-reykjavik]; reykjavik = [id-reykjavik];
thingvellir = [id-reykjavik id-thingvellir]; thingvellir = [id-reykjavik id-thingvellir];
quinto = [id-reykjavik id-quinto];
samfelag-hosts = [ samfelag-hosts = [
id-reykjavik id-reykjavik

35
secrets/ssh-keys/deploy_keys.sh Executable file
View File

@@ -0,0 +1,35 @@
#!/usr/bin/env bash
set -e
read -p "Hostname: " HOSTNAME
read -p "IP (leave empty tu use hostname): " HOSTIP
if [ -z "${HOSTIP}" ]; then
HOSTIP=$HOSTNAME
echo "Using $HOSTIP"
fi
read -p "Username: " USERNAME
PRIVATE_KEY="id_$HOSTNAME"
ENCRYPTED_PRIVATE_KEY="$PRIVATE_KEY.gpg"
PUBLIC_KEY="id_$HOSTNAME.pub"
DECRYPTED=f
if [ ! -f $PRIVATE_KEY ]; then
DECRYPTED=t
echo "Decrypting private key ..."
gpg -d $ENCRYPTED_PRIVATE_KEY > $PRIVATE_KEY
fi
echo "Deploying private key ($PRIVATE_KEY) to ($USERNAME@$HOSTIP) ..."
scp $PRIVATE_KEY $USERNAME@$HOSTIP:.ssh/$PRIVATE_KEY
echo "Deploying public key ($PUBLIC_KEY) to ($USERNAME@$HOSTIP) ..."
scp $PUBLIC_KEY $USERNAME@$HOSTIP:.ssh/$PUBLIC_KEY
if [ "$DECRYPTED" = 't' ]; then
echo "Deleting decrypted private key ..."
rm $PRIVATE_KEY
fi
echo "Done"

Binary file not shown.

View File

@@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINxgIT2+aoP+ZLMPupV8M0UwCLX6A3s+H6z3BJPCjJc0 marc@reykjavik