Compare commits

...

106 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
marc
042e246b1b Agenix + Consul 2024-02-11 16:06:03 +01:00
marc
fa12502c6e Structured documentation 2024-02-10 20:26:01 +01:00
marc
d0f78cc24f Added vultr dns config 2024-02-03 19:17:31 +01:00
marc
ddffe5c9c6 Config networking 2024-02-03 18:56:50 +01:00
marc
062a6f6fa9 More changes 2024-02-03 18:24:33 +01:00
marc
ccb5760edf Remove boot partition from vultr config 2024-02-03 18:15:22 +01:00
marc
31d93b8e19 Fixing vultr config 2024-02-03 17:41:12 +01:00
marc
06b2440df5 Added ssh 2024-02-03 17:27:40 +01:00
marc
e6b0e03a8c Added vultr config 2024-02-03 15:53:01 +00:00
marc
fbab268555 Added nextcloud 2024-01-21 18:43:08 +01:00
marc
d660b0fb36 Added Skype 2024-01-08 19:25:35 +01:00
marc
fffa64bc44 NixOS upgrade 23.05 -> 23.11 2023-12-29 17:05:01 +01:00
marc
b898d0af42 Added docker 2023-12-29 16:40:08 +01:00
marc
3713e4eca1 Removed ICE module from polybar 2023-12-17 18:53:25 +01:00
marc
f95a9948a6 Added ICE polybar module 2023-11-21 14:51:15 +01:00
marc
ad76fdf575 Added LSP Tailwind CSS to emacs 2023-11-21 13:52:59 +01:00
marc
0d63549504 Added netflix app 2023-11-21 13:52:33 +01:00
marc
596736b542 Fix python function symbol 2023-11-01 12:42:31 +01:00
marc
84a41bed0f Fix in steam (test) 2023-10-13 18:34:31 +02:00
marc
8b641e5614 Fixes in wifi and rofi-pass 2023-10-13 18:34:18 +02:00
marc
b72477414f Added simple wallpapers and changed polybar 2023-09-24 14:13:59 +02:00
marc
a8f33803ca Emacs NΛNO 2023-09-16 20:28:38 +02:00
marc
c6ddc5f30f Fixed polybar 2023-09-04 22:48:27 +02:00
marc
3ff5e00d29 Update nerd font glyphs 2023-09-04 21:45:23 +02:00
marc
3b76eed716 Nixos upgrade to 23.05 2023-09-04 21:45:02 +02:00
marc
f97659c7db Added clojure lsp mode 2023-08-21 22:53:56 +02:00
marc
10f4940ae1 Added clojure devenv template and more stuff 2023-08-06 17:35:41 +02:00
marc
e9bfdcc27e Add fzf and sshfs 2023-03-15 22:19:59 +01:00
marc
339a62d601 Added floating terminal and floating ipython 2023-02-12 17:27:28 +01:00
marc
9292866a87 Pass changes 2023-02-12 17:27:21 +01:00
marc
3aa810d7b3 Fixed bootloader and added/fixed rofi-pass 2023-01-20 21:00:19 +01:00
marc
e436a4be3b Added pass 2023-01-14 14:28:54 +01:00
marc
96028c6cad Added changes to develop with Jetbot 2022-12-24 18:02:30 +01:00
marc
177e96ad18 Added ros template to devenv 2022-12-11 17:30:25 +01:00
marc
098edb7f44 Use grub in reykjavik + add grub theme 2022-12-04 19:31:40 +01:00
marc
ccaca2cbe1 Config changes 2022-12-04 19:31:30 +01:00
marc
69e1dc2eb4 Added devenv and moved config files 2022-11-25 20:16:46 +01:00
marc
ebbbd0d179 Added NUR overlay 2022-11-25 16:34:57 +01:00
194 changed files with 6475 additions and 2399 deletions

View File

@@ -1,82 +1,13 @@
* Installing * NixOS
** Fresh system (nixos USB drive) ** [[file:docs/install.org][Installing]]
1. Open a nix-shell with git (if not installed): *** Rebuilding
#+BEGIN_SRC bash #+BEGIN_SRC bash
nix-shell -p git sudo nixos-rebuild switch --impure --flake ".#${HOST}"
#+END_SRC #+END_SRC
2. Clone the flake ** Modules
#+BEGIN_SRC bash *** Desktop environment
git clone https://git.lajuntament.space/marc/samfelag.git **** Themeing
#+END_SRC
3. Partition the disk
1. Locate the disk
#+BEGIN_SRC bash
lsblk
#+END_SRC
2. Create a GPT partition table
#+BEGIN_SRC bash
sudo parted /dev/nvme0n1 -- mklabel gpt
#+END_SRC
3. Create the root partition
#+BEGIN_SRC bash
sudo parted /dev/nvme0n1 -- mkpart primary 512MB -8GB
#+END_SRC
4. Create the swap partition
#+BEGIN_SRC bash
sudo parted /dev/nvme0n1 -- mkpart primary linux-swap -8GB 100%
#+END_SRC
5. Create the boot partition
#+BEGIN_SRC bash
sudo parted /dev/nvme0n1 -- mkpart ESP fat32 1MB 512MB
sudo parted /dev/nvme0n1 -- set 3 esp on
#+END_SRC
4. Format the partitions
1. Root partition
#+BEGIN_SRC bash
sudo mkfs.ext4 -L nixos /dev/nvme0n1p1
#+END_SRC
2. Swap partition
#+BEGIN_SRC bash
sudo mkswap -L swap /dev/nvme0n1p2
#+END_SRC
3. Boot partition
#+BEGIN_SRC bash
sudo mkfs.fat -F 32 -n BOOT /dev/nvme0n1p3
#+END_SRC
5. Mount the filesystems
1. Root partition
#+BEGIN_SRC bash
sudo mount /dev/disk/by-label/nixos /mnt
#+END_SRC
2. Boot partition
#+BEGIN_SRC bash
sudo mkdir -p /mnt/boot
sudo mount /dev/disk/by-label/BOOT /mnt/boot
#+END_SRC
3. Swap partition (if needed)
#+BEGIN_SRC bash
sudo swapon /dev/disk/by-label/swap
#+END_SRC
6. Create the host nix configuration
If the host is not present under system/hosts, create a new folder for the host.
Generate the hardware configuration file, you can use nixos-generate-config as a base:
#+BEGIN_SRC bash
nixos-generate-config --dir <<host directory>> --no-filesystems
#+END_SRC
7. Install nixos!
#+BEGIN_SRC bash
sudo nixos-install --impure --root /mnt --flake '.#reykjavik'
#+END_SRC
8. 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:
#+BEGIN_SRC bash
passwd marc
#+END_SRC
* Rebuilding
#+BEGIN_SRC bash
sudo nixos-rebuild switch --impure --flake '.#reykjavik'
#+END_SRC
* Modules
** Desktop environment
*** Themeing
We use [[https://github.com/Misterio77/nix-colors][nix-colors]] to (try to) keep a consistent theme across all applications. This uses [[https://github.com/chriskempson/base16][base-16 themes]] (here is a [[https://github.com/chriskempson/base16/blob/main/styling.md][styiling guide]] for it). We use [[https://github.com/Misterio77/nix-colors][nix-colors]] to (try to) keep a consistent theme across all applications. This uses [[https://github.com/chriskempson/base16][base-16 themes]] (here is a [[https://github.com/chriskempson/base16/blob/main/styling.md][styiling guide]] for it).
* Samfelag Mesh
** [[file:docs/hosts.org][Hosts]]
** [[file:docs/consul.org][Consul]]

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,57 +0,0 @@
[colours]
trans = #0000
white = #fff
black = #000
gray = #555
[colours/bar]
bg = ${colours.trans}
fg = ${colour-scheme.base05}
[colours/date]
bg = ${colour-scheme.base01}
fg = ${colour-scheme.base05}
[colours/battery]
full-bg = ${colour-scheme.base0C}
full-fg = ${colour-scheme.base01}
charging-bg = ${colour-scheme.base0C}
charging-fg = ${colour-scheme.base01}
discharging-bg = ${colour-scheme.base01}
discharging-fg = ${colour-scheme.base05}
low-bg = ${colour-scheme.base0E}
low-fg = ${colour-scheme.base01}
[colours/workspaces]
focused-bg = ${colour-scheme.base02}
focused-fg = ${colour-scheme.base04}
unfocused-bg = ${colour-scheme.base01}
unfocused-fg = ${colour-scheme.base05}
urgent-bg = ${colour-scheme.base0E}
urgent-fg = ${colour-scheme.base01}
[colours/i3-mode]
bg = ${colour-scheme.base0E}
fg = ${colour-scheme.base01}
[colours/volume]
volume-bg = ${colour-scheme.base0C}
volume-fg = ${colour-scheme.base01}
muted-bg = ${colour-scheme.base01}
muted-fg = ${colour-scheme.base05}
[colours/wireless]
connected-bg = ${colour-scheme.base0C}
connected-fg = ${colour-scheme.base01}
disconnected-bg = ${colour-scheme.base01}
disconnected-fg = ${colour-scheme.base05}
packetloss-bg = ${colour-scheme.base0E}
packetloss-fg = ${colour-scheme.base01}
[colours/bluetooth]
bg = ${colour-scheme.base0C}
fg = ${colour-scheme.base01}
[colours/spotify]
bg = ${colour-scheme.base0A}
fg = ${colour-scheme.base01}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

File diff suppressed because it is too large Load Diff

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

@@ -0,0 +1,15 @@
{
"tls": {
"defaults": {
"verify_incoming": false,
"verify_outgoing": true,
"ca_file": "/etc/consul.d/certs/consul-agent-ca.pem"
},
"internal_rpc": {
"verify_server_hostname": true
}
},
"auto_encrypt": {
"tls": true
}
}

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

@@ -1,9 +1,5 @@
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- ;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
;; Place your private configuration here! Remember, you do not need to run 'doom
;; sync' after modifying this file!
;; Some functionality uses this to identify you, e.g. GPG configuration, email ;; Some functionality uses this to identify you, e.g. GPG configuration, email
;; clients, file templates and snippets. ;; clients, file templates and snippets.
(setq user-full-name "Marc Sastre Rienitz" (setq user-full-name "Marc Sastre Rienitz"
@@ -14,16 +10,23 @@
(setq display-line-numbers-type t) (setq display-line-numbers-type t)
;; Fonts ;; Fonts
(setq doom-font (font-spec :family "Iosevka" :size 15)) (setq doom-font (font-spec :family "Iosevka Nerd Font" :size 18))
(setq doom-unicode-font (font-spec :family "Iosevka Nerd Font" :size 15)) (setq doom-symbol-font (font-spec :family "Iosevka Nerd Font" :size 18))
(setq doom-emoji-font (font-spec :family "Noto Color Emoji" :size 18))
;; Themeing ;; Themeing
;; (load! "themes/base16-samfelag.el")
(use-package base16-theme (use-package base16-theme
:init (add-to-list 'custom-theme-load-path "~/.config/doom/themes") :init (add-to-list 'custom-theme-load-path "~/.config/doom/themes")
:ensure t :ensure t
:config :config
(load-theme 'base16-samfelag t)) (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: ;; Here are some additional functions/macros that could help you configure Doom:
;; ;;
@@ -46,6 +49,18 @@
(setq-default tab-width 4) (setq-default tab-width 4)
;; -----------------------------------------------------------------------------
;; Emojify
;; -----------------------------------------------------------------------------
(use-package! emojify
:config
(when (member "Noto Color Emoji" (font-family-list))
(set-fontset-font
t 'emoji (font-spec :family "Noto Color Emoji") nil 'prepend))
(setq emojify-display-style 'image)
(setq emojify-emoji-styles '(unicode)))
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
;; Projectile ;; Projectile
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
@@ -68,6 +83,20 @@
(use-package parinfer (use-package parinfer
:defer t) :defer t)
;; -----------------------------------------------------------------------------
;; 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))
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
;; Python ;; Python
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
@@ -90,46 +119,25 @@
(setq pipenv-with-projectile t) (setq pipenv-with-projectile t)
(setenv "PIPENV_MAX_DEPTH" "10")) (setenv "PIPENV_MAX_DEPTH" "10"))
;; -----------------------------------------------------------------------------
;; Web (HTML + CSS)
;; -----------------------------------------------------------------------------
;; (use-package! lsp-tailwindcss)
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
;; Org ;; Org
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
(setq org-directory "~/org")
(setq org-agenda-files (directory-files-recursively "~/org/agenda" "\\.org$"))
(setq org-directory "~/org/")
; (use-package org-roam ;; -----------------------------------------------------------------------------
; :ensure t ;; Agenix
; :init ;; -----------------------------------------------------------------------------
; (setq org-roam-v2-ack t) (load! "modules/agenix.el")
; :custom (setq agenix-age-program "age")
; (org-roam-directory "~/org-roam") (setq agenix-agenix-program "agenix")
; (org-roam-capture-templates
; '(("d" "default" plain "%?"
; :target (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n")
; :unnarrowed t)
; ("m" "màquina" plain (file "~/org-roam/templates/maquina.org")
; :target (file "%<%Y%m%d%H%M%S>-${slug}.org")
; :unnarrowed t)
; ("s" "software" plain (file "~/org-roam/templates/software.org")
; :target (file "%<%Y%m%d%H%M%S>-${slug}.org")
; :unnarrowed t)))
; :config
; (org-roam-setup))
;
; (use-package! websocket
; :after org-roam)
;
; (use-package! org-roam-ui
; :after org-roam ;; or :after org
; ;; normally we'd recommend hooking orui after org-roam, but since org-roam does not have
; ;; a hookable mode anymore, you're advised to pick something yourself
; ;; if you don't care about startup time, use
; ;; :hook (after-init . org-roam-ui-mode)
; :config
; (setq org-roam-ui-sync-theme t
; org-roam-ui-follow t
; org-roam-ui-update-on-save t
; org-roam-ui-open-on-start nil))
;; ----------------------------------------------------------------------------- ;; -----------------------------------------------------------------------------
;; Appearance - Prettify ;; Appearance - Prettify
@@ -137,12 +145,13 @@
(load! "modules/prettify-utils.el") (load! "modules/prettify-utils.el")
(pretty-hook python-mode (pretty-hook python-mode
;; ("def" "𝙛") ("def" " 󰊕 ")
;; ("class" "𝙘") ("class" "𝙘")
'("None" "") ("None" "")
'("lambda" "λ") ("lambda" "λ")
'("not in" "") ("not in" "")
'("in" "")) ("in" ""))
(pretty-hook emacs-lisp-mode) (pretty-hook emacs-lisp-mode)

View File

@@ -30,7 +30,7 @@
doom ; what makes DOOM look the way it does doom ; what makes DOOM look the way it does
doom-dashboard ; a nifty splash screen for Emacs doom-dashboard ; a nifty splash screen for Emacs
;; doom-quit ; DOOM quit-message prompts when you quit Emacs ;; doom-quit ; DOOM quit-message prompts when you quit Emacs
;;(emoji +unicode) ; 🙂 (emoji +unicode) ; 🙂
;; fill-column ; a `fill-column' indicator ;; fill-column ; a `fill-column' indicator
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
;;hydra ;;hydra
@@ -38,13 +38,13 @@
(ligatures (ligatures
+iosevka) ; ligatures and symbols to make your code pretty again +iosevka) ; ligatures and symbols to make your code pretty again
;;minimap ; show a map of the code on the side ;;minimap ; show a map of the code on the side
modeline ; snazzy, Atom-inspired modeline, plus API ;;modeline ; snazzy, Atom-inspired modeline, plus API
;;nav-flash ; blink cursor line after big motions ;;nav-flash ; blink cursor line after big motions
neotree ; a project drawer, like NERDTree for vim ;;neotree ; a project drawer, like NERDTree for vim
ophints ; highlight the region an operation acts on ophints ; highlight the region an operation acts on
(popup +defaults) ; tame sudden yet inevitable temporary windows (popup +defaults) ; tame sudden yet inevitable temporary windows
;;tabs ; a tab bar for Emacs ;;tabs ; a tab bar for Emacs
;;treemacs ; a project drawer, like neotree but cooler treemacs ; a project drawer, like neotree but cooler
unicode ; extended unicode support for various languages unicode ; extended unicode support for various languages
vc-gutter ; vcs diff in the fringe vc-gutter ; vcs diff in the fringe
vi-tilde-fringe ; fringe tildes to mark beyond EOB vi-tilde-fringe ; fringe tildes to mark beyond EOB
@@ -94,7 +94,7 @@
(eval +overlay) ; run code, run (also, repls) (eval +overlay) ; run code, run (also, repls)
;;gist ; interacting with github gists ;;gist ; interacting with github gists
lookup ; navigate your code and its documentation lookup ; navigate your code and its documentation
lsp (lsp +eglot)
magit ; a git porcelain for Emacs magit ; a git porcelain for Emacs
;;make ; run make tasks from Emacs ;;make ; run make tasks from Emacs
;;pass ; password manager for nerds ;;pass ; password manager for nerds
@@ -113,7 +113,8 @@
:lang :lang
;;agda ; types of types of types of types... ;;agda ; types of types of types of types...
;;cc ; C/C++/Obj-C madness ;;cc ; C/C++/Obj-C madness
clojure ; java with a lisp (clojure
+lsp) ; java with a lisp
;;common-lisp ; if you've seen one lisp, you've seen them all ;;common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs ;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c ;;crystal ; ruby at the speed of c
@@ -153,7 +154,8 @@
php ; perl's insecure younger brother php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more ;;plantuml ; diagrams for confusing people more
;;purescript ; javascript, but functional ;;purescript ; javascript, but functional
python ; beautiful is better than ugly (python
+lsp) ; beautiful is better than ugly
;;qt ; the 'cutest' gui framework ever ;;qt ; the 'cutest' gui framework ever
;;racket ; a DSL for DSLs ;;racket ; a DSL for DSLs
;;raku ; the artist formerly known as perl6 ;;raku ; the artist formerly known as perl6

View File

@@ -0,0 +1,231 @@
;;; agenix.el --- Decrypt and encrypt agenix secrets -*- lexical-binding: t -*-
;; Copyright (C) 2022-2023 Tomasz Maciosowski (t4ccer)
;; Author: Tomasz Maciosowski <t4ccer@gmail.com>
;; Maintainer: Tomasz Maciosowski <t4ccer@gmail.com>
;; Package-Requires: ((emacs "27.1"))
;; URL: https://github.com/t4ccer/agenix.el
;; Version: 1.0
;;
;; Modified version by Marc Sastre that allows subdirectories in the secrets folder.
;; This file is NOT part of GNU Emacs.
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; Fully transparent editing of agenix secrets. Open a file, edit it, save it and it will be
;; encrypted automatically.
;;; Code:
(defcustom agenix-age-program "age"
"The age program."
:group 'agenix
:type 'string)
(defcustom agenix-key-files '("~/.ssh/id_ed25519" "~/.ssh/id_rsa")
"List of age key files."
:group 'agenix
:type '(repeat string))
(defcustom agenix-pre-mode-hook nil
"Hook to run before entering `agenix-mode'.
Can be used to set up age binary path."
:group 'agenix
:type 'hook)
(defvar-local agenix--encrypted-fp nil)
(defvar-local agenix--keys nil)
(defvar-local agenix--undo-list nil)
(defvar-local agenix--point nil)
(define-derived-mode agenix-mode text-mode "agenix"
"Major mode for agenix files.
Don't use directly, use `agenix-mode-if-with-secrets-nix' to ensure that
secrets.nix exists."
(read-only-mode 1)
(run-hooks 'agenix-pre-mode-hook)
(agenix-decrypt-buffer)
(goto-char (point-min))
(setq buffer-undo-list nil)
(setq require-final-newline nil)
(setq buffer-auto-save-file-name nil)
(setq write-contents-functions '(agenix-save-decrypted))
;; Reverting loads encrypted file back to the buffer, so we need to decrypt it
(add-hook 'after-revert-hook
(lambda () (when (eq major-mode 'agenix-mode) (agenix-decrypt-buffer)))))
(defun agenix--file-search-upward (directory file)
"Search DIRECTORY for FILE and return its full path if found, or NIL if not.
If FILE is not found in DIRECTORY, the parent of DIRECTORY will be searched."
(let ((parent-dir (file-truename (concat (file-name-directory directory) "../")))
(current-path (if (not (string= (substring directory (- (length directory) 1)) "/"))
(concat directory "/" file)
(concat directory file))))
(if (file-exists-p current-path)
current-path
(when (and (not (string= (file-truename directory) parent-dir))
(< (length parent-dir) (length (file-truename directory))))
(agenix--file-search-upward parent-dir file)))))
(defun agenix--secrets-nix-path ()
"Search for secrets.nix file in the current directory or any parent directory.
Return it if found"
(agenix--file-search-upward "./" "secrets.nix"))
(defun agenix--relative-buffer-path ()
"Return the filename of the current buffer relative to the secrets.nix path."
(file-relative-name
(buffer-file-name)
(file-name-directory (agenix--secrets-nix-path))))
(defun agenix--buffer-string* (buffer)
"Like `buffer-string' but read from BUFFER parameter."
(with-current-buffer buffer
(buffer-substring-no-properties (point-min) (point-max))))
(defun agenix--with-temp-buffer (func)
"Like `with-temp-buffer' but doesn't actually switch the buffer.
FUNC takes a temporary buffer that will be disposed after the call."
(let* ((age-buf (generate-new-buffer "*age-buf*"))
(res (funcall func age-buf)))
(kill-buffer age-buf)
res))
(defun agenix--process-exit-code-and-output (program &rest args)
"Run PROGRAM with ARGS and return the exit code and output in a list."
(agenix--with-temp-buffer
(lambda (buf) (list (apply #'call-process program nil buf nil args)
(agenix--buffer-string* buf)))))
;;;###autoload
(defun agenix-decrypt-buffer (&optional encrypted-buffer)
"Decrypt ENCRYPTED-BUFFER in place.
If ENCRYPTED-BUFFER is unset or nil, decrypt the current buffer."
(interactive
(when current-prefix-arg
(list (read-buffer "Encrypted buffer: " (current-buffer) t))))
(with-current-buffer (or encrypted-buffer (current-buffer))
(let* ((nix-res (apply #'agenix--process-exit-code-and-output "nix-instantiate"
(list "--strict" "--json" "--eval" "--expr"
(format
"(import %s).\"%s\".publicKeys"
(agenix--secrets-nix-path)
(agenix--relative-buffer-path)))))
(nix-exit-code (car nix-res))
(nix-output (car (cdr nix-res))))
(if (/= nix-exit-code 0)
(warn "Nix evaluation error.
Probably file %s is not declared as a secret in 'secrets.nix' file.
Error: %s" (buffer-file-name) nix-output)
(let* ((keys (json-parse-string nix-output :array-type 'list))
(age-flags (list "--decrypt")))
;; Add all user's keys to the age command
(dolist (key-path agenix-key-files)
(when (file-exists-p (expand-file-name key-path))
(setq age-flags
(nconc age-flags (list "--identity" (expand-file-name key-path))))))
;; Add file-path to decrypt to the age command
(setq age-flags (nconc age-flags (list (buffer-file-name))))
(setq agenix--encrypted-fp (buffer-file-name))
(setq agenix--keys keys)
;; Check if file already exists
(if (not (file-exists-p (buffer-file-name)))
(progn
(message "Not decrypting. File %s does not exist and will be created when you \
will save this buffer." (buffer-file-name))
(read-only-mode -1))
(let*
((age-res
(apply #'agenix--process-exit-code-and-output agenix-age-program age-flags))
(age-exit-code (car age-res))
(age-output (car (cdr age-res))))
(if (= 0 age-exit-code)
(progn
;; Replace buffer with decrypted content
(read-only-mode -1)
(erase-buffer)
(insert age-output)
;; Mark buffer as not modified
(set-buffer-modified-p nil)
(setq buffer-undo-list agenix--undo-list))
(error age-output))))
(when agenix--point
(goto-char agenix--point)))))))
;;;###autoload
(defun agenix-save-decrypted (&optional unencrypted-buffer)
"Encrypt UNENCRYPTED-BUFFER back to the original .age file.
If UNENCRYPTED-BUFFER is unset or nil, use the current buffer."
(interactive
(when current-prefix-arg
(list (read-buffer "Unencrypted buffer: " (current-buffer) t))))
(with-current-buffer (or unencrypted-buffer (current-buffer))
(let* ((age-flags (list "--encrypt")))
(progn
(dolist (k agenix--keys)
(setq age-flags (nconc age-flags (list "--recipient" k))))
(setq age-flags (nconc age-flags (list "-o" agenix--encrypted-fp)))
(let* ((decrypted-text (buffer-string))
(age-res
(agenix--with-temp-buffer
(lambda (buf)
(list
(apply #'call-process-region
decrypted-text nil
agenix-age-program
nil
buf
t
age-flags)
(agenix--buffer-string* buf))))))
(when (/= 0 (car age-res))
(error (car (cdr age-res))))
(setq agenix--point (point))
(setq agenix--undo-list buffer-undo-list)
(revert-buffer :ignore-auto :noconfirm :preserve-modes)
(set-buffer-modified-p nil)
t)))))
;;;###autoload
(defun agenix-mode-if-with-secrets-nix ()
"Enable `agenix-mode' if the current buffer is in a directory with secrets.nix."
(interactive)
(when (agenix--secrets-nix-path)
(agenix-mode)))
;;;###autoload
(add-to-list 'auto-mode-alist '("\\.age\\'" . agenix-mode-if-with-secrets-nix))
(provide 'agenix)
;;; agenix.el ends here

View File

@@ -1,5 +1,4 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package with Doom you must declare them here and run 'doom sync' ;; To install a package with Doom you must declare them here and run 'doom sync'
;; on the command line, then restart Emacs for the changes to take effect -- or ;; on the command line, then restart Emacs for the changes to take effect -- or
@@ -50,18 +49,34 @@
;(unpin! t) ;(unpin! t)
(package! base16-theme) (package! base16-theme)
(package! parinfer) (package! parinfer)
;; Env
(package! inheritenv)
;; Editor ;; Editor
(package! dot-mode) (package! dot-mode)
;; Python ;; Python
(package! py-autopep8) (package! py-autopep8)
;; Web (HTML + CSS)
(package! lsp-tailwindcss :recipe (:host github :repo "merrickluo/lsp-tailwindcss"))
;; Org ;; Org
;; Org-Roam UI ;; Org-Roam UI
; (unpin! org-roam) ; (unpin! org-roam)
; (package! websocket) ; (package! websocket)
; (package! org-roam-ui :recipe (:host github :repo "org-roam/org-roam-ui" :files ("*.el" "out"))) ; (package! org-roam-ui :recipe (:host github :repo "org-roam/org-roam-ui" :files ("*.el" "out")))
(package! doom-nano-modeline
:recipe (:host github
:repo "ronisbr/doom-nano-modeline"))
;; Agenix
;; (package! agenix
;; :recipe (:host github
;; :repo "t4ccer/agenix.el"
;; :branch "main"
;; :files ("*.el")))

View File

@@ -1,25 +0,0 @@
(require 'base16-theme)
(defvar base16-samfelag-theme-colors
'(:base00 "#383838"
:base01 "#404040"
:base02 "#606060"
:base03 "#6f6f6f"
:base04 "#808080"
:base05 "#dcdccc"
:base06 "#c0c0c0"
:base07 "#ffffff"
:base08 "#dca3a3"
:base09 "#dfaf8f"
:base0A "#e0cf9f"
:base0B "#5f7f5f"
:base0C "#93e0e3"
:base0D "#7cb8bb"
:base0E "#dc8cc3"
:base0F "#000000")
"All colors for Base16 Samfelag are defined here.")
(deftheme base16-samfelag)
(base16-theme-define 'base16-samfelag base16-samfelag-theme-colors)
(provide-theme 'base16-samfelag)
(provide 'base16-samfelag-theme)

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

@@ -8,9 +8,9 @@ height = 32
offset-x = 0 offset-x = 0
offset-y = 0 offset-y = 0
font-0 = "Iosevka:size=10;2" font-0 = "Iosevka Nerd Font:size=10;2"
font-1 = "Iosevka:size=16;2" font-1 = "Iosevka Nerd Font:size=16;2"
font-2 = "Iosevka:size=22;4" font-2 = "Iosevka Nerd Font:size=20;4"
background = ${colours/bar.bg} background = ${colours/bar.bg}
foreground = ${colours/bar.fg} foreground = ${colours/bar.fg}

View File

@@ -0,0 +1,61 @@
[colours]
trans = #0000
white = #fff
black = #000
gray = #555
[colours/bar]
bg = ${colour-scheme.base00}
fg = ${colour-scheme.base05}
[colours/date]
bg = ${colour-scheme.base00}
fg = ${colour-scheme.base05}
[colours/battery]
full-bg = ${colour-scheme.base00}
full-fg = ${colour-scheme.base0C}
charging-bg = ${colour-scheme.base00}
charging-fg = ${colour-scheme.base0D}
discharging-bg = ${colour-scheme.base00}
discharging-fg = ${colour-scheme.base0F}
low-bg = ${colour-scheme.base00}
low-fg = ${colour-scheme.base0E}
[colours/workspaces]
focused-bg = ${colour-scheme.base02}
focused-fg = ${colour-scheme.base04}
unfocused-bg = ${colour-scheme.base01}
unfocused-fg = ${colour-scheme.base05}
urgent-bg = ${colour-scheme.base0E}
urgent-fg = ${colour-scheme.base01}
[colours/i3-mode]
bg = ${colour-scheme.base0E}
fg = ${colour-scheme.base01}
[colours/volume]
volume-bg = ${colour-scheme.base00}
volume-fg = ${colour-scheme.base0C}
muted-bg = ${colour-scheme.base00}
muted-fg = ${colour-scheme.base0B}
[colours/wireless]
connected-bg = ${colour-scheme.base00}
connected-fg = ${colour-scheme.base0C}
disconnected-bg = ${colour-scheme.base00}
disconnected-fg = ${colour-scheme.base0B}
packetloss-bg = ${colour-scheme.base00}
packetloss-fg = ${colour-scheme.base0E}
[colours/bluetooth]
bg = ${colour-scheme.base00}
fg = ${colour-scheme.base0C}
[colours/spotify]
bg = ${colour-scheme.base00}
fg = ${colour-scheme.base0A}
[colours/ice]
bg = ${colour-scheme.base00}
fg = ${colour-scheme.base0A}

View File

@@ -7,25 +7,25 @@ adapter = ADP0
poll-interval = 1 poll-interval = 1
format-full = <label-full> format-full = <label-full>
label-full = "%{T2}%{T-} %percentage%%" label-full = "%{T2}󰁹%{T-} %percentage%%"
label-full-background = ${colours/battery.full-bg} label-full-background = ${colours/battery.full-bg}
label-full-foreground = ${colours/battery.full-fg} label-full-foreground = ${colours/battery.full-fg}
label-full-padding = 1 label-full-padding = 1
format-charging = <label-charging> format-charging = <label-charging>
label-charging = "%{T2}%{T-} %percentage%%" label-charging = "%{T2}󰂄%{T-} %percentage%%"
label-charging-background = ${colours/battery.charging-bg} label-charging-background = ${colours/battery.charging-bg}
label-charging-foreground = ${colours/battery.charging-fg} label-charging-foreground = ${colours/battery.charging-fg}
label-charging-padding = 1 label-charging-padding = 1
format-discharging = <label-discharging> format-discharging = <label-discharging>
label-discharging = "%{T2}%{T-} %percentage%%" label-discharging = "%{T2}󰂀%{T-} %percentage%%"
label-discharging-background = ${colours/battery.discharging-bg} label-discharging-background = ${colours/battery.discharging-bg}
label-discharging-foreground = ${colours/battery.discharging-fg} label-discharging-foreground = ${colours/battery.discharging-fg}
label-discharging-padding = 1 label-discharging-padding = 1
format-low = <label-low> format-low = <label-low>
label-low = "%{T2}%{T-} %percentage%%" label-low = "%{T2}󰂃%{T-} %percentage%%"
label-low-background = ${colours/battery.low-bg} label-low-background = ${colours/battery.low-bg}
label-low-foreground = ${colours/battery.low-fg} label-low-foreground = ${colours/battery.low-fg}
label-low-padding = 1 label-low-padding = 1

View File

@@ -0,0 +1,8 @@
[module/ice]
type = custom/script
exec = ~/.config/polybar/scripts/ice.sh
interval = 5
format-background = ${colours/ice.bg}
format-foreground = ${colours/ice.fg}
format-padding = 1

View File

@@ -3,13 +3,13 @@ type = internal/pulseaudio
interval = 5 interval = 5
format-volume = <label-volume> format-volume = <label-volume>
label-volume = %{T2}%{T-} %percentage%% label-volume = %{T2}󰕾 %{T-} %percentage%%
label-volume-padding = 1 label-volume-padding = 1
label-volume-foreground = ${colours/volume.volume-fg} label-volume-foreground = ${colours/volume.volume-fg}
label-volume-background = ${colours/volume.volume-bg} label-volume-background = ${colours/volume.volume-bg}
format-muted = <label-muted> format-muted = <label-muted>
label-muted = %{T2}%{T-} muted label-muted = %{T2}󰝟 %{T-} muted
label-muted-padding = 1 label-muted-padding = 1
label-muted-foreground = ${colours/volume.muted-fg} label-muted-foreground = ${colours/volume.muted-fg}
label-muted-background = ${colours/volume.muted-bg} label-muted-background = ${colours/volume.muted-bg}

View File

@@ -11,13 +11,13 @@ accumulate-stats = true
speed-unit = '' speed-unit = ''
format-connected = <label-connected> format-connected = <label-connected>
label-connected = %{T2}%{T-} %essid% (%local_ip%) label-connected = %{T2}󰖩 %{T-} %essid% (%local_ip%)
label-connected-background = ${colours/wireless.connected-bg} label-connected-background = ${colours/wireless.connected-bg}
label-connected-foreground = ${colours/wireless.connected-fg} label-connected-foreground = ${colours/wireless.connected-fg}
label-connected-padding = 1 label-connected-padding = 1
format-disconnected = <label-disconnected> format-disconnected = <label-disconnected>
label-disconnected = %{T2} label-disconnected = %{T2}󰖪
label-disconnected-background = ${colours/wireless.disconnected-bg} label-disconnected-background = ${colours/wireless.disconnected-bg}
label-disconnected-foreground = ${colours/wireless.disconnected-fg} label-disconnected-foreground = ${colours/wireless.disconnected-fg}
label-disconnected-padding = 1 label-disconnected-padding = 1

33
config/polybar/scripts/ice.sh Executable file
View File

@@ -0,0 +1,33 @@
#!/bin/sh
# Show current train speed on ICE
main() {
status=$(curl -X GET https://iceportal.de/api1/rs/status 2>/dev/null)
tripInfo=$(curl -X GET https://iceportal.de/api1/rs/tripInfo/trip 2>/dev/null)
if [[ -z $status || -z $tripInfo ]]; then
return
fi
# Speed
speed=$(echo $status | jq ".speed")
# Next stop
nextId=$(echo $tripInfo | jq ".trip.stopInfo.actualNext")
nextStop=$(echo $tripInfo | jq ".trip.stops[] | select( .station.evaNr == $nextId )")
nextStopName=$(echo $nextStop | jq -r ".station.name")
nextStopArrival=$(echo $nextStop | jq ".timetable.actualArrivalTime")
nextStopRemainingSeconds=$(expr $(expr $nextStopArrival / 1000) - $(date +%s))
if [[ ${nextStopRemainingSeconds:0:1} == "-" ]]; then
nextStopRemainingTime="Arribada!"
else
nextStopRemainingTime=$(date -d@$nextStopRemainingSeconds -u +%Hh%Mm%Ss)
fi
echo "$nextStopName ·  $nextStopRemainingTime · 󰓅 $speed km/h"
}
main "$@"

View File

@@ -14,7 +14,7 @@ main() {
album=$(echo "$meta" | sed -nr '/xesam:album"/,+2s/^ +variant +string "(.*)"$/\1/p' | tail -1| sed 's/\&/\\&/g'| sed 's#\/#\\/#g') album=$(echo "$meta" | sed -nr '/xesam:album"/,+2s/^ +variant +string "(.*)"$/\1/p' | tail -1| sed 's/\&/\\&/g'| sed 's#\/#\\/#g')
title=$(echo "$meta" | sed -nr '/xesam:title"/,+2s/^ +variant +string "(.*)"$/\1/p' | tail -1 | sed 's/\&/\\&/g'| sed 's#\/#\\/#g') title=$(echo "$meta" | sed -nr '/xesam:title"/,+2s/^ +variant +string "(.*)"$/\1/p' | tail -1 | sed 's/\&/\\&/g'| sed 's#\/#\\/#g')
echo " ${*:-%artist% - %title%}" | sed "s/%artist%/$artist/g;s/%title%/$title/g;s/%album%/$album/g"i | sed "s/\&/\&/g" | sed "s#\/#\/#g" echo " ${*:-%artist% - %title%}" | sed "s/%artist%/$artist/g;s/%title%/$title/g;s/%album%/$album/g"i | sed "s/\&/\&/g" | sed "s#\/#\/#g"
} }
main "$@" main "$@"

View File

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

View File

@@ -217,7 +217,7 @@ print_status() {
done done
printf "\n" printf "\n"
else else
echo "" echo "󰂲"
fi fi
} }

View File

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

View File

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

View File

@@ -4,7 +4,7 @@
* *
**/ **/
@import "../../theme.rasi" @import "~/.config/rofi/theme.rasi"
/*****----- Configuration -----*****/ /*****----- Configuration -----*****/
configuration { configuration {
@@ -50,7 +50,7 @@ mainbox {
imagebox { imagebox {
padding: 20px; padding: 20px;
background-color: transparent; background-color: transparent;
background-image: url("~/.config/rofi/menus/launcher/flor01.png", width); background-image: url("~/.config/rofi/nix.png", width);
orientation: vertical; orientation: vertical;
children: [ "inputbar", "dummy", "mode-switcher" ]; children: [ "inputbar", "dummy", "mode-switcher" ];
} }

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: [ "message", "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

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

View File

@@ -10,11 +10,11 @@ theme='powermenu'
# CMDs # CMDs
# Options # Options
shutdown=' Shutdown' shutdown=' Shutdown'
reboot=' Reboot' reboot=' Reboot'
lock=' Lock' lock=' Lock'
suspend=' Suspend' suspend='󰏦 Suspend'
logout=' Logout' logout='󰍃 Logout'
yes='Yes' yes='Yes'
no='No' no='No'
@@ -58,14 +58,10 @@ run_cmd() {
elif [[ $1 == '--suspend' ]]; then elif [[ $1 == '--suspend' ]]; then
systemctl suspend systemctl suspend
elif [[ $1 == '--logout' ]]; then elif [[ $1 == '--logout' ]]; then
if [[ "$DESKTOP_SESSION" == 'openbox' ]]; then if [[ "$DESKTOP_SESSION" == 'i3' ]]; then
openbox --exit
elif [[ "$DESKTOP_SESSION" == 'bspwm' ]]; then
bspc quit
elif [[ "$DESKTOP_SESSION" == 'i3' ]]; then
i3-msg exit i3-msg exit
elif [[ "$DESKTOP_SESSION" == 'plasma' ]]; then elif [[ ! -z $HYPRLAND_INSTANCE_SIGNATURE ]]; then
qdbus org.kde.ksmserver /KSMServer logout 0 0 0 hyprctl dispatch exit
fi fi
fi fi
else else
@@ -85,8 +81,8 @@ case ${chosen} in
$lock) $lock)
if command -v i3lock-color; then if command -v i3lock-color; then
i3lock-color -c 808F85 && sleep 1 i3lock-color -c 808F85 && sleep 1
# elif command -v betterlockscreen; then elif command -v hyprlock; then
# betterlockscreen -l hyprlock
fi fi
;; ;;
$suspend) $suspend)

View File

@@ -4,7 +4,7 @@
* *
**/ **/
@import "../../theme.rasi" @import "~/.config/rofi/theme.rasi"
/*****----- Configuration -----*****/ /*****----- Configuration -----*****/
configuration { configuration {
@@ -78,7 +78,7 @@ inputbar {
textbox-prompt-colon { textbox-prompt-colon {
enabled: true; enabled: true;
expand: false; expand: false;
str: ""; str: "󰖩";
background-color: inherit; background-color: inherit;
text-color: inherit; text-color: inherit;
} }

View File

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

View File

@@ -0,0 +1,4 @@
if [ -n "${commands[fzf-share]}" ]; then
source "$(fzf-share)/key-bindings.zsh"
source "$(fzf-share)/completion.zsh"
fi

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

93
data/devenv/devenv.sh Normal file
View File

@@ -0,0 +1,93 @@
#!/usr/bin/env sh
SANDBOXES_DIR=$HOME/sandbox
TEMPLATES_DIR=$XDG_DATA_HOME/devenv/templates
list_templates() {
echo "The available templates are:"
ls $TEMPLATES_DIR
}
check_template () {
TEMPLATE=$1
if [ -z "$TEMPLATE" ]; then
echo "No template given"
list_templates
return 1
elif [ ! -e "$TEMPLATES_DIR/$TEMPLATE" ]; then
echo "The given template '$TEMPLATE' doesn't exist!"
list_templates
return 1
fi
}
devenv_install() {
TEMPLATE=$1
install -m 644 $TEMPLATES_DIR/$TEMPLATE/* ./
echo "use flake . --impure" > .envrc
direnv allow
}
devenv_init() {
TEMPLATE=$1
if ! check_template $TEMPLATE ; then
return 1
fi
devenv_install $TEMPLATE
}
devenv_sandbox() {
DIRECTORY=$1
if [ -z "$DIRECTORY" ]; then
show_help_sandbox
return 1
fi
SANDBOX_DIR="$SANDBOXES_DIR/$DIRECTORY"
TEMPLATE=$2
if [ -z "$TEMPLATE" ]; then
TEMPLATE=$DIRECTORY
fi
if ! check_template $TEMPLATE; then
return 1
fi
if [ ! -e $SANDBOX_DIR ]; then
echo "Creating sandbox at $SANDBOX_DIR with template $TEMPLATE"
mkdir -p $SANDBOX_DIR
cd $SANDBOX_DIR
devenv_init $TEMPLATE
else
cd $SANDBOX_DIR
fi
}
show_help_sandbox() {
echo "Usage: devenv sandbox <directory> [<template>]"
echo ""
echo " directory: The sandbox directory to go to."
echo " template: If the directory doesn't exist, the template to use for that sandbox"
echo " Defaults to directory if not given."
echo ""
}
show_help() {
echo "Usage: devenv <action>"
echo "Available actions:"
echo ""
echo " init: Initialize a dev env in the current directory"
echo " sandbox: Go to a sandbox directory using a template"
echo ""
}
case "$1" in
init)
shift
devenv_init $@
;;
sandbox)
shift
devenv_sandbox $@
;;
*)
show_help
;;
esac

View File

@@ -0,0 +1,28 @@
{
description = "Development flake for this clojure project";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
inputs.flake-utils.url = "github:numtide/flake-utils";
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = nixpkgs.legacyPackages.${system};
projectDependencies = with pkgs; [
];
in {
devShells.default = pkgs.mkShell {
nativeBuildInputs = [ pkgs.bashInteractive ];
buildInputs = with pkgs; [
# Core clojure dependencies
clojure
leiningen
# IDE tools
clojure-lsp
# Development tools
] ++ projectDependencies;
};
});
}

View File

@@ -0,0 +1,37 @@
{
description = "Development flake for this python project";
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
inputs.flake-utils.url = "github:numtide/flake-utils";
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = nixpkgs.legacyPackages.${system};
python = pkgs.python312;
pythonPackages = pkgs.python312Packages;
projectDependencies = with pythonPackages; [
];
in {
devShells.default = pkgs.mkShell {
nativeBuildInputs = [ pkgs.bashInteractive ];
buildInputs = with pkgs; [
# Core python dependencies
python
pythonPackages.pip
pythonPackages.virtualenv
# IDE tools
pythonPackages.isort
nodePackages.pyright
# Development tools
black
pythonPackages.ipython
pythonPackages.pytest
pythonPackages.setuptools
] ++ projectDependencies;
};
});
}

View File

@@ -0,0 +1,55 @@
{
description = "Development flake for this ROS project";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
ros-overlay.url = "github:lopsided98/nix-ros-overlay";
ros-overlay.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = { self, nixpkgs, flake-utils, ros-overlay }:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = import nixpkgs {
inherit system;
overlays = [ ros-overlay.overlays.default ];
};
in {
devShells.default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [
# Non-ROS packages
] ++ (with rosPackages.humble; [
# ROS packages
(buildEnv {
paths = [
# Core
ros-environment
colcon
# Ros2
ros2run
ros2param
ros2topic
ros2node
ros2interface
ros2service
ros2action
ros2pkg
# RQT
rqt
rqt-msg
rqt-topic
rqt-action
rqt-service-caller
rqt-graph
# Extra
];
})
]);
};
});
}

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]

View File

@@ -0,0 +1,32 @@
{
description = "Development flake for this rust project";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
inputs.flake-utils.url = "github:numtide/flake-utils";
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = nixpkgs.legacyPackages.${system};
projectDependencies = with pkgs; [
];
in {
devShells.default = pkgs.mkShell {
nativeBuildInputs = [ pkgs.bashInteractive ];
buildInputs = with pkgs; [
# Core rust dependencies
rustc
cargo
# Development tools
rustfmt
rust-analyzer
clippy
] ++ projectDependencies;
LD_LIBRARY_PATH = nixpkgs.lib.makeLibraryPath projectDependencies;
RUST_BACKTRACE = 1;
};
});
}

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: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

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