Compare commits

..

68 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
marc
8833cb4f7a Fix eww scripts timing out 2024-03-06 23:42:32 +01:00
marc
6a4dcadfba Added eww bluetooth module 2024-03-06 23:35:51 +01:00
marc
f2b20c7acd Use cage for the display manager 2024-03-02 23:03:20 +01:00
marc
d1b63fe326 Eww reformatting and fixes 2024-03-02 18:06:17 +01:00
marc
466ddf2cd9 Added wayland, hyprland and eww 2024-03-02 17:38:35 +01:00
marc
95944b2486 Added vatnajokull NAS as a separate module 2024-02-20 20:22:41 +01:00
marc
32654faf98 Added tailscale dependency to consul and nomad 2024-02-20 00:43:57 +01:00
marc
bf8c91e632 Flake upgrade 2024-02-18 23:24:30 +01:00
marc
3d89540ff8 Added zoxide 2024-02-18 22:17:14 +01:00
marc
4f70bf991c Migrate all jobs to thingvellir 2024-02-18 19:33:57 +01:00
marc
2e3dad1c1b Added Thingvellir nomad volumes 2024-02-16 20:41:05 +01:00
marc
87a4d79c71 Thingvellir as nomad server 2024-02-16 18:21:24 +01:00
marc
3c23709394 Set thingvellir as consul server 2024-02-16 18:15:13 +01:00
marc
481914022c Modified nomad config 2024-02-13 21:20:43 +01:00
marc
14e9bcd7c3 Fixed secret name 2024-02-13 00:12:48 +01:00
marc
a09aedab3f Added consul server config 2024-02-13 00:07:13 +01:00
marc
ae58914cc2 Fixed secrets config 2024-02-12 22:19:40 +01:00
marc
ea276bb6d1 Refactored secrets (each host has their own) 2024-02-12 22:14:24 +01:00
marc
360adace1e Added consul and nomad to thingvellir 2024-02-12 21:59:30 +01:00
marc
3f06ae0cb2 Add agenix to thingvellir 2024-02-12 21:16:56 +01:00
marc
5cce9461c1 Added Thingvellir 2024-02-11 22:06:54 +01:00
marc
e716f7cb7d Added server options for nomad and consul 2024-02-11 20:58:26 +01:00
147 changed files with 4934 additions and 2982 deletions

View File

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

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: 8
normal:
family: Iosevka Nerd Font
style: Regular
import:
- ~/.config/alacritty/theme.yml

View File

@@ -1,7 +1,4 @@
{
"datacenter": "samfelag",
"data_dir": "/opt/consul",
"tls": {
"defaults": {
"verify_incoming": false,
@@ -14,28 +11,5 @@
},
"auto_encrypt": {
"tls": true
},
"bind_addr": "{{ GetInterfaceIP \"tailscale0\" }}",
"advertise_addr": "{{ GetInterfaceIP \"tailscale0\" }}",
"client_addr": "0.0.0.0",
"retry_join": ["100.80.195.56", "100.107.148.47"],
"ports": {
"grpc_tls": 8502
},
"acl": {
"enabled": true,
"default_policy": "allow",
"enable_token_persistence": true
},
"connect": {
"enabled": true
},
"performance": {
"raft_multiplier": 1
}
}

View File

@@ -0,0 +1,25 @@
{
"datacenter": "samfelag",
"bind_addr": "{{ GetInterfaceIP \"tailscale0\" }}",
"advertise_addr": "{{ GetInterfaceIP \"tailscale0\" }}",
"client_addr": "{{ GetInterfaceIP \"tailscale0\" }} 127.0.0.1",
"ports": {
"grpc_tls": 8502
},
"acl": {
"enabled": true,
"default_policy": "allow",
"enable_token_persistence": true
},
"connect": {
"enabled": true
},
"performance": {
"raft_multiplier": 1
}
}

View File

@@ -0,0 +1,5 @@
{
"retry_join": [
"100.99.167.21"
]
}

View File

@@ -0,0 +1,22 @@
{
"server": true,
"bootstrap_expect": 1,
"ui_config": {
"enabled": true
},
"tls": {
"defaults": {
"verify_incoming": true,
"verify_outgoing": true,
"ca_file": "/etc/consul.d/certs/consul-agent-ca.pem",
"cert_file": "/etc/consul.d/certs/samfelag-server-consul.pem",
"key_file": "/etc/consul.d/certs/samfelag-server-consul-key.pem"
},
"internal_rpc": {
"verify_server_hostname": true
}
},
"auto_encrypt": {
"allow_tls": true
}
}

View File

@@ -10,22 +10,23 @@
(setq display-line-numbers-type t)
;; Fonts
(setq doom-font (font-spec :family "Iosevka Nerd Font" :size 15))
(setq doom-unicode-font (font-spec :family "Iosevka Nerd Font" :size 15))
(setq doom-font (font-spec :family "Iosevka Nerd Font" :size 18))
(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
;; (use-package base16-theme
;; :init (add-to-list 'custom-theme-load-path "~/.config/doom/themes")
;; :ensure t
;; :config
;; (load-theme 'base16-samfelag t))
(after! doom-themes
(load-theme 'doom-nano-dark t))
(use-package! doom-nano-modeline
(use-package base16-theme
:init (add-to-list 'custom-theme-load-path "~/.config/doom/themes")
:ensure t
:config
(doom-nano-modeline-mode 1)
(global-hide-mode-line-mode 1))
(load-theme 'base16-samfelag t))
;; (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:
;;
@@ -48,13 +49,25 @@
(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
;; -----------------------------------------------------------------------------
(use-package projectile
:config
(setq projectile-project-search-path '("~/projects")))
;; -----------------------------------------------------------------------------
;; vterm
@@ -62,7 +75,7 @@
(use-package vterm
:config
(setq vterm-shell "zsh"))
;; -----------------------------------------------------------------------------
;; elisp
@@ -74,14 +87,14 @@
;; -----------------------------------------------------------------------------
;; LSP
;; -----------------------------------------------------------------------------
(use-package lsp-mode
:init
:hook (;;
(clojure-mode . lsp-deferred)
(python-mode . lsp-deferred)
;; if you want which-key integration
(lsp-mode . lsp-enable-which-key-integration))
:commands (lsp lsp-deferred))
;; (use-package lsp-mode
;; :init
;; :hook (;;
;; (clojure-mode . lsp-deferred)
;; (python-mode . lsp-deferred)
;; ;; if you want which-key integration
;; (lsp-mode . lsp-enable-which-key-integration))
;; :commands (lsp lsp-deferred))
;; -----------------------------------------------------------------------------
@@ -94,13 +107,13 @@
;; accept underscore as part of a word
(superword-mode 1)
(modify-syntax-entry ?_ "w" python-mode-syntax-table))
(add-hook 'python-mode-hook 'my-python-mode-hook)
(use-package py-autopep8
:config
(setq py-autopep8-options '("--max-line-length=120")))
(use-package pipenv
:config
(setq pipenv-with-projectile t)
@@ -109,7 +122,7 @@
;; -----------------------------------------------------------------------------
;; Web (HTML + CSS)
;; -----------------------------------------------------------------------------
(use-package! lsp-tailwindcss)
;; (use-package! lsp-tailwindcss)
;; -----------------------------------------------------------------------------
;; Org
@@ -138,8 +151,8 @@
("lambda" "λ")
("not in" "")
("in" ""))
(pretty-hook emacs-lisp-mode)
;; ("defun" "𝙛")

View File

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

@@ -0,0 +1,149 @@
*{
all: unset;
font-family: Iosevka;
font-size: 16px;
}
/** Top bar **/
.top-bar {
padding-left: 16px;
padding-right: 24px;
}
tooltip.background {
background-color: $base00;
border-radius: 10px;
color: $base07;
}
tooltip label {
margin: 6px;
}
.module {
margin: 0px 0px 0px 0px;
border-radius: 0px 0px 0px 0px;
padding-left: 8px;
padding-right: 8px;
}
.icon {
font-size: 24px;
padding-right: 8px;
}
.separator {
padding-left: 4px;
padding-right: 4px;
color: $base02;
}
/** Bluetooth **/
.bluetooth {
color: $base0D;
}
.bluetooth.icon {
padding-right: 4px;
}
.bluetooth-text {
padding-left: 8px;
}
/** Wifi **/
.wifi {
color: $base0D;
}
.wifi.icon {
padding-right: 12px;
}
.wifi-text {
padding-left: 8px;
}
/** Volume **/
.volume {
color: $base0A;
}
.volume-mute {
color: $base04;
}
.volume-bar {
padding-left: 8px;
highlight {
background-color: $base0A;
border-radius: 10px;
}
trough {
background-color: $base04;
min-height: 10px;
border-radius: 10px;
}
}
/** Battery **/
.battery.charging {
color: $base0B;
}
.battery.discharging {
padding-right: 0px;
color: $base04;
}
.battery-bar {
padding-left: 8px;
progress {
background-color: $base0B;
border-radius: 10px;
min-height: 10px;
}
trough {
background-color: $base04;
border-radius: 10px;
min-height: 10px;
min-width: 60px;
}
}
/** Clock **/
.clock {
color: $base05;
}
.clock-time {
padding-left: 4px;
padding-right: 4px;
}
.clock-date {
padding-left: 4px;
}
.clock-year {
padding-bottom: 8px;
font-size: 75%;
}
/** Workspaces **/
.workspace-entry {
padding-left: 8px;
padding-right: 8px;
}
.workspace-entry.occupied {
color: $base06;
}
.workspace-entry.empty {
color: $base02;
}
.workspace-entry.current {
color: $base0C;
}

View File

@@ -0,0 +1,44 @@
(include "./widgets/common.yuck")
(include "./widgets/battery.yuck")
(include "./widgets/bluetooth.yuck")
(include "./widgets/clock.yuck")
(include "./widgets/volume.yuck")
(include "./widgets/workspaces.yuck")
(include "./widgets/wifi.yuck")
(defwindow top-bar
:monitor 0
:geometry (geometry :x "0%"
:y "8px"
:width "100%"
:height "40px"
:anchor "top center")
:stacking "fg"
:exclusive "true"
(box :class "top-bar"
:orientation "h"
:space-evenly "true"
(bar-left)
(bar-center)
(bar-right)))
(defwidget bar-left []
(box :halign "start"
:orientation "h"
(workspaces-module)))
(defwidget bar-center []
(box :halign "center"
:orientation "h"))
(defwidget bar-right []
(box :halign "end"
:orientation "h"
:space-evenly "false"
(bluetooth-module)
(wifi-module)
(battery-module)
(volume-module)
(sep)
(clock-module)))

2
config/eww/eww.scss Normal file
View File

@@ -0,0 +1,2 @@
@import './colour-scheme.scss'
@import './bars/top-bar.scss'

1
config/eww/eww.yuck Normal file
View File

@@ -0,0 +1 @@
(include "./bars/top-bar.yuck")

View File

@@ -0,0 +1,6 @@
#!/usr/bin/env bash
hyprctl monitors -j | jq '.[] | select(.focused) | .activeWorkspace.id'
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}'

View File

@@ -0,0 +1,7 @@
#!/bin/env bash
amixer sget Master | \
grep 'Left:' | \
sed -e 's/[^[]*\[\([0-9]*\)%\][^[]\[\(\w*\)\]/{"volume": \1, "muted": \2}/' \
-e 's/on/false/' \
-e 's/off/true/'

View File

@@ -0,0 +1,8 @@
#!/bin/env bash
CONN_INFO=$(nmcli -g in-use,ssid,signal dev wifi list | \
grep "^*" | \
sed -e 's/\*:\([^:]*\):\([0-9]*\)/ ,"ssid": "\1", "signal": \2/')
CONNECTED=$([[ -z $CONN_INFO ]] && echo "false" || echo "true")
echo "{\"connected\": \"$CONNECTED\"$CONN_INFO}"

View File

@@ -0,0 +1,11 @@
#!/bin/env bash
spaces (){
WORKSPACE_WINDOWS=$(hyprctl workspaces -j | jq 'map({key: .id | tostring, value: .windows}) | from_entries')
seq 1 6 | jq --argjson windows "${WORKSPACE_WINDOWS}" --slurp -Mc 'map(tostring) | map({id: ., windows: ($windows[.]//0)})'
}
spaces
socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do
spaces
done

View File

@@ -0,0 +1,21 @@
(defvar battery-reveal false)
(defwidget battery-module []
(eventbox :onhover "${EWW_CMD} update battery-reveal=true"
:onhoverlost "${EWW_CMD} update battery-reveal=false"
(box :class "module battery ${EWW_BATTERY.BAT0.status == "Discharging" ? "discharging" : "charging"}"
:orientation "h"
:space-evenly "false"
:tooltip "Battery: ${EWW_BATTERY.BAT0.capacity}%"
(label :text {EWW_BATTERY.BAT0.status == "Discharging" ?
EWW_BATTERY.BAT0.capacity < 10 ? "󰂎" : EWW_BATTERY.BAT0.capacity < 30 ? "󱊡" : EWW_BATTERY.BAT0.capacity < 70 ? "󱊢" : "󱊣" :
EWW_BATTERY.BAT0.capacity < 10 ? "󰢟" : EWW_BATTERY.BAT0.capacity < 30 ? "󱊤" : EWW_BATTERY.BAT0.capacity < 70 ? "󱊥" : "󱊦"}
:class "battery icon")
(revealer :transition "slideleft"
:duration "750ms"
:reveal {battery-reveal}
(progress :class "battery-bar"
:orientation "h"
:valign "center"
:width 60
:value {EWW_BATTERY.BAT0.capacity})))))

View File

@@ -0,0 +1,29 @@
(defvar bluetooth-reveal false)
(defpoll bluetooth-status
:initial ""
:interval "10s"
"bluetoothctl show | grep -q \"Powered: yes\" && { [[ $(bluetoothctl devices Connected) ]] && echo \"connected\" || echo \"on\"; } || echo \"off\"")
(defpoll bluetooth-devices
:initial ""
:interval "20s"
"for device in $(bluetoothctl devices Connected | grep Device | cut -d ' ' -f 2); do bluetoothctl info $device | grep \"Alias\" | cut -d ' ' -f 2-; done;")
(defwidget bluetooth-module []
(eventbox :onhover "${EWW_CMD} update bluetooth-reveal=true"
:onhoverlost "${EWW_CMD} update bluetooth-reveal=false"
:onclick "$HOME/.config/rofi/menus/bluetooth/bluetooth.sh &"
(box :class "module bluetooth"
:orientation "h"
:space-evenly "false"
:tooltip {bluetooth-status == "connected" ? bluetooth-devices :
bluetooth-status == "on" ? "Bluetooth: On" : "Bluetooth: Off"}
(label :text {bluetooth-status == "connected" ? "󰂱" :
bluetooth-status == "on" ? "󰂯" : "󰂲"}
:class "bluetooth icon")
(revealer :transition "slideleft"
:duration "750ms"
:reveal {bluetooth-reveal && winfo.connected}
(label :class "bluetooth-text"
:text {bluetooth-status == "connected" ? "Connected" :
bluetooth-status == "on" ? "On" : "Off"})))))

View File

@@ -0,0 +1,21 @@
(defpoll clock-time :interval "1s" "date +\"%H:%M:%S\"")
(defpoll clock-date :interval "1m" "date +\"%d/%m\"")
(defpoll clock-year :interval "1h" "date +\"%Y\"")
(defvar date-reveal false)
(defwidget clock-module []
(eventbox :onhover "${EWW_CMD} update date-reveal=true"
:onhoverlost "${EWW_CMD} update date-reveal=false"
(box :class "module clock"
:orientation "h"
:space-evenly "false"
(label :text clock-time
:class "clock-time")
(revealer :transition "slideleft"
:duration "750ms"
:reveal {date-reveal}
(box :orientation "h"
(label :text clock-date
:class "clock-date")
(label :text clock-year
:class "clock-year"))))))

View File

@@ -0,0 +1,3 @@
(defwidget sep []
(label :text "|"
:class "separator"))

View File

@@ -0,0 +1,26 @@
(defpoll vinfo
:initial "{\"volume\": 0, \"muted\": false}"
:interval "1s"
"bash ~/.config/eww/scripts/get-volume-info.sh")
(defvar volume-reveal false)
(defwidget volume-module []
(eventbox :onhover "${EWW_CMD} update volume-reveal=true"
:onhoverlost "${EWW_CMD} update volume-reveal=false"
(box :class "module volume"
:orientation "h"
:space-evenly false
:tooltip {vinfo.muted? "muted" : "Volume: ${vinfo.volume}%"}
(label :text {vinfo.muted ? "󰝟" : vinfo.volume < 10 ? "󰕿" : vinfo.volume < 70 ? "󰖀" : "󰕾"}
:class "volume icon ${vinfo.muted ? "volume-mute" : ""}")
(revealer :transition "slideleft"
:duration "750ms"
:reveal {volume-reveal && !vinfo.muted}
(scale :class "volume-bar"
:orientation "h"
:valign "center"
:width 60
:min 0
:max 101
:value {vinfo.volume}
:onchange "amixer sset Master {}% > /dev/null")))))

View File

@@ -0,0 +1,25 @@
(defvar wifi-reveal false)
(defpoll winfo
:initial "{\"connected\": \"false\"}"
:interval "10s"
"bash ~/.config/eww/scripts/get-wifi-info.sh")
(defwidget wifi-module []
(eventbox :onhover "${EWW_CMD} update wifi-reveal=true"
:onhoverlost "${EWW_CMD} update wifi-reveal=false"
:onclick "$HOME/.config/rofi/menus/wifi/wifi.sh &"
(box :class "module wifi"
:orientation "h"
:space-evenly "false"
:tooltip {winfo.connected ? "Signal: ${winfo.signal}%" : "Disconnected"}
(label :text { !winfo.connected ? "󰤭" :
winfo.signal < 25 ? "󰤟" :
winfo.signal < 50 ? "󰤢" :
winfo.signal < 75 ? "󰤥" : "󰤨"}
:class "wifi icon")
(revealer :transition "slideleft"
:duration "750ms"
:reveal {wifi-reveal && winfo.connected}
(label :class "wifi-text"
:text {winfo.connected ? winfo.ssid : "Disconnected"})))))

View File

@@ -0,0 +1,10 @@
(deflisten workspaces :initial "[]" "bash ~/.config/eww/scripts/get-workspaces.sh")
(deflisten current_workspace :initial "1" "bash ~/.config/eww/scripts/get-active-workspace.sh")
(defwidget workspaces-module []
(box :space-evenly true
(label :text "${workspaces}${current_workspace}"
:visible false)
(for workspace in workspaces
(eventbox :onclick "hyprctl dispatch workspace ${workspace.id}"
(label :text "${workspace.id == current_workspace ? "" : ""}"
:class "workspace-entry ${workspace.id == current_workspace ? "current" : ""} ${workspace.windows > 0 ? "occupied" : "empty"}")))))

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

@@ -0,0 +1,13 @@
{
"client": {
"enabled": true,
"network_interface": "tailscale0",
"options": {
"docker.volumes.enabled": true
}
},
"consul": {
"address": "127.0.0.1:8500"
}
}

View File

@@ -0,0 +1,11 @@
{
"datacenter": "samfelag",
"bind_addr": "{{ GetInterfaceIP \"tailscale0\" }}",
"advertise": {
"http": "{{ GetInterfaceIP \"tailscale0\" }}",
"rpc": "{{ GetInterfaceIP \"tailscale0\" }}",
"serf": "{{ GetInterfaceIP \"tailscale0\" }}"
}
}

View File

@@ -0,0 +1,10 @@
{
"client": {
"host_volume": {
"test": {
"path": "/mnt/raid1/nomad_volumes/nextcloud/nextcloud",
"read_only": false
}
}
}
}

View File

@@ -0,0 +1,40 @@
client {
# --- Network ---
host_network "public" {
interface = "ens3"
}
# --- Volumes ---
# DNS
host_volume "dns-pihole" {
path = "/var/lib/nomad_volumes/dns/pihole/etc-pihole"
read_only = false
}
host_volume "dns-dnsmasq" {
path = "/var/lib/nomad_volumes/dns/pihole/etc-dnsmasq.d"
read_only = false
}
# Caddy
host_volume "caddyfile" {
path = "/var/lib/nomad_volumes/caddy/Caddyfile"
read_only = false
}
host_volume "caddy-data" {
path = "/var/lib/nomad_volumes/caddy/data"
read_only = false
}
# Gitea
host_volume "gitea" {
path = "/mnt/vatnajokull/nomad_volumes/gitea/data"
read_only = false
}
# Folkugat
host_volume "folkugat" {
path = "/var/lib/nomad_volumes/folkugat"
read_only = false
}
}

View File

@@ -0,0 +1,6 @@
{
"server": {
"enabled": true,
"bootstrap_expect": 1
}
}

View File

@@ -4,7 +4,7 @@
*
**/
@import "../../theme.rasi"
@import "~/.config/rofi/theme.rasi"
/*****----- 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 {

View File

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

View File

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

View File

@@ -58,14 +58,10 @@ run_cmd() {
elif [[ $1 == '--suspend' ]]; then
systemctl suspend
elif [[ $1 == '--logout' ]]; then
if [[ "$DESKTOP_SESSION" == 'openbox' ]]; then
openbox --exit
elif [[ "$DESKTOP_SESSION" == 'bspwm' ]]; then
bspc quit
elif [[ "$DESKTOP_SESSION" == 'i3' ]]; then
if [[ "$DESKTOP_SESSION" == 'i3' ]]; then
i3-msg exit
elif [[ "$DESKTOP_SESSION" == 'plasma' ]]; then
qdbus org.kde.ksmserver /KSMServer logout 0 0 0
elif [[ ! -z $HYPRLAND_INSTANCE_SIGNATURE ]]; then
hyprctl dispatch exit
fi
fi
else
@@ -85,8 +81,8 @@ case ${chosen} in
$lock)
if command -v i3lock-color; then
i3lock-color -c 808F85 && sleep 1
# elif command -v betterlockscreen; then
# betterlockscreen -l
elif command -v hyprlock; then
hyprlock
fi
;;
$suspend)

View File

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

View File

@@ -1,5 +1,5 @@
[[ -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"
}

View File

@@ -0,0 +1 @@
unset ZSH_AUTOSUGGEST_USE_ASYNC

View File

@@ -0,0 +1 @@
[[ -x "$(command -v zoxide)" ]] && eval "$(zoxide init --cmd cd zsh)"

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
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";
outputs = { self, nixpkgs, flake-utils }:
@@ -8,8 +8,8 @@
pkgs = nixpkgs.legacyPackages.${system};
python = pkgs.python39;
pythonPackages = pkgs.python39Packages;
python = pkgs.python312;
pythonPackages = pkgs.python312Packages;
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]

100
data/nomad/caddy.nomad Normal file
View File

@@ -0,0 +1,100 @@
job "caddy" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "caddy" {
count = 1
volume "caddyfile" {
type = "host"
read_only = false
source = "caddyfile"
}
volume "caddy-data" {
type = "host"
read_only = false
source = "caddy-data"
}
restart {
attempts = 2
interval = "2m"
delay = "1m"
mode = "fail"
}
network {
port "http" {
static = 80
to = 80
host_network = "public"
}
port "https" {
static = 443
to = 443
host_network = "public"
}
port "config" {
static = 2019
to = 2019
}
dns {
servers = ["100.80.195.56"]
}
}
###
# CADDY
###
task "caddy" {
driver = "docker"
volume_mount {
volume = "caddyfile"
destination = "/etc/caddy/Caddyfile"
read_only = false
}
volume_mount {
volume = "caddy-data"
destination = "/data"
read_only = false
}
env {
}
config {
image = "caddy:2.3.0-alpine"
ports = ["http", "https", "config"]
volumes = [
"/mnt/vatnajokull/lajuntament-web:/sites/lajuntament-web",
"/mnt/vatnajokull/folkugat-web:/sites/folkugat-web",
]
}
resources {
cpu = 500
memory = 128
}
service {
name = "caddy"
check {
type = "tcp"
port = "http"
interval = "30s"
timeout = "2s"
}
}
}
}
}

112
data/nomad/dns.nomad Normal file
View File

@@ -0,0 +1,112 @@
job "dns" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "dns" {
count = 1
restart {
attempts = 10
delay = "15s"
}
# VOLUMES
## pihole
volume "pihole" {
type = "host"
read_only = false
source = "dns-pihole"
}
volume "dnsmasq" {
type = "host"
read_only = false
source = "dns-dnsmasq"
}
## unbound
volume "unbound" {
type = "host"
read_only = false
source = "dns-unbound"
}
# NETWORK
network {
port "dns" {
static = 53
}
port "http" {
to = 80
}
port "unbound" {
static = 5533
}
}
# TASKS
task "pihole" {
driver = "docker"
volume_mount {
volume = "pihole"
destination = "/etc/pihole"
read_only = false
}
volume_mount {
volume = "dnsmasq"
destination = "/etc/dnsmasq.d"
read_only = false
}
env {
TZ = "Europe/Amsterdam"
WEBPASSWORD = "elbonfeix"
ServerIP = "100.80.195.56"
}
config {
image = "pihole/pihole:v5.7"
ports = ["dns", "http"]
}
resources {
cpu = 100
memory = 32
}
service {
name = "pihole-gui"
port = "http"
}
}
task "unbound" {
driver = "docker"
volume_mount {
volume = "unbound"
destination = "/opt/unbound/etc/unbound/"
read_only = false
}
config {
image = "mvance/unbound:latest"
ports = ["unbound"]
}
resources {
cpu = 50
memory = 32
}
}
}
}

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"
}
}
}
}

71
data/nomad/gitea.nomad Normal file
View File

@@ -0,0 +1,71 @@
job "gitea" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "gitea" {
count = 1
restart {
attempts = 5
delay = "1m"
}
network {
port "http" {
to = 3000
}
port "ssh" {
static = 2222
to = 22
host_network = "public"
}
}
task "gitea" {
driver = "docker"
env {
USER_UID = "1001"
USER_GID = "1001"
}
config {
image = "gitea/gitea:latest"
ports = ["http", "ssh"]
volumes = ["/mnt/vatnajokull/nomad_volumes/gitea/data:/data"]
}
resources {
cpu = 1000
memory = 400
}
service {
name = "gitea"
port = "http"
check {
type = "tcp"
port = "http"
interval = "30s"
timeout = "2s"
}
}
service {
name = "gitea-ssh"
port = "ssh"
check {
type = "tcp"
port = "ssh"
interval = "30s"
timeout = "2s"
}
}
}
}
}

188
data/nomad/nextcloud.nomad Normal file
View File

@@ -0,0 +1,188 @@
job "nextcloud" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "nextcloud" {
count = 1
restart {
attempts = 5
delay = "1m"
}
# Network
network {
port "nextcloud" {
static = 8080
to = 80
}
port "mariadb" {
static = 3306
to = 3306
}
# port "collabora" {
# to = 9980
# }
}
# Volumes
volume "nextcloud" {
type = "host"
read_only = false
source = "nextcloud"
}
volume "mariadb" {
type = "host"
read_only = false
source = "mariadb"
}
# volume "collabora" {
# type = "host"
# read_only = false
# source = "collabora"
# }
###
# NEXTCLOUD
###
task "nextcloud" {
driver = "docker"
user = 1001
env {
MYSQL_PASSWORD = "hxKOD13MUh"
MYSQL_DATABASE = "nextcloud"
MYSQL_USER = "nextcloud"
MYSQL_HOST = "${NOMAD_ADDR_mariadb}"
NEXTCLOUD_TRUSTED_DOMAINS = "nextcloud.samfelag.xyz"
OVERWRITEPROTOCOL = "https"
}
volume_mount {
volume = "nextcloud"
destination = "/var/www/html"
read_only = false
}
config {
image = "nextcloud:latest"
ports = ["nextcloud"]
}
resources {
cpu = 2000
memory = 512
}
service {
name = "nextcloud"
port = "nextcloud"
check {
type = "tcp"
port = "nextcloud"
interval = "30s"
timeout = "2s"
}
}
}
###
# MARIADB
###
task "mariadb" {
driver = "docker"
user = 1001
env {
MYSQL_ROOT_PASSWORD = "hxKOD13MUh"
MYSQL_ROOT_HOST = "${NOMAD_IP_mariadb}"
MYSQL_PASSWORD = "hxKOD13MUh"
MYSQL_DATABASE = "nextcloud"
MYSQL_USER = "nextcloud"
}
volume_mount {
volume = "mariadb"
destination = "/var/lib/mysql"
read_only = false
}
config {
image = "mariadb:10.5"
ports = ["mariadb"]
}
resources {
cpu = 1000
memory = 256
}
service {
name = "mariadb"
tags = ["mariadb"]
port = "mariadb"
check {
type = "tcp"
port = "mariadb"
interval = "30s"
timeout = "2s"
}
}
}
###
# COLLABORA
###
# task "collabora" {
# driver = "docker"
# env {
# aliasgroup1 = "https://nextcloud.lajuntament.space:443"
# username = "lajuntament"
# password = "eLn1lIm4rc"
# }
# volume_mount {
# volume = "collabora"
# destination = "/etc/loolwsd"
# read_only = false
# }
# config {
# image = "collabora/code:latest"
# ports = ["collabora"]
# }
# resources {
# cpu = 2000
# memory = 1024
# }
# service {
# name = "collabora"
# port = "collabora"
# check {
# type = "tcp"
# port = "collabora"
# interval = "30s"
# timeout = "2s"
# }
# }
# }
}
}

View File

@@ -0,0 +1,67 @@
job "collabora" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "collabora" {
count = 1
restart {
attempts = 5
delay = "1m"
}
network {
port "http" {
to = 9980
}
}
volume "collabora" {
type = "host"
read_only = false
source = "collabora"
}
task "collabora" {
driver = "docker"
env {
domain = "nextcloud\\.lajuntament\\.space"
username = "lajuntament"
password = "eLn1lIm4rc"
extra_params = "--o:ssl.enable=false"
}
volume_mount {
volume = "collabora"
destination = "/etc/loolwsd"
read_only = false
}
config {
image = "collabora/code:latest"
ports = ["http"]
}
resources {
cpu = 1500
memory = 1024
}
service {
name = "collabora"
port = "http"
check {
type = "tcp"
port = "http"
interval = "30s"
timeout = "2s"
}
}
}
}
}

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"
}
}
}
}

106
data/nomad/old/lwt.nomad Normal file
View File

@@ -0,0 +1,106 @@
job "lwt" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "lwt" {
count = 1
restart {
attempts = 10
delay = "30s"
}
# VOLUMES
volume "lwt-mariadb" {
type = "host"
read_only = false
source = "lwt-mariadb"
}
volume "lwt" {
type = "host"
read_only = false
source = "lwt"
}
# NETWORK
network {
port "lwt" {
to = 80
}
port "mariadb" {
static = 33306
to = 3306
}
}
# TASKS
task "mariadb" {
driver = "docker"
user = 1001
volume_mount {
volume = "lwt-mariadb"
destination = "/var/lib/mysql"
read_only = false
}
env {
MYSQL_ALLOW_EMPTY_PASSWORD = "no"
MYSQL_ROOT_PASSWORD = "root"
}
config {
image = "mariadb:10.7"
ports = ["mariadb"]
}
resources {
cpu = 100
memory = 128
}
}
task "lwt" {
driver = "docker"
config {
image = "ghcr.io/hugofara/lwt:master"
ports = ["lwt"]
}
volume_mount {
volume = "lwt"
destination = "/var/www/html/media"
read_only = false
}
env {
DB_HOST = "${attr.unique.network.ip-address}:33306" # "100.91.225.117"
}
resources {
cpu = 100
memory = 128
}
service {
name = "lwt"
port = "lwt"
check {
type = "tcp"
port = "lwt"
interval = "30s"
timeout = "10s"
}
}
}
}
}

View File

@@ -0,0 +1,71 @@
job "minecraft" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "minecraft" {
count = 1
volume "minecraft" {
type = "host"
read_only = false
source = "minecraft"
}
restart {
attempts = 2
interval = "2m"
delay = "1m"
mode = "fail"
}
network {
port "server" {
static = 25565
to = 25565
host_network = "minecraft"
}
}
###
# MINECRAFT SERVER
###
task "minecraft" {
driver = "docker"
volume_mount {
volume = "minecraft"
destination = "/data"
read_only = false
}
env {
EULA = "TRUE"
TZ = "Europe/Madrid"
}
config {
image = "itzg/minecraft-server"
ports = ["server"]
}
resources {
cpu = 2800
memory = 1900
}
service {
name = "minecraft"
check {
type = "tcp"
port = "server"
interval = "30s"
timeout = "2s"
}
}
}
}
}

View File

@@ -0,0 +1,133 @@
job "moimoin" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "moimoin" {
count = 1
restart {
attempts = 10
delay = "30s"
}
# VOLUMES
volume "mysql" {
type = "host"
read_only = false
source = "moimoin"
}
# NETWORK
network {
port "moimoin-front" {
to = 5000
}
port "moimoin-back" {
to = 3000
}
port "mysql" {
static = 33306
to = 3306
}
}
# TASKS
task "mysql" {
driver = "docker"
user = 1001
volume_mount {
volume = "mysql"
destination = "/var/lib/mysql"
read_only = false
}
env {
MYSQL_DATABASE = "xat-osr"
MYSQL_ROOT_PASSWORD = "estrell4galicia"
}
config {
image = "arm64v8/mysql:latest"
ports = ["mysql"]
}
resources {
cpu = 500
memory = 512
}
}
task "moimoin-back" {
driver = "docker"
config {
image = "marc.sastre.cat/moimoin-back:latest"
ports = ["moimoin-back"]
}
env {
MYSQL_HOST = "${attr.unique.network.ip-address}" # "100.91.225.117"
MYSQL_PORT = "33306"
MYSQL_USER = "root"
MYSQL_PASSWORD = "estrell4galicia"
MYSQL_NAME = "xat-osr"
CHAT_ADMIN_PSWD = "cervesaEspecial"
CLIENT_HOST = "marc.sastre.cat/moimoin"
}
resources {
cpu = 100
memory = 128
}
service {
name = "moimoin-back"
port = "moimoin-back"
check {
type = "tcp"
port = "moimoin-back"
interval = "30s"
timeout = "10s"
}
}
}
task "moimoin-front" {
driver = "docker"
config {
image = "marc.sastre.cat/moimoin-front:latest"
ports = ["moimoin-front"]
}
env {
CLIENT_PORT = "5000"
}
resources {
cpu = 100
memory = 128
}
service {
name = "moimoin-front"
port = "moimoin-front"
check {
type = "tcp"
port = "moimoin-front"
interval = "30s"
timeout = "10s"
}
}
}
}
}

View File

@@ -0,0 +1,52 @@
job "organice" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "organice" {
count = 1
restart {
attempts = 5
delay = "1m"
}
network {
port "http" {
to = 5000
}
}
task "organice" {
driver = "docker"
env {
ORGANICE_WEBDAV_URL = "https://nextcloud.lajuntament.space/remote.php/dav/files/marc/"
}
config {
image = "twohundredok/organice:latest"
ports = ["http"]
}
resources {
cpu = 100
memory = 128
}
service {
name = "organice"
port = "http"
check {
type = "tcp"
port = "http"
interval = "30s"
timeout = "2s"
}
}
}
}
}

View File

@@ -0,0 +1,70 @@
job "pasta" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "pasta" {
count = 1
restart {
attempts = 5
delay = "15s"
}
network {
port "backend" {
to = 3000
}
port "client" {
to = 80
}
}
# PASTA SERVER
task "pasta-server" {
driver = "docker"
env {
PASTA_PORT = "3000"
PASTA_DIR = "/pasta"
}
config {
image = "marc.sastre.cat/pasta-server"
ports = ["backend"]
volumes = ["/mnt/vatnajokull/nomad_volumes/pasta:/pasta"]
}
resources {
cpu = 100
memory = 256
}
service {
name = "pasta-server"
port = "backend"
}
}
# PASTA CLIENT
task "pasta-client" {
driver = "docker"
config {
image = "marc.sastre.cat/pasta-client"
ports = ["client"]
}
resources {
cpu = 50
memory = 32
}
service {
name = "pasta-client"
port = "client"
}
}
}
}

View File

@@ -0,0 +1,73 @@
job "pihole" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "pihole" {
count = 1
volume "pihole" {
type = "host"
read_only = false
source = "dns-pihole"
}
volume "dnsmasq" {
type = "host"
read_only = false
source = "dns-dnsmasq"
}
restart {
attempts = 5
delay = "15s"
}
network {
port "dns" {
static = 53
}
port "http" {
to = 80
}
}
task "pihole" {
driver = "docker"
volume_mount {
volume = "pihole"
destination = "/etc/pihole"
read_only = false
}
volume_mount {
volume = "dnsmasq"
destination = "/etc/dnsmasq.d"
read_only = false
}
env {
TZ = "Europe/Amsterdam"
WEBPASSWORD = "elbonfeix"
ServerIP = "100.107.148.47"
}
config {
image = "pihole/pihole:v5.7"
ports = ["dns", "http"]
}
resources {
cpu = 100
memory = 64
}
service {
name = "pihole-gui"
port = "http"
}
}
}
}

View File

@@ -0,0 +1,41 @@
job "presencia" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "presencia" {
count = 1
restart {
attempts = 5
delay = "15s"
}
network {
port "http" {
to = 5000
}
}
# PRESENCIA APP
task "presencia" {
driver = "docker"
config {
image = "marc.sastre.cat/presencia"
ports = ["http"]
}
resources {
cpu = 50
memory = 64
}
service {
name = "presencia"
port = "http"
}
}
}
}

View File

@@ -0,0 +1,47 @@
job "unbound" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "unbound" {
count = 1
volume "unbound" {
type = "host"
read_only = false
source = "dns-unbound"
}
restart {
attempts = 5
delay = "15s"
}
network {
port "dns" {
static = 5533
}
}
task "unbound" {
driver = "docker"
volume_mount {
volume = "unbound"
destination = "/opt/unbound/etc/unbound/"
read_only = false
}
config {
image = "mvance/unbound:latest"
ports = ["dns"]
}
resources {
cpu = 50
memory = 64
}
}
}
}

View File

@@ -0,0 +1,52 @@
job "webhooks" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "webhooks" {
count = 1
restart {
attempts = 5
delay = "1m"
}
network {
port "http" {
to = 6000
}
}
task "webhooks" {
driver = "docker"
env {
CONFIG_FILE = "/app/data/config.json"
}
config {
image = "marc.sastre.cat/webhooks:latest"
ports = ["http"]
volumes = ["/mnt/vatnajokull/nomad_volumes/webhooks:/app/data"]
}
resources {
cpu = 100
memory = 128
}
service {
name = "webhooks"
port = "http"
check {
type = "tcp"
port = "http"
interval = "30s"
timeout = "2s"
}
}
}
}
}

52
data/nomad/registry.nomad Normal file
View File

@@ -0,0 +1,52 @@
job "registry" {
region = "global"
datacenters = ["samfelag"]
type = "service"
group "registry" {
count = 1
restart {
attempts = 5
delay = "1m"
}
network {
port "http" {
to = 5000
}
}
task "registry" {
driver = "docker"
env {
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY = "/data"
}
config {
image = "registry:2"
ports = ["http"]
volumes = ["/mnt/vatnajokull/nomad_volumes/registry:/data"]
}
resources {
cpu = 100
memory = 256
}
service {
name = "registry"
port = "http"
check {
type = "tcp"
port = "http"
interval = "30s"
timeout = "2s"
}
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 880 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

View File

@@ -1,4 +1,16 @@
#+title: Consul
* Server setup
** Create a server keypair <<create_keypair>>
Decrypt the CA (from the agenix secrets)
#+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-key.pem.age > ~/tmp/consul-agent-ca-key.pem
#+end_src
Create the keypair using consul:
#+begin_src bash
nix-shell -p consul
consul tls cert create -server -dc samfelag
#+end_src
* ACLs
** Policies
*** Node Policy
@@ -66,3 +78,10 @@ JSON config:
}
}
#+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,7 +1,19 @@
#+title: Hosts
* [[file:../hosts/reykjavik/README.org][Reykjavik]]
* [[file:../hosts/kopavogur/README.org][Kopavogur]]
* <<new_host>> Setting up a new host
* 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
** Generate a host ssh key pair
Generate the key pair (we'll use the name `id_<host>`)
#+BEGIN_SRC bash
@@ -15,6 +27,16 @@ You can decrypt it later with:
#+begin_src bash
gpg -d id_<host>.gpg > id_<host>
#+end_src
** Deploy the ssh keypair
You can use scp:
#+begin_src bash
scp id_<host> <user>@<host>:.ssh/id_<host>
scp id_<host>.pub <user>@<host>:.ssh/id_<host>.pub
#+end_src
Create a symbolic link for the host key (so we can use uniform naming in other parts):
#+begin_src bash
ln -s ~/.ssh/id_<host> ~/.ssh/id_ed25519
#+end_src
** Add the public key to secrets.nix
In the [[file:../secrets/secrets.nix][agenix secrets file]] add the public key, and give access to the necessary secrets.
Remember to rekey the secrets afterwards:
@@ -37,3 +59,6 @@ Host remotehost
IdentitiesOnly yes
IdentityFile ~/.ssh/remotehost
#+END_SRC
* List of hosts
** [[file:../hosts/reykjavik/README.org][Reykjavik]]
** [[file:../hosts/kopavogur/README.org][Kopavogur]]

View File

@@ -1,9 +1,9 @@
#+title: Installing
* Set up
** If new host, follow [[new_host][Setting up a new host]]
** If new host, follow [[file:hosts.org][Setting up a new host]]
** Open a nix-shell with dependencies
#+BEGIN_SRC bash
nix shell nixpkgs#git
nix-shell -p git
#+END_SRC
** Obtain the flake
+ Via git clone
@@ -60,11 +60,6 @@ sudo parted /dev/vda -- mkpart primary 1MiB -8GiB
#+BEGIN_SRC bash
sudo parted /dev/vda -- mkpart primary linux-swap -8GiB 100%
#+END_SRC
4. Create the boot partition
#+BEGIN_SRC bash
sudo parted /dev/vda -- mkpart ESP fat32 1MB 512MB
sudo parted /dev/vda -- set 3 esp on
#+END_SRC
* Format the partitions
1. Root partition
#+BEGIN_SRC bash
@@ -105,10 +100,16 @@ sudo nixos-install --impure --root /mnt --flake '.#reykjavik'
#+END_SRC
* Copy the ssh deploy key (again)
#+begin_src bash
cp /etc/ssh/samfelag_agenix* /mnt/etc/ssh
cp ~/.ssh/id_<hostname> /mnt/home/marc/.ssh/id_<hostname>
#+end_src
* 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:
* Initialization
Steps after reboot
** 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 (via vultr dashboard) and set the password for your user:
#+BEGIN_SRC bash
passwd marc
#+END_SRC
** Log into tailscale
#+begin_src bash
sudo tailscale up
#+end_src

713
flake.lock generated
View File

@@ -10,11 +10,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1703433843,
"narHash": "sha256-nmtA4KqFboWxxoOAA6Y1okHbZh+HsXaMPFkYHsoDRDw=",
"lastModified": 1723293904,
"narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=",
"owner": "ryantm",
"repo": "agenix",
"rev": "417caa847f9383e111d1397039c9d4337d024bf0",
"rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41",
"type": "github"
},
"original": {
@@ -23,33 +23,66 @@
"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": {
"flake": false,
"locked": {
"lastModified": 1654895891,
"narHash": "sha256-xYYmZkHnyLCUBAkqkZ7v1Lc5m39857MukQLMRtGuvdk=",
"owner": "base16-project",
"lastModified": 1696158499,
"narHash": "sha256-5yIHgDTPjoX/3oDEfLSQ0eJZdFL1SaCfb9d6M0RmOTM=",
"owner": "tinted-theming",
"repo": "base16-schemes",
"rev": "7c247f734eac7f04518c6e28d098635ee8dcabf5",
"rev": "a9112eaae86d9dd8ee6bb9445b664fba2f94037a",
"type": "github"
},
"original": {
"owner": "base16-project",
"owner": "tinted-theming",
"repo": "base16-schemes",
"type": "github"
}
},
"emacs-overlay": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
"nixpkgs": "nixpkgs",
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
"lastModified": 1669120813,
"narHash": "sha256-00O/dvvcELCdpuFPde+bsJ9Bw974b/VunUArWlJ+lQA=",
"lastModified": 1733127808,
"narHash": "sha256-UJUFsa1jmYSgAhrii1HVEl//ggT3Nzaw6kDN6TnkGXM=",
"owner": "nix-community",
"repo": "emacs-overlay",
"rev": "a9c2a436757f09abc4c7bc0abc4d2529b312e42b",
"rev": "51d6aafb5e3bbf10a29bd8ff417b617e35b14d0e",
"type": "github"
},
"original": {
@@ -58,18 +91,41 @@
"type": "github"
}
},
"flake-utils": {
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"owner": "edolstra",
"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"
}
},
@@ -101,31 +157,382 @@
]
},
"locked": {
"lastModified": 1703367386,
"narHash": "sha256-FMbm48UGrBfOWGt8+opuS+uLBLQlRfhiYXhHNcYMS5k=",
"lastModified": 1747556831,
"narHash": "sha256-Qb84nbYFFk0DzFeqVoHltS2RodAYY5/HZQKE8WnBDsc=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "d5824a76bc6bb93d1dce9ebbbcb09a9b6abcc224",
"rev": "d0bbd221482c2713cccb80220f3c9d16a6e20a33",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-23.11",
"ref": "release-25.05",
"repo": "home-manager",
"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": {
"inputs": {
"base16-schemes": "base16-schemes",
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1667165773,
"narHash": "sha256-47gEPN7UKrNM+a3OKAFtNQeyc1/sSPgDm3OGCgphCyo=",
"lastModified": 1707825078,
"narHash": "sha256-hTfge2J2W+42SZ7VHXkf4kjU+qzFqPeC9k66jAUBMHk=",
"owner": "misterio77",
"repo": "nix-colors",
"rev": "a58fb210eb285920ec10f204d007185b3629cadc",
"rev": "b01f024090d2c4fc3152cd0cf12027a7b8453ba1",
"type": "github"
},
"original": {
@@ -136,25 +543,27 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1669076005,
"narHash": "sha256-uzMji2q9Pk3jUH+e5nEFtoOZCP4VV1PDRJRLVmriY0M=",
"lastModified": 1733015953,
"narHash": "sha256-t4BBVpwG9B4hLgc6GUBuj3cjU7lP/PJfpTHuSqE+crk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "69335c46c48a73f291d5c6f332fb9fe8b8e22b30",
"rev": "ac35b104800bff9028425fec3b6e8a41de2bbfff",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1655599917,
"narHash": "sha256-kjZbt5WdTrnjMxL79okg9TCoRUdADG50x/TWozbyTsE=",
"lastModified": 1697935651,
"narHash": "sha256-qOfWjQ2JQSQL15KLh6D7xQhx0qgZlYZTYlcEiRuAMMw=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "5fb55578aa2f1a502d636a8ac71aece57cb730bb",
"rev": "e1e11fdbb01113d85c7f41cada9d2847660e3902",
"type": "github"
},
"original": {
@@ -163,29 +572,93 @@
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1732981179,
"narHash": "sha256-F7thesZPvAMSwjRu0K8uFshTk3ZZSNAsXTIFvXBT+34=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "62c435d93bf046a5396f3016472e8f7c8e2aed65",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1703467016,
"narHash": "sha256-/5A/dNPhbQx/Oa2d+Get174eNI3LERQ7u6WTWOlR1eQ=",
"lastModified": 1710272261,
"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",
"repo": "nixpkgs",
"rev": "d02d818f22c777aa4e854efc3242ec451e5d462a",
"rev": "55d1f923c480dadce40f5231feb472e81b0bab48",
"type": "github"
},
"original": {
"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",
"type": "github"
}
},
"nur": {
"locked": {
"lastModified": 1669288341,
"narHash": "sha256-lGwsFdSDb+IBXSJwKhNLOP2yt7PDXxbL0uxN9ZVOy8I=",
"lastModified": 1733136078,
"narHash": "sha256-F+gLv1YTOfP5BP0kHPEOLtrJWL1s3XGoaBhfwDsndNw=",
"owner": "nix-community",
"repo": "NUR",
"rev": "107aad385e04edf5b4bd4136bf8defcd890ecfc7",
"rev": "aadc32a2305cd303d1866be1d500ad6f7b344b82",
"type": "github"
},
"original": {
@@ -194,14 +667,42 @@
"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": {
"inputs": {
"agenix": "agenix",
"emacs-overlay": "emacs-overlay",
"home-manager": "home-manager_2",
"hy3": "hy3",
"hyprcursor-rose-pine": "hyprcursor-rose-pine",
"hyprland": "hyprland",
"hyprland-plugins": "hyprland-plugins",
"nix-colors": "nix-colors",
"nixpkgs": "nixpkgs_2",
"nur": "nur"
"nixpkgs": "nixpkgs_4",
"nur": "nur",
"zen-browser": "zen-browser"
}
},
"systems": {
@@ -218,6 +719,128 @@
"repo": "default",
"type": "github"
}
},
"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": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"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",

View File

@@ -4,10 +4,10 @@
inputs = {
# - Nixpkgs ----------------------------------
nixpkgs.url = "github:nixos/nixpkgs/nixos-23.11";
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
# - 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";
# - Agenix -----------------------------------
@@ -24,6 +24,22 @@
# - Themeing ---------------------------------
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, ... }:

View File

@@ -4,15 +4,20 @@ with lib;
{
imports = [
./hardware.nix
./secrets.nix
];
# - Basic --------------------------------------
user.name = "marc";
user.shell = pkgs.zsh;
networking.hostName = "hvannadal";
networking.firewall = {
enable = true;
networking = {
hostName = "quinto";
firewall = {
enable = false;
allowedUDPPorts = [
];
};
};
# - Bootloader ---------------------------------
@@ -22,6 +27,12 @@ with lib;
device = "/dev/vda";
};
# - Agenix ---------------------------------
age.identityPaths = [
"/home/marc/.ssh/id_ed25519"
];
# - Modules ------------------------------------
samfelag.modules = {
@@ -30,10 +41,9 @@ with lib;
# - System -----------------------------------
system.utils.enable = true;
system.gpg.enable = true;
system.pass.enable = true;
system.ssh.enable = true;
system.sshfs.enable = true;
# - Server ----------------------------------
# - Editors and development ------------------
dev.git.userName = "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;
let
nix-colors-lib = inputs.nix-colors.lib-contrib { inherit pkgs; };
wallpaper = ../../data/wallpapers/simple/tarmac.png;
wallpaper = ../../data/wallpapers/globus.jpg;
in
{
imports = [
@@ -39,6 +39,8 @@ in
kind = "dark";
};
# - Agenix ---------------------------------
age.identityPaths = [
"/home/marc/.ssh/id_ed25519"
];
@@ -61,17 +63,26 @@ in
system.pass.enable = true;
system.sshfs.enable = true;
# - Server ----------------------------------
server.consul = {
enable = true;
agent-token = config.age.secrets."consul.d/agent-token-reykjavik.json".path;
server.vatnajokull.enable = true;
# - Keyboards -
system.kanata.enable = true;
system.devices.voyager.enable = true;
system.input = {
japanese.enable = true;
greek.enable = true;
};
# - Desktop ----------------------------------
desktop = {
inherit wallpaper;
enable = true;
laptop = true;
# Use Γραφείο (custom) desktop environment
grapheio.enable = true;
# # Add greek keyboard layout -- currently commented as fcitx5 adds greek support
# wm.hyprland.kb_layout = "es,gr";
};
# - Editors and development ------------------
@@ -85,9 +96,11 @@ in
dev.docker.users = ["marc"];
# - Other apps -------------------------------
app.anki.enable = true;
app.spotify.enable = true;
app.skype.enable = true;
# app.skype.enable = true;
app.nextcloud.enable = true;
app.yazi.enable = true;
# - Gaming -----------------------------------
gaming.lutris.enable = true;

View File

@@ -10,6 +10,7 @@
};
kernelModules = [ "kvm-intel" ];
extraModulePackages = [ ];
supportedFilesystems = [ "ntfs" ];
};
fileSystems = {
@@ -22,13 +23,6 @@
device = "/dev/disk/by-label/BOOT";
fsType = "vfat";
};
"/mnt/vatnajokull" = {
device = "vatnajokull:/mnt/raid1";
fsType = "nfs";
options = [ "x-systemd.automount" "noauto" "noatime" "x-systemd.idle-timeout=600"];
};
};
swapDevices = [

View File

@@ -0,0 +1,12 @@
{ ... }:
{
age.secrets = {
"consul.d/agent-token-reykjavik.json" = {
file = ../../secrets/consul.d/agent-token-reykjavik.json.age;
owner = "consul";
group = "consul";
mode = "644";
};
};
}

View File

@@ -0,0 +1,73 @@
{ config, pkgs, lib, inputs, ... }:
with lib;
{
imports = [
./hardware.nix
./secrets.nix
];
# - Basic --------------------------------------
user.name = "marc";
user.shell = pkgs.zsh;
networking = {
hostName = "thingvellir";
firewall = {
enable = false;
allowedUDPPorts = [
53 # DNS (pihole + unbound)
8600 # Consul DNS
];
};
};
# - 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.gpg.enable = true;
system.pass.enable = true;
system.ssh.enable = true;
system.sshfs.enable = true;
# - Server ----------------------------------
server.consul = {
enable = true;
server = true;
agent-token = config.age.secrets."consul.d/agent-token-thingvellir.json".path;
server-cert = config.age.secrets."consul.d/samfelag-server-thingvellir.pem".path;
server-cert-key = config.age.secrets."consul.d/samfelag-server-thingvellir-key.pem".path;
};
server.nomad = {
enable = true;
server = true;
host-config = ../../config/nomad.d/host-thingvellir.hcl;
};
server.vatnajokull.enable = true;
# - Editors and development ------------------
dev.git.userName = "marc";
dev.git.userEmail = "marc@sastre.cat";
dev.docker.enable = true;
dev.docker.users = ["marc"];
};
}

View File

@@ -0,0 +1,24 @@
{ ... }:
{
age.secrets = {
"consul.d/agent-token-thingvellir.json" = {
file = ../../secrets/consul.d/agent-token-thingvellir.json.age;
owner = "consul";
group = "consul";
mode = "644";
};
"consul.d/samfelag-server-thingvellir.pem" = {
file = ../../secrets/consul.d/samfelag-server-thingvellir.pem.age;
owner = "consul";
group = "consul";
mode = "644";
};
"consul.d/samfelag-server-thingvellir-key.pem" = {
file = ../../secrets/consul.d/samfelag-server-thingvellir-key.pem.age;
owner = "consul";
group = "consul";
mode = "600";
};
};
}

View File

@@ -1,2 +1,2 @@
* Hvanndal
* Thingvellir
Servidor a Vultr

View File

@@ -2,7 +2,8 @@
let
cfg = config.samfelag.modules.app.alacritty;
i3Cfg = config.samfelag.modules.desktop.i3;
i3Cfg = config.samfelag.modules.desktop.wm.i3;
hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in
{
options.samfelag.modules.app.alacritty = {
@@ -17,44 +18,54 @@ in
fonts.packages = with pkgs; [
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 ---------------------------------
hm.xdg.configFile."alacritty/theme.yml".text = ''
colors:
primary:
background: '0x${config.colorScheme.colors.base00}'
foreground: '0x${config.colorScheme.colors.base05}'
cursor:
text: '0x${config.colorScheme.colors.base00}'
cursor: '0x${config.colorScheme.colors.base05}'
normal:
black: '0x${config.colorScheme.colors.base00}'
red: '0x${config.colorScheme.colors.base08}'
green: '0x${config.colorScheme.colors.base0B}'
yellow: '0x${config.colorScheme.colors.base0A}'
blue: '0x${config.colorScheme.colors.base0D}'
magenta: '0x${config.colorScheme.colors.base0E}'
cyan: '0x${config.colorScheme.colors.base0C}'
white: '0x${config.colorScheme.colors.base05}'
bright:
black: '0x${config.colorScheme.colors.base03}'
red: '0x${config.colorScheme.colors.base09}'
green: '0x${config.colorScheme.colors.base01}'
yellow: '0x${config.colorScheme.colors.base02}'
blue: '0x${config.colorScheme.colors.base04}'
magenta: '0x${config.colorScheme.colors.base06}'
cyan: '0x${config.colorScheme.colors.base0F}'
white: '0x${config.colorScheme.colors.base07}'
draw_bold_text_with_bright_colors: false
hm.xdg.configFile."alacritty/theme.toml".text = ''
[colors]
draw_bold_text_with_bright_colors = false
[colors.primary]
background = "0x${config.colorScheme.palette.base00}"
foreground = "0x${config.colorScheme.palette.base05}"
[colors.cursor]
text = "0x${config.colorScheme.palette.base00}"
cursor = "0x${config.colorScheme.palette.base05}"
[colors.normal]
black = "0x${config.colorScheme.palette.base00}"
red = "0x${config.colorScheme.palette.base08}"
green = "0x${config.colorScheme.palette.base0B}"
yellow = "0x${config.colorScheme.palette.base0A}"
blue = "0x${config.colorScheme.palette.base0D}"
magenta = "0x${config.colorScheme.palette.base0E}"
cyan = "0x${config.colorScheme.palette.base0C}"
white = "0x${config.colorScheme.palette.base05}"
[colors.bright]
black = "0x${config.colorScheme.palette.base03}"
red = "0x${config.colorScheme.palette.base09}"
green = "0x${config.colorScheme.palette.base01}"
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}+Shift+Return" = "exec ${pkgs.alacritty}/bin/alacritty -t floating-term";
};
samfelag.modules.desktop.wm.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [
"${hyprCfg.mod}, Return, exec, ${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,7 +2,8 @@
let
cfg = config.samfelag.modules.app.firefox;
i3Cfg = config.samfelag.modules.desktop.i3;
i3Cfg = config.samfelag.modules.desktop.wm.i3;
hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in
{
options.samfelag.modules.app.firefox = {
@@ -13,10 +14,6 @@ in
firefox
];
samfelag.modules.desktop.i3.extraKeybindings = lib.mkIf i3Cfg.enable {
"${i3Cfg.mod}+Shift+i" = "exec ${pkgs.firefox}/bin/firefox";
};
hm.programs.firefox = {
enable = true;
# extensions = with pkgs.nur.repos.rycee.firefox-addons; [
@@ -30,5 +27,12 @@ in
};
};
samfelag.modules.desktop.wm.i3.extraKeybindings = lib.mkIf i3Cfg.enable {
"${i3Cfg.mod}+Shift+i" = "exec ${pkgs.firefox}/bin/firefox";
};
samfelag.modules.desktop.wm.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [
"${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,7 +2,8 @@
let
cfg = config.samfelag.modules.app.spotify;
i3Cfg = config.samfelag.modules.desktop.i3;
i3Cfg = config.samfelag.modules.desktop.wm.i3;
hyprCfg = config.samfelag.modules.desktop.wm.hyprland;
in
{
options.samfelag.modules.app.spotify = {
@@ -13,8 +14,12 @@ in
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";
};
samfelag.modules.desktop.wm.hyprland.extraKeybindings = lib.mkIf hyprCfg.enable [
"${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";
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";
gc = {
@@ -27,11 +27,11 @@
# - Locale -------------------------------------
time.timeZone = "Europe/Madrid";
i18n.defaultLocale = "ca_ES.utf8";
i18n.defaultLocale = "ca_ES.UTF-8";
console.keyMap = "es";
services.xserver = {
services.xserver.xkb = {
layout = "es";
xkbVariant = "cat";
variant = "cat";
};
# - Packages -----------------------------------

View File

@@ -3,75 +3,11 @@
with lib;
let
cfg = config.samfelag.modules.desktop;
laptopPkgs = with pkgs; [
];
in
{
options.samfelag.modules.desktop = {
enable = mkEnableOption "desktop environment";
laptop = mkOption {
description = "Enable features for a laptop (trackpad, battery, etc...)";
type = types.bool;
default = false;
};
# Define generic desktop options to be used by the environments
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;
desktop.rofi.enable = true;
desktop.polybar.enable = true;
app.firefox.enable = true;
desktop.i3 = {
enable = true;
laptop = cfg.laptop;
extraStartup = [
{ command = "systemctl --user restart polybar"; always = true; notification = false; }
{ command = "feh --bg-fill -B \"#${config.colorScheme.colors.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,88 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.samfelag.modules.desktop.polybar;
i3Cfg = config.samfelag.modules.desktop.i3;
polybar_pkg = pkgs.polybar.override {
i3Support = true;
pulseSupport = true;
};
script = ''
polybar top &
polybar bottom &
'';
# Paths
paths = {
config = ../../config/polybar/config.ini;
bars = ../../config/polybar/bars;
scripts = ../../config/polybar/scripts;
};
in {
options.samfelag.modules.desktop.polybar = {
enable = lib.mkEnableOption "polybar";
};
config = lib.mkIf cfg.enable {
# - Configuration ----------------------------
environment.systemPackages = [
polybar_pkg
];
hm.xdg.configFile."polybar/config.ini".source = paths.config;
hm.xdg.configFile."polybar/bars".source = paths.bars;
hm.xdg.configFile."polybar/scripts".source = paths.scripts;
# - Themeing ---------------------------------
hm.xdg.configFile."polybar/colour-scheme.ini".text = ''
[colour-scheme]
base00 = #${config.colorScheme.colors.base00}
base01 = #${config.colorScheme.colors.base01}
base02 = #${config.colorScheme.colors.base02}
base03 = #${config.colorScheme.colors.base03}
base04 = #${config.colorScheme.colors.base04}
base05 = #${config.colorScheme.colors.base05}
base06 = #${config.colorScheme.colors.base06}
base07 = #${config.colorScheme.colors.base07}
base08 = #${config.colorScheme.colors.base08}
base09 = #${config.colorScheme.colors.base09}
base0A = #${config.colorScheme.colors.base0A}
base0B = #${config.colorScheme.colors.base0B}
base0C = #${config.colorScheme.colors.base0C}
base0D = #${config.colorScheme.colors.base0D}
base0E = #${config.colorScheme.colors.base0E}
base0F = #${config.colorScheme.colors.base0F}
'';
# - Dependencies -----------------------------
# The polybar modules use rofi
samfelag.modules.desktop.rofi.enable = true;
samfelag.modules.desktop.i3.extraKeybindings = lib.mkIf i3Cfg.enable {
"${i3Cfg.mod}+Shift+w" = "exec $HOME/.config/rofi/menus/wifi/wifi.sh";
};
# - Services ---------------------------------
hm.systemd.user.services.polybar = {
Unit = {
Description = "Polybar status bar";
PartOf = [ "tray.target" ];
X-Restart-Triggers = [ "${paths.config}" ];
};
Service = {
Type = "forking";
PassEnvironment = "PATH";
ExecStart =
let scriptPkg = pkgs.writeShellScriptBin "polybar-start" script;
in "${scriptPkg}/bin/polybar-start";
Restart = "on-failure";
};
Install = { WantedBy = [ "tray.target" ]; };
};
};
}

View File

@@ -1,38 +0,0 @@
{ config, lib, pkgs, inputs, ... }:
let
cfg = config.samfelag.modules.desktop.rofi;
nix-colors-lib = inputs.nix-colors.lib-contrib { inherit pkgs; };
in
{
options.samfelag.modules.desktop.rofi = {
enable = lib.mkEnableOption "rofi";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
rofi
];
hm.xdg.configFile."rofi/menus".source = ../../config/rofi/menus;
hm.xdg.configFile."rofi/nix.png".source = nix-colors-lib.nixWallpaperFromScheme {
scheme = config.colorScheme;
width = 600;
height = 600;
logoScale = 2.0;
};
# Themeing ---------------------------------
hm.xdg.configFile."rofi/theme.rasi".text = ''
* {
font: "Iosevka Nerd Font 10";
background: #${config.colorScheme.colors.base00};
background-alt: #${config.colorScheme.colors.base02};
foreground: #${config.colorScheme.colors.base05};
selected: #${config.colorScheme.colors.base03};
active: #${config.colorScheme.colors.base07};
urgent: #${config.colorScheme.colors.base06};
}
'';
};
}

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"
];
};
};
}

Some files were not shown because too many files have changed in this diff Show More