nix

configuration files that power my machines
Log | Files | Refs | README | LICENSE

commit 0ebfd70e9278c0c33ec1d0ac58ad174e23782174
parent 3490014d2ad3e9507394118f13f75d9dda3ccbdf
Author: mtmn <miro@haravara.org>
Date:   Wed, 24 Jun 2026 11:36:31 +0200

nvim: leap, cleanup, etc.

Diffstat:
Mflake.lock | 12++++++------
Mhosts/nixaran/configuration.nix | 0
Mhosts/void/default.nix | 4+++-
Mhosts/void/overlays/config/ghostty/config.ghostty | 14+++++++-------
Mhosts/void/overlays/config/magdalena/config.json.nix | 0
Mhosts/void/overlays/config/river/init | 7++++---
Alib/mifasol.nix | 48++++++++++++++++++++++++++++++++++++++++++++++++
Mmodules/mixins/dotfiles/bin/isolate | 2--
Mmodules/mixins/dotfiles/config/aerc/stylesets/mine | 40++++++++++++++++++++--------------------
Mmodules/mixins/dotfiles/config/bat/themes/magnolia.tmTheme | 14+++++++-------
Mmodules/mixins/dotfiles/config/eza | 24+++++++++++-------------
Mmodules/mixins/dotfiles/config/foot/common.ini | 12++++++------
Mmodules/mixins/dotfiles/config/newsraft/feeds | 2++
Amodules/mixins/dotfiles/config/nvim/fnl/config/base16.fnl | 77+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Amodules/mixins/dotfiles/config/nvim/fnl/config/leap.fnl | 27+++++++++++++++++++++++++++
Amodules/mixins/dotfiles/config/nvim/fnl/config/meepo.fnl | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mmodules/mixins/dotfiles/config/nvim/fnl/init.fnl | 13+++++--------
Mmodules/mixins/dotfiles/config/nvim/fnl/keymaps.fnl | 65++++++++++++++++++++++++++---------------------------------------
Mmodules/mixins/dotfiles/config/shell/profile/fzf | 4++--
Mmodules/mixins/dotfiles/home/tmux.conf | 10+++++-----
Amodules/services/mifasol.nix | 112+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dmodules/services/mstream.nix | 92-------------------------------------------------------------------------------
22 files changed, 430 insertions(+), 211 deletions(-)

diff --git a/flake.lock b/flake.lock @@ -30,11 +30,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1781917173, - "narHash": "sha256-G1F75kp79hHE9mYJbu4aQ3LCP8Z5IpsQXEEvSBtW1mA=", + "lastModified": 1782325712, + "narHash": "sha256-Yb5UneZF9v1DvKFCPS9FX0ynCgvsJTWEaoaWNdnTAv0=", "owner": "~mtmn", "repo": "corpus", - "rev": "146a6b3417a8d6b5434c1fa82ac7177ed0fa2364", + "rev": "3cafafa461a3cfa707bb5c57be92cf16bb6d522e", "type": "sourcehut" }, "original": { @@ -248,11 +248,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1782118813, - "narHash": "sha256-BnbXO5s5EhV89lLXMAGCzPdEN5a6vNqvMk71obeTEUw=", + "lastModified": 1782175435, + "narHash": "sha256-EMzXKmnOtBQ2MnvpiNOm7E+kOMvdPrIKaeg52Tip2Uk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b3c092d3c36d91e2f61f3dfb39a159f180a56659", + "rev": "89570f24e97e614aa34aa9ab1c927b6578a43775", "type": "github" }, "original": { diff --git a/hosts/nixaran/configuration.nix b/hosts/nixaran/configuration.nix Binary files differ. diff --git a/hosts/void/default.nix b/hosts/void/default.nix @@ -79,6 +79,8 @@ sshs flyctl bore-cli + ldns + bind ] (with python314Packages; [yt-dlp-ejs]) ]; @@ -177,6 +179,7 @@ halloy avidemux mpv + supersonic-wayland ]; llm = [ @@ -187,7 +190,6 @@ other = [ babashka - nickel guile haunt go_1_26 diff --git a/hosts/void/overlays/config/ghostty/config.ghostty b/hosts/void/overlays/config/ghostty/config.ghostty @@ -12,20 +12,20 @@ cursor-style = block cursor-style-blink = false shell-integration-features = no-cursor -selection-background = #1d3b53 +selection-background = #1d3b2e selection-foreground = #d6deeb -background = #011627 +background = #0d1612 foreground = #d6deeb -cursor-color = #80a4c2 -cursor-text = #011627 +cursor-color = #9ec9d6 +cursor-text = #0d1612 -palette = 0=#011627 +palette = 0=#0d1612 palette = 1=#ef5350 palette = 2=#22da6e palette = 3=#addb67 -palette = 4=#82aaff +palette = 4=#7fdbca palette = 5=#c792ea palette = 6=#21c7a8 palette = 7=#d6deeb @@ -33,7 +33,7 @@ palette = 8=#637777 palette = 9=#ef5350 palette = 10=#22da6e palette = 11=#ffeb95 -palette = 12=#82aaff +palette = 12=#7fdbca palette = 13=#c792ea palette = 14=#7fdbca palette = 15=#ffffff diff --git a/hosts/void/overlays/config/magdalena/config.json.nix b/hosts/void/overlays/config/magdalena/config.json.nix Binary files differ. diff --git a/hosts/void/overlays/config/river/init b/hosts/void/overlays/config/river/init @@ -7,12 +7,13 @@ alt="Mod4" term="foot" wobsock="$XDG_RUNTIME_DIR/wob.sock" -dmenu_args="-vi -fn 'Ttyp0 OTB:size=10' -l 10 -h 20 -nb '#011627' -nf '#d6deeb' -sb '#1d3b53' -sf '#d6deeb' -nhb '#011627' -nhf '#7fdbca'" +dmenu_args="-vi -fn 'Ttyp0 OTB:size=10' -l 10 -h 20 -nb '#0d1612' -nf '#d6deeb' -sb '#1d3b2e' -sf '#d6deeb' -nhb '#0d1612' -nhf '#7fdbca'" rivertile -view-padding 0 -outer-padding 0 -main-ratio 0.50 & +riverctl background-color "0x0d1612" riverctl border-color-focused "0x7fdbca" -riverctl border-color-unfocused "0x1d3b53" +riverctl border-color-unfocused "0x1d3b2e" riverctl border-width 1 riverctl set-repeat 50 300 @@ -126,7 +127,7 @@ riverctl map normal $alt+Shift Tab send-to-previous-tags riverctl map normal $mod Tab focus-previous-tags riverctl map normal $mod+Shift Tab send-to-previous-tags -swaybg -m fill -c "#011627" -i "$HOME/misc/random/wallpapers/curtains.jpg" & +swaybg -m fill -c "#0d1612" -i "$HOME/misc/random/wallpapers/curtains.jpg" & mkfifo "$wobsock" && tail -f "$wobsock" | wob & wl-paste --watch cliphist store & diff --git a/lib/mifasol.nix b/lib/mifasol.nix @@ -0,0 +1,48 @@ +{ + lib, + buildGoModule, + fetchFromGitHub, + alsa-lib, + pkg-config, +}: +buildGoModule rec { + pname = "mifasol"; + version = "0.5.0"; + + src = fetchFromGitHub { + owner = "jypelle"; + repo = "mifasol"; + rev = "v${version}"; + hash = "sha256-zlCkK2E9Yqut2CyFh14wNgdltJKh/j132QwG51ULeWQ="; + }; + + proxyVendor = true; + vendorHash = "sha256-OO+0Qlu0OeBz/X2/Ihl6SKzRazIK3nb+Qk0DyOBdyyE="; + + subPackages = ["cmd/mifasolsrv" "cmd/mifasolcli"]; + + nativeBuildInputs = [pkg-config]; + buildInputs = [alsa-lib]; + + preBuild = '' + GOOS=js GOARCH=wasm go build \ + -o internal/srv/webSrv/clients/mifasolcliwa.wasm ./cmd/mifasolcliwa + gzip -9 -n -f internal/srv/webSrv/clients/mifasolcliwa.wasm + + goroot=$(go env GOROOT) + if [ -f "$goroot/lib/wasm/wasm_exec.js" ]; then + cp "$goroot/lib/wasm/wasm_exec.js" internal/srv/webSrv/static/js/ + else + cp "$goroot/misc/wasm/wasm_exec.js" internal/srv/webSrv/static/js/ + fi + ''; + + ldflags = ["-s" "-w"]; + + meta = { + description = "Self-hosted music server (FLAC/MP3) with console client and WebAssembly web UI"; + homepage = "https://github.com/jypelle/mifasol"; + license = lib.licenses.mit; + mainProgram = "mifasolsrv"; + }; +} diff --git a/modules/mixins/dotfiles/bin/isolate b/modules/mixins/dotfiles/bin/isolate @@ -48,8 +48,6 @@ done for p in \ "$HOME/.codex" \ - "$HOME/.claude" \ - "$HOME/.claude.json" \ "$HOME/.cache/opencode" \ "$HOME/.config/opencode" \ "$HOME/.local/share/opencode" \ diff --git a/modules/mixins/dotfiles/config/aerc/stylesets/mine b/modules/mixins/dotfiles/config/aerc/stylesets/mine @@ -1,61 +1,61 @@ *.default=true *.normal=true *.fg = #d6deeb -*.selected.bg = #1d3b53 +*.selected.bg = #1d3b2e *.selected.fg = #d6deeb -title.bg=#1d3b53 +title.bg=#1d3b2e title.fg=#d6deeb title.bold=true header.bold=true -header.fg=#82aaff -header.bg=#0b2942 -border.bg=#0b2942 -border.fg=#0b2942 +header.fg=#7fdbca +header.bg=#13281e +border.bg=#13281e +border.fg=#13281e tab.selected.fg=#d6deeb -tab.selected.bg=#1d3b53 +tab.selected.bg=#1d3b2e tab.selected.bold=true -dirlist*.selected.bg=#1d3b53 +dirlist*.selected.bg=#1d3b2e dirlist*.selected.fg=#d6deeb dirlist*.selected.bold=false *error.bold=true *error.fg=#ef5350 *warning.fg=#ecc48d *success.fg=#22da6e -statusline_*.bg=#0b2942 +statusline_*.bg=#13281e statusline_*.fg=#d6deeb statusline_error.fg=#ef5350 msglist_unread.fg=#c792ea msglist_unread.bold=true msglist_read.fg=#a7b9d0 -msglist_deleted.fg=#0b2942 -msglist_*.selected.bg=#1d3b53 +msglist_deleted.fg=#13281e +msglist_*.selected.bg=#1d3b2e msglist_marked.fg=#22da6e msglist_marked.selected.fg=#d6deeb msglist_marked.bg=#ecc48d msglist_marked.selected.bg=#c792ea completion_pill.reverse=false selector_focused.bold=false -selector_focused.bg=#1d3b53 +selector_focused.bg=#1d3b2e selector_focused.fg=#d6deeb selector_chooser.bold=false -selector_chooser.bg=#1d3b53 +selector_chooser.bg=#1d3b2e selector_chooser.fg=#d6deeb default.selected.bold=false -default.selected.bg=#1d3b53 +default.selected.bg=#1d3b2e default.selected.fg=#d6deeb -completion_default.selected.bg=#82aaff +completion_default.selected.bg=#7fdbca [viewer] *.default=true *.normal=true -url.fg = #82aaff -header.fg = #82aaff +url.fg = #7fdbca +header.fg = #7fdbca signature.fg = #c792ea -diff_chunk.fg = #82aaff +diff_chunk.fg = #7fdbca diff_chunk_func.fg = #ecc48d diff_add.fg = #22da6e diff_del.fg = #ef5350 quote_1.fg = #22da6e -quote_2.fg = #82aaff +quote_2.fg = #7fdbca quote_3.fg = #c792ea quote_4.fg = #ecc48d -quote_x.fg = #1d3b53 +quote_x.fg = #1d3b2e diff --git a/modules/mixins/dotfiles/config/bat/themes/magnolia.tmTheme b/modules/mixins/dotfiles/config/bat/themes/magnolia.tmTheme @@ -10,19 +10,19 @@ <key>settings</key> <dict> <key>background</key> - <string>#011627</string> + <string>#0d1612</string> <key>divider</key> - <string>#1d3b53</string> + <string>#1d3b2e</string> <key>foreground</key> <string>#d6deeb</string> <key>caret</key> - <string>#80a4c2</string> + <string>#9ec9d6</string> <key>invisibles</key> - <string>#1d3b53</string> + <string>#1d3b2e</string> <key>lineHighlight</key> - <string>#0b2942</string> + <string>#13281e</string> <key>selection</key> - <string>#1d3b53</string> + <string>#1d3b2e</string> <key>selectionForeground</key> <string>#d6deeb</string> </dict> @@ -68,7 +68,7 @@ <key>settings</key> <dict> <key>foreground</key> - <string>#82aaff</string> + <string>#7fdbca</string> </dict> </dict> <dict> diff --git a/modules/mixins/dotfiles/config/eza b/modules/mixins/dotfiles/config/eza @@ -1,16 +1,14 @@ -# Modus Themes for eza -# Auto generated with https://github.com/miikanissi/modus-themes.nvim/blob/master/lua/modus-themes/extras/eza.lua colourful: true # base colors -define: &bg_main "#011627" -define: &bg_dim = "#0b2942" -define: &bg_alt = "#01111f" +define: &bg_main "#0d1612" +define: &bg_dim = "#13281e" +define: &bg_alt = "#081210" define: &fg_main = "#d6deeb" define: &fg_dim = "#637777" define: &fg_alt = "#a7b9d0" -define: &border = "#1d3b53" -define: &border_highlight = "#5f7e97" +define: &border = "#1d3b2e" +define: &border_highlight = "#5f8f87" # foreground colors define: &red "#ef5350" @@ -25,10 +23,10 @@ define: &yellow "#ecc48d" define: &yellow_warmer "#ffeb95" define: &yellow_cooler "#ecc48d" define: &yellow_faint "#c9b58a" -define: &blue "#82aaff" -define: &blue_warmer "#82aaff" -define: &blue_cooler "#5fb3d9" -define: &blue_faint "#8badc9" +define: &blue "#7fdbca" +define: &blue_warmer "#7fdbca" +define: &blue_cooler "#7fdbca" +define: &blue_faint "#9ec9d6" define: &magenta "#c792ea" define: &magenta_warmer "#d7aaff" define: &magenta_cooler "#c792ea" @@ -40,8 +38,8 @@ define: &cyan_faint "#9ec9d6" define: &rust "#f78c6c" define: &gold "#ecc48d" define: &olive "#addb67" -define: &slate "#5f7e97" -define: &indigo "#82aaff" +define: &slate "#5f8f87" +define: &indigo "#7fdbca" define: &maroon "#c792ea" define: &pink "#d6a9e0" diff --git a/modules/mixins/dotfiles/config/foot/common.ini b/modules/mixins/dotfiles/config/foot/common.ini @@ -9,19 +9,19 @@ style=block blink=no [colors-dark] -cursor=011627 80a4c2 +cursor=0d1612 9ec9d6 -background=011627 +background=0d1612 foreground=d6deeb -selection-background=1d3b53 +selection-background=1d3b2e selection-foreground=d6deeb -regular0=011627 +regular0=0d1612 regular1=ef5350 regular2=22da6e regular3=addb67 -regular4=82aaff +regular4=7fdbca regular5=c792ea regular6=21c7a8 regular7=d6deeb @@ -30,7 +30,7 @@ bright0=637777 bright1=ef5350 bright2=22da6e bright3=ffeb95 -bright4=82aaff +bright4=7fdbca bright5=c792ea bright6=7fdbca bright7=ffffff diff --git a/modules/mixins/dotfiles/config/newsraft/feeds b/modules/mixins/dotfiles/config/newsraft/feeds @@ -38,6 +38,7 @@ https://yosefk.com/blog/feed https://www.scattered-thoughts.net/atom.xml https://romain.blogreen.org/blog/rss-short.xml https://sibexi.co/index.xml +https://analognowhere.com/feed/rss.xml @ substack < reload-period 120 @@ -240,3 +241,4 @@ https://www.youtube.com/feeds/videos.xml?channel_id=UC4a9LfdavRlVMaSSWFdIciA Rob https://www.youtube.com/feeds/videos.xml?channel_id=UCDetdM5XDZD1xrQHDPgEg5w Dictionary of Obscure Sorrows https://www.youtube.com/feeds/videos.xml?channel_id=UCB2ATFiszUNmw6z1x67GnYw zach https://www.youtube.com/feeds/videos.xml?channel_id=UCW7jUEpYT_t0Gsf632d6_wQ clabretro +https://www.youtube.com/feeds/videos.xml?channel_id=UC1yNl2E66ZzKApQdRuTQ4tw Sabine Hossenfelder diff --git a/modules/mixins/dotfiles/config/nvim/fnl/config/base16.fnl b/modules/mixins/dotfiles/config/nvim/fnl/config/base16.fnl @@ -0,0 +1,77 @@ +(local palette {:base00 "#1c1213" + :base01 "#3a2425" + :base02 "#563837" + :base03 "#6d4745" + :base04 "#8b5d57" + :base05 "#a87569" + :base06 "#c58d7b" + :base07 "#e3a68c" + :base08 "#c24f57" + :base09 "#a63650" + :base0A "#f28171" + :base0B "#806c61" + :base0C "#6b6566" + :base0D "#684c59" + :base0E "#a63650" + :base0F "#893f45"}) + +(local cyan {:base00 "#0a2a2a" + :base01 "#324747" + :base02 "#556868" + :base03 "#788a8a" + :base04 "#bbbbbb" + :base05 "#d0d0d0" + :base06 "#e6e6e6" + :base07 "#fcfcfc" + :base08 "#ebcd91" + :base09 "#9f8340" + :base0A "#209870" + :base0B "#82e3ba" + :base0C "#bb6d9b" + :base0D "#a9d4ff" + :base0E "#ffb9e5" + :base0F "#598ab9"}) + +(fn bar-highlights [] + (let [hl (fn [group fg bg attr] + (vim.api.nvim_set_hl 0 group + (vim.tbl_extend :force + {:fg (. cyan fg) + :bg (. cyan bg)} + (or attr {}))))] + (hl :LineNr :base03 :base01) + (hl :LineNrAbove :base03 :base01) + (hl :LineNrBelow :base03 :base01) + (hl :CursorLineNr :base04 :base01) + (hl :SignColumn :base03 :base01) + (hl :FoldColumn :base0C :base01) + (hl :Folded :base03 :base01) + (hl :StatusLine :base04 :base02) + (hl :StatusLineNC :base03 :base01) + (hl :MiniStatuslineModeNormal :base00 :base05 {:bold true}) + (hl :MiniStatuslineModeInsert :base00 :base0D {:bold true}) + (hl :MiniStatuslineModeVisual :base00 :base0B {:bold true}) + (hl :MiniStatuslineModeReplace :base00 :base0E {:bold true}) + (hl :MiniStatuslineModeCommand :base00 :base08 {:bold true}) + (hl :MiniStatuslineModeOther :base00 :base03 {:bold true}) + (hl :MiniStatuslineDevinfo :base04 :base02) + (hl :MiniStatuslineFileinfo :base04 :base02) + (hl :MiniStatuslineFilename :base03 :base01) + (vim.api.nvim_set_hl 0 :MiniStatuslineInactive {:link :StatusLineNC}) + (hl :TabLine :base03 :base01) + (hl :TabLineFill :base03 :base01) + (hl :TabLineSel :base0B :base01) + (hl :MiniTablineCurrent :base05 :base02 {:bold true}) + (hl :MiniTablineVisible :base05 :base01 {:bold true}) + (hl :MiniTablineHidden :base04 :base01) + (hl :MiniTablineTrunc :base05 :base01 {:bold true}) + (hl :MiniTablineModifiedCurrent :base02 :base05 {:bold true}) + (hl :MiniTablineModifiedVisible :base02 :base04 {:bold true}) + (hl :MiniTablineModifiedHidden :base01 :base04) + (hl :MiniTablineTabpagesection :base01 :base0A {:bold true}))) + +(fn config [] + ((. (require :mini.base16) :setup) {: palette :use_cterm true}) + (bar-highlights)) + +{: config} diff --git a/modules/mixins/dotfiles/config/nvim/fnl/config/leap.fnl b/modules/mixins/dotfiles/config/nvim/fnl/config/leap.fnl @@ -0,0 +1,27 @@ +(fn safe_labels [] + (if (: (vim.fn.mode 1) :match :no?) "")) + +(fn config [] + (let [leap_fn (. (require :leap) :leap) + wtk (. (require :leap.user) :with_traversal_keys) + clever_s (wtk :s :S) + clever_t (wtk :t :T) + clever_f (wtk :f :F) + ft (fn [kwargs] + (leap_fn (vim.tbl_deep_extend :keep kwargs + {:inputlen 1 + :inclusive true + :opts {:labels "" + :safe_labels (safe_labels)}})))] + (vim.keymap.set [:n :x :o] :s (fn [] (ft {:opts clever_s}))) + (vim.keymap.set [:n :x :o] :S (fn [] (ft {:backward true :opts clever_s}))) + (vim.keymap.set [:n :x :o] :t (fn [] (ft {:offset -1 :opts clever_t}))) + (vim.keymap.set [:n :x :o] :T + (fn [] (ft {:backward true :offset 1 :opts clever_t}))) + (vim.keymap.set [:n :x :o] :f (fn [] (leap_fn {:opts clever_f})) + {:desc "leap forward"}) + (vim.keymap.set [:n :x :o] :F + (fn [] (leap_fn {:backward true :opts clever_f})) + {:desc "leap backward"}))) + +{: config} diff --git a/modules/mixins/dotfiles/config/nvim/fnl/config/meepo.fnl b/modules/mixins/dotfiles/config/nvim/fnl/config/meepo.fnl @@ -0,0 +1,62 @@ +(local palette {:base00 "#0d1612" + :base01 "#13281e" + :base02 "#1d3b2e" + :base03 "#637777" + :base04 "#a7b9d0" + :base05 "#d6deeb" + :base06 "#e6e6e6" + :base07 "#ffffff" + :base08 "#ef5350" + :base09 "#f78c6c" + :base0A "#ffeb95" + :base0B "#22da6e" + :base0C "#21c7a8" + :base0D "#7fdbca" + :base0E "#c792ea" + :base0F "#addb67"}) + +; olive + +(fn bar-highlights [] + (let [hl (fn [group fg bg attr] + (vim.api.nvim_set_hl 0 group + (vim.tbl_extend :force + {:fg (. palette fg) + :bg (. palette bg)} + (or attr {}))))] + (hl :LineNr :base03 :base01) + (hl :LineNrAbove :base03 :base01) + (hl :LineNrBelow :base03 :base01) + (hl :CursorLineNr :base04 :base01) + (hl :SignColumn :base03 :base01) + (hl :FoldColumn :base0C :base01) + (hl :Folded :base03 :base01) + (hl :StatusLine :base04 :base02) + (hl :StatusLineNC :base03 :base01) + (hl :MiniStatuslineModeNormal :base00 :base05 {:bold true}) + (hl :MiniStatuslineModeInsert :base00 :base0D {:bold true}) + (hl :MiniStatuslineModeVisual :base00 :base0B {:bold true}) + (hl :MiniStatuslineModeReplace :base00 :base0E {:bold true}) + (hl :MiniStatuslineModeCommand :base00 :base08 {:bold true}) + (hl :MiniStatuslineModeOther :base00 :base03 {:bold true}) + (hl :MiniStatuslineDevinfo :base04 :base02) + (hl :MiniStatuslineFileinfo :base04 :base02) + (hl :MiniStatuslineFilename :base03 :base01) + (vim.api.nvim_set_hl 0 :MiniStatuslineInactive {:link :StatusLineNC}) + (hl :TabLine :base03 :base01) + (hl :TabLineFill :base03 :base01) + (hl :TabLineSel :base0B :base01) + (hl :MiniTablineCurrent :base05 :base02 {:bold true}) + (hl :MiniTablineVisible :base05 :base01 {:bold true}) + (hl :MiniTablineHidden :base04 :base01) + (hl :MiniTablineTrunc :base05 :base01 {:bold true}) + (hl :MiniTablineModifiedCurrent :base02 :base05 {:bold true}) + (hl :MiniTablineModifiedVisible :base02 :base04 {:bold true}) + (hl :MiniTablineModifiedHidden :base01 :base04) + (hl :MiniTablineTabpagesection :base01 :base0A {:bold true}))) + +(fn config [] + ((. (require :mini.base16) :setup) {: palette :use_cterm true}) + (bar-highlights)) + +{: config} diff --git a/modules/mixins/dotfiles/config/nvim/fnl/init.fnl b/modules/mixins/dotfiles/config/nvim/fnl/init.fnl @@ -6,12 +6,14 @@ (local {: format} string) (fn gh [name] (.. "https://github.com/" name)) +(fn cb [name] (.. "https://codeberg.org/" name)) ;; fnlfmt: skip (fn setup-plugins [] (local blink (require :config.blink)) (local lsp (require :config.lsp)) (local treesitter (require :config.treesitter)) + (local meepo (require :config.meepo)) (vim.pack.add [(gh :nvim-mini/mini.nvim) @@ -26,23 +28,18 @@ {:src (gh :saghen/blink.cmp) :version (vim.version.range "^1")}] {:load true}) - (vim.cmd.colorscheme :minicyan) - - (vim.api.nvim_set_hl 0 :Normal {:bg :NONE}) - (vim.api.nvim_set_hl 0 :NormalFloat {:bg :NONE}) - (vim.api.nvim_set_hl 0 :NormalNC {:bg :NONE}) - + ((. meepo :config)) ((. (require :mini.comment) :setup)) ((. (require :mini.surround) :setup)) ((. (require :mini.pairs) :setup)) - ((. (require :mini.jump2d) :setup) {:mappings {:start_jumping ""}}) + ((. (require :mini.jump2d) :setup) {:mappings {:start_jumping :f}}) ((. (require :oil) :setup) {:default_file_explorer false}) ((. (require :orgmode) :setup) {:org_agenda_files ["~/.nb/notes/**/*.org" "~/.nb/work/**/*.org"] :org_default_notes_file "~/.nb/notes/refile.org"}) ((. (require :neogit) :setup)) - ((. (require :diffview) :setup) ((. (require :fzf-lua) :setup)) + ((. (require :diffview) :setup) {:diff_binaries false :enhanced_diff_hl false :git_cmd [:git] diff --git a/modules/mixins/dotfiles/config/nvim/fnl/keymaps.fnl b/modules/mixins/dotfiles/config/nvim/fnl/keymaps.fnl @@ -1,34 +1,23 @@ -(local opts {:noremap true :silent false}) - -(local fzf-keymaps {:<leader><leader> :files - :<leader>ff :git_status - :<leader>fh :oldfiles - :<leader>fg :grep_project - :<leader>b :buffers}) - -(each [key func (pairs fzf-keymaps)] +(each [key func (pairs {:<leader><leader> :files + :<leader>ff :git_status + :<leader>fh :oldfiles + :<leader>fg :grep_project + :<leader>bb :buffers})] (vim.keymap.set :n key (.. "<cmd>lua require('fzf-lua')." func "()<CR>"))) -(local single-keymaps {:<leader>g :<cmd>Neogit<CR> - :- :<cmd>Oil<CR> - :f "<cmd>lua MiniJump2d.start()<CR>" - :mn :<cmd>Mnav<CR>}) - -(each [key cmd (pairs single-keymaps)] +(each [key cmd (pairs {:<leader>ng :<cmd>Neogit<CR> :- :<cmd>Oil<CR>})] (vim.keymap.set :n key cmd)) -(local lsp-keymaps {:<leader>gg :hover - :<leader>gd :definition - :<leader>gD :declaration - :<leader>gi :implementation - :<leader>gt :type_definition - :<leader>gr :references - :<leader>gs :signature_help - :<leader>rr :rename - :<leader>ga :code_action - :<leader>tr :document_symbol}) - -(each [key func (pairs lsp-keymaps)] +(each [key func (pairs {:<leader>gg :hover + :<leader>gd :definition + :<leader>gD :declaration + :<leader>gi :implementation + :<leader>gt :type_definition + :<leader>gr :references + :<leader>gs :signature_help + :<leader>rr :rename + :<leader>ga :code_action + :<leader>tr :document_symbol})] (vim.keymap.set :n key (.. "<cmd>lua vim.lsp.buf." func "()<CR>"))) (vim.keymap.set :n :<leader>ta @@ -40,25 +29,23 @@ (vim.keymap.set :n :<leader>tt (fn [] (let [line (vim.api.nvim_get_current_line)] - (var new-line nil) + (var new_line nil) (if (line:match "%[ %]") - (set new-line (line:gsub "%[ %]" "[-]" 1)) + (set new_line (line:gsub "%[ %]" "[-]" 1)) (line:match "%[%-%]") - (set new-line (line:gsub "%[%-%]" "[x]" 1)) + (set new_line (line:gsub "%[%-%]" "[x]" 1)) (line:match "%[x%]") - (set new-line (line:gsub "%[x%]" "[ ]" 1))) - (when new-line (vim.api.nvim_set_current_line new-line))))) - -(local diagnostic-keymaps {:<leader>gl :open_float - :<leader>gp :goto_prev - :<leader>gn :goto_next}) - -(each [key func (pairs diagnostic-keymaps)] - (vim.keymap.set :n key (.. "<cmd>lua vim.diagnostic." func "()<CR>"))) + (set new_line (line:gsub "%[x%]" "[ ]" 1))) + (when new_line (vim.api.nvim_set_current_line new_line))))) (vim.keymap.set :v :<leader>gf "<cmd>lua vim.lsp.buf.format({async = true})<CR>") (vim.keymap.set :i :<C-Space> "<cmd>lua vim.lsp.buf.completion()<CR>") +(each [key func (pairs {:<leader>gl :open_float + :<leader>gp :goto_prev + :<leader>gn :goto_next})] + (vim.keymap.set :n key (.. "<cmd>lua vim.diagnostic." func "()<CR>"))) + (vim.keymap.set :n :x "\"_x") diff --git a/modules/mixins/dotfiles/config/shell/profile/fzf b/modules/mixins/dotfiles/config/shell/profile/fzf @@ -3,8 +3,8 @@ export FZF_DEFAULT_OPTS="$FZF_DEFAULT_OPTS \ --ansi \ --layout=reverse \ --border=rounded \ - --color=bg+:#1d3b53,bg:-1,spinner:#7fdbca,hl:#7fdbca \ + --color=bg+:#1d3b2e,bg:-1,spinner:#7fdbca,hl:#7fdbca \ --color=fg:#d6deeb,header:#637777,info:#637777,pointer:#7fdbca \ --color=marker:#7fdbca,fg+:#d6deeb,prompt:#7fdbca,hl+:#7fdbca \ - --color=border:#011627 \ + --color=border:#0d1612 \ " diff --git a/modules/mixins/dotfiles/home/tmux.conf b/modules/mixins/dotfiles/home/tmux.conf @@ -14,16 +14,16 @@ set -g status-left '' set -g status-right '#(test -f /tmp/pracomer.log && cat /tmp/pracomer.log) #(plants) %a %h-%d %H:%M #(cat /sys/class/power_supply/BAT*/capacity 2>/dev/null)%% ' set -g status-style "fg=#d6deeb,bg=default" -set -g message-style "fg=#d6deeb,bg=#1d3b53" -set -g message-command-style "fg=#d6deeb,bg=#1d3b53" -set -g mode-style "fg=#d6deeb,bg=#1d3b53" +set -g message-style "fg=#d6deeb,bg=#1d3b2e" +set -g message-command-style "fg=#d6deeb,bg=#1d3b2e" +set -g mode-style "fg=#d6deeb,bg=#1d3b2e" set -g menu-style "fg=#d6deeb,bg=default" -set -g menu-selected-style "fg=#011627,bg=#d6deeb" +set -g menu-selected-style "fg=#0d1612,bg=#d6deeb" set -g menu-border-style "fg=default,bg=default" set -g menu-border-lines "none" -set -g pane-border-style "fg=#1d3b53" +set -g pane-border-style "fg=#1d3b2e" set -g pane-active-border-style "fg=#637777" set -g window-status-style "fg=#637777,bg=default" diff --git a/modules/services/mifasol.nix b/modules/services/mifasol.nix @@ -0,0 +1,112 @@ +{ + config, + lib, + pkgs, + haravara, + ... +}: let + cfg = config.services.haravara.mifasol; + mifasol = pkgs.callPackage ../../lib/mifasol.nix {}; +in { + options.services.haravara.mifasol = { + enable = lib.mkEnableOption "mifasol music streaming server"; + + port = lib.mkOption { + type = lib.types.port; + default = 6620; + }; + + domain = lib.mkOption { + type = lib.types.str; + description = "Public domain for the mifasol instance"; + }; + + dataDir = lib.mkOption { + type = lib.types.str; + default = "/var/lib/haravara/mifasol"; + }; + + songsDir = lib.mkOption { + type = lib.types.nullOr lib.types.str; + default = null; + example = "/mnt/meepo/mifasol"; + }; + + uid = lib.mkOption { + type = lib.types.int; + default = 991; + description = "uid for the mifasol user"; + }; + + gid = lib.mkOption { + type = lib.types.int; + default = 991; + description = "gid for the mifasol group"; + }; + + authLabel = haravara.authLabelOption; + }; + + config = lib.mkIf cfg.enable { + systemd.services.mifasol = { + description = "mifasol music server"; + wantedBy = ["multi-user.target"]; + after = ["network.target"]; + + unitConfig = lib.mkIf (cfg.songsDir != null) { + RequiresMountsFor = cfg.songsDir; + }; + + serviceConfig = { + User = "mifasol"; + Group = "mifasol"; + ExecStartPre = '' + ${lib.getExe mifasol} -c ${cfg.dataDir} config \ + -disable-ssl -n ${toString cfg.port} -hostnames ${cfg.domain} + ''; + ExecStart = "${lib.getExe mifasol} -c ${cfg.dataDir} run"; + Restart = "on-failure"; + + NoNewPrivileges = true; + ProtectSystem = "strict"; + ProtectHome = true; + PrivateTmp = true; + ReadWritePaths = [cfg.dataDir] ++ lib.optional (cfg.songsDir != null) cfg.songsDir; + + BindPaths = lib.mkIf (cfg.songsDir != null) ["${cfg.songsDir}:${cfg.dataDir}/data"]; + }; + }; + + systemd.tmpfiles.rules = + [ + "d ${cfg.dataDir} 0750 mifasol mifasol -" + ] + ++ lib.optional (cfg.songsDir != null) "d ${cfg.songsDir} 0750 mifasol mifasol -"; + + users = { + users.mifasol = { + isSystemUser = true; + group = "mifasol"; + home = cfg.dataDir; + inherit (cfg) uid; + }; + groups.mifasol = {inherit (cfg) gid;}; + }; + + services.caddy.virtualHosts."${cfg.domain}".extraConfig = + if cfg.authLabel == null + then '' + reverse_proxy 127.0.0.1:${toString cfg.port} + '' + else '' + @app not path /api/v1* /isalive + handle @app { + ${haravara.mkAuthImport cfg.authLabel} + reverse_proxy 127.0.0.1:${toString cfg.port} + } + handle { + reverse_proxy 127.0.0.1:${toString cfg.port} + } + ''; + }; +} diff --git a/modules/services/mstream.nix b/modules/services/mstream.nix @@ -1,92 +0,0 @@ -{ - config, - lib, - haravara, - ... -}: let - cfg = config.services.haravara.mstream; -in { - options.services.haravara.mstream = { - enable = lib.mkEnableOption "mStream music streaming server"; - - port = lib.mkOption { - type = lib.types.port; - default = 3000; - description = "Host port to expose mStream on (container listens on 3000)"; - }; - - domain = lib.mkOption { - type = lib.types.str; - description = "Domain for the mStream instance"; - }; - - musicDir = lib.mkOption { - type = lib.types.str; - default = "/srv/mstream"; - description = '' - Shared music library on the host. Mounted read-write because mStream - writes uploaded tracks here. Created and owned by the mstream user. - ''; - }; - - dataDir = lib.mkOption { - type = lib.types.str; - default = "/var/lib/haravara/mstream"; - description = "Directory for mStream state"; - }; - - uid = lib.mkOption { - type = lib.types.int; - default = 992; - description = "uid for the mstream user"; - }; - - gid = lib.mkOption { - type = lib.types.int; - default = 992; - description = "gid for the mstream group"; - }; - - authLabel = haravara.authLabelOption; - }; - - config = lib.mkIf cfg.enable { - virtualisation.oci-containers = { - backend = "podman"; - - containers.mstream = { - image = "lscr.io/linuxserver/mstream@sha256:bede502eb4717fc2f25a7ec917d9f4bf63fce5bf18cbaca46aced1ddf8e8d2c3"; - ports = ["127.0.0.1:${toString cfg.port}:3000"]; - volumes = [ - "${cfg.dataDir}:/config" - # rshared so the geesefs FUSE mount is visible inside the container - "${cfg.musicDir}:/music:rshared" - ]; - environment = { - PUID = toString cfg.uid; - PGID = toString cfg.gid; - TZ = config.time.timeZone; - }; - }; - }; - - # musicDir is a geesefs mount managed elsewhere; only create the state dir. - systemd.tmpfiles.rules = [ - "d ${cfg.dataDir} 0750 mstream mstream -" - ]; - - users = { - users.mstream = { - isSystemUser = true; - group = "mstream"; - inherit (cfg) uid; - }; - groups.mstream = {inherit (cfg) gid;}; - }; - - services.caddy.virtualHosts."${cfg.domain}".extraConfig = '' - ${haravara.mkAuthImport cfg.authLabel} - reverse_proxy 127.0.0.1:${toString cfg.port} - ''; - }; -}