diff --git a/config-root.toml b/config-root.toml index 04a8fd24..f41aa8c9 100644 --- a/config-root.toml +++ b/config-root.toml @@ -1,3 +1,6 @@ +[actions] +mkinitcpio = "mkinitcpio -P" + [config] backup = true banner = true @@ -118,6 +121,7 @@ dst = "/.ignore" [dotfiles."f_mkinitcpio.conf"] src = "etc/mkinitcpio.conf" dst = "/etc/mkinitcpio.conf" +actions = ["mkinitcpio"] [dotfiles."f_vconsole.conf"] src = "etc/vconsole.conf" @@ -146,6 +150,7 @@ dst = "/etc/mkinitcpio.d/linux.preset" [dotfiles.f_cmdline] src = "etc/kernel/cmdline" dst = "/etc/kernel/cmdline" +actions = ["mkinitcpio"] [dotfiles."f_timesyncd.conf"] src = "etc/systemd/timesyncd.conf" @@ -201,6 +206,23 @@ dotfiles = [ ] include = ["Locale", "Pacman"] +[profiles.VentoyArch] +dotfiles = [ + "d_bin", + "f_cmdline", + "f_doas.conf", + "f_fonts.conf", + "f_freetype2.sh", + "f_ignore", + "f_logind.conf", + "f_mkinitcpio.conf", + "f_mkinitcpio_linux.preset", + "f_plymouthd.conf", + "f_system.conf", + "f_timesyncd.conf", +] +include = ["Locale", "Pacman"] + [profiles.Shire] dotfiles = [ "d_bin", @@ -222,7 +244,7 @@ dotfiles = [ "f_sshd_config", "f_system.conf", ] -include = ["Locale"] +include = ["Locale", "Pacman"] [profiles.Moria] include = ["Locale", "Pacman"] diff --git a/config.toml b/config.toml index 00ecb92a..2972b4c6 100644 --- a/config.toml +++ b/config.toml @@ -214,6 +214,16 @@ dotfiles = [ [profiles.Mirkwood.variables] wayland = true +[profiles.VentoyArch] +include = ["pacman", "terminal", "media", "gpg"] +dotfiles = [ + "f_dconf.ini", + "f_fonts.conf", +] + +[profiles.VentoyArch.variables] +wayland = true + [profiles.Shire] include = ["pacman", "terminal", "media", "gpg"] dotfiles = [ diff --git a/docker/authentik/docker-compose.yaml b/docker/authentik/docker-compose.yaml index 7b620946..a8831667 100644 --- a/docker/authentik/docker-compose.yaml +++ b/docker/authentik/docker-compose.yaml @@ -66,16 +66,6 @@ services: environment: GEOIPUPDATE_EDITION_IDS: GeoLite2-City GEOIPUPDATE_FREQUENCY: '8' - whoami-test: - image: traefik/whoami - container_name: whoami-test - restart: unless-stopped - security_opt: - - no-new-privileges:true - networks: - - proxy - environment: - - TZ networks: authentik: external: true diff --git a/docker/caddy/Caddyfile b/docker/caddy/Caddyfile index d94a84fa..b45a08ad 100644 --- a/docker/caddy/Caddyfile +++ b/docker/caddy/Caddyfile @@ -1,218 +1,67 @@ { - order umami first + auto_https off } -(common_site_settings) { - encode zstd gzip - - tls { - dns cloudflare {$CLOUDFLARE_API_TOKEN} - resolvers 1.1.1.1 - } - - header { - Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" - } +http://index.korhonen.lan { + root * /var/www/index.korhonen.cc + file_server browse } -korhonen.cc, *.korhonen.cc { - import common_site_settings - - @static { - file - path *.ico *.css *.js *.gif *.webp *.avif *.jpg *.jpeg *.png *.svg *.woff *.woff2 *.pdf *.webmanifest - } - - @homepage-www-redir host www.korhonen.cc - handle @homepage-www-redir { - redir https://korhonen.cc - } - - @homepage host korhonen.cc - handle @homepage { - # Redirect finnish WIP - # @redirFinnish { - # header Accept-Language *fi-FI* - # not path *.js *.css *.png *.jpg *.jpeg *.svg - # not path /en* /fi* - # } - # redir @redirFinnish /fi{uri} - # - # uri strip_prefix /en - - header @static Cache-Control max-age=5184000 - root * /var/www/korhonen.cc - file_server - } - - @wkd host openpgpkey.korhonen.cc - handle @wkd { - root * /var/www/wkd - file_server browse - header Access-Control-Allow-Origin "*" - } - - @index host index.korhonen.cc - handle @index { - umami { - event_endpoint "https://umami.korhonen.cc/api/send" - website_uuid "9fe4f5c0-8e63-4479-a58d-d399cdbc0a3a" - client_ip_header X-Real-IP - device_detection - allowed_extensions "" .tar.zst .json .html - } - root * /var/www/index.korhonen.cc - file_server browse - } - - @home-assistant host home.korhonen.cc - handle @home-assistant { - reverse_proxy home-assistant:8123 - } - - @authentik host sso.korhonen.cc - handle @authentik { - reverse_proxy authentik:9000 - } - - @forgejo host git.korhonen.cc - handle @forgejo { - rewrite /user/login /user/oauth2/authentik - reverse_proxy forgejo:3000 - } - - @woodpecker host ci.korhonen.cc - handle @woodpecker { - reverse_proxy woodpecker:8000 - } - - @searx host search.korhonen.cc - handle @searx { - reverse_proxy searx:8080 - } - - @freshrss host rss.korhonen.cc - handle @freshrss { - reverse_proxy freshrss - } - - @jellyfin host jellyfin.korhonen.cc - handle @jellyfin { - reverse_proxy jellyfin:8096 - } - - @pihole host pihole.korhonen.cc - handle @pihole { - reverse_proxy pihole - } - - @umami host umami.korhonen.cc - handle @umami { - reverse_proxy umami:3000 - } - - @nextcloud host cloud.korhonen.cc - handle @nextcloud { - # Redirect login page to Authentik - redir /login /apps/sociallogin/custom_oidc/korhonen-sso 301 - - # .htaccess / data / config / ... shouldn't be accessible from outside - @forbidden { - path /.htaccess - path /data/* - path /config/* - path /db_structure - path /.xml - path /README - path /3rdparty/* - path /lib/* - path /templates/* - path /occ - path /console.php - } - handle @forbidden { - respond 404 - } - - redir /.well-known/carddav /remote.php/dav 301 - redir /.well-known/caldav /remote.php/dav 301 - - root * /var/www/nextcloud - php_fastcgi nextcloud:9000 { - root /var/www/html - # Tells nextcloud to remove /index.php from URLs in links - env front_controller_active true - } - file_server - } - - @tvheadend host tvheadend.korhonen.cc - handle @tvheadend { - reverse_proxy tvheadend:9981 - } - - @collabora host collabora.korhonen.cc - handle @collabora { - reverse_proxy collabora:9980 - } - - @grafana host grafana.korhonen.cc - handle @grafana { - reverse_proxy grafana:3000 - } - - @drop host drop.korhonen.cc - handle @drop { - reverse_proxy drop:3000 - } - - @ipvX host ipv6.korhonen.cc ipv4.korhonen.cc - handle @ipvX { - respond {remote_host} - } - - @ott host ott.korhonen.cc - handle @ott { - reverse_proxy opentogethertube:8080 - } - - handle { - respond "404 Not Found" 404 - } - - handle_errors { - @homepage_404 { - expression {http.error.status_code} == 404 - host korhonen.cc - } - handle @homepage_404 { - root * /var/www/korhonen.cc - rewrite * /404.html - file_server - } - - respond "{err.status_code} {err.status_text}" - } +http://home.korhonen.lan { + reverse_proxy home-assistant:8123 } -korhonen.social, *.korhonen.social { - import common_site_settings - - @firefish-www-redir host www.korhonen.social - handle @firefish-www-redir { - redir https://korhonen.social - } - - @firefish host korhonen.social - handle @firefish { - reverse_proxy firefish:3000 - } - - handle { - respond "404 Not Found" 404 - } - - handle_errors { - respond "{err.status_code} {err.status_text}" - } +http://sso.korhonen.lan, http://sso.korhonen.cc { + reverse_proxy authentik:9000 +} + +http://git.korhonen.lan { + rewrite /user/login /user/oauth2/authentik + reverse_proxy forgejo:3000 +} + +http://search.korhonen.lan { + reverse_proxy searx:8080 +} + +http://jellyfin.korhonen.lan { + reverse_proxy jellyfin:8096 +} + +http://cloud.korhonen.lan { + # Redirect login page to Authentik + redir /login /apps/sociallogin/custom_oidc/korhonen-sso 301 + + # .htaccess / data / config / ... shouldn't be accessible from outside + @forbidden { + path /.htaccess + path /data/* + path /config/* + path /db_structure + path /.xml + path /README + path /3rdparty/* + path /lib/* + path /templates/* + path /occ + path /console.php + } + handle @forbidden { + respond 404 + } + + redir /.well-known/carddav /remote.php/dav 301 + redir /.well-known/caldav /remote.php/dav 301 + + root * /var/www/nextcloud + php_fastcgi nextcloud:9000 { + root /var/www/html + # Tells nextcloud to remove /index.php from URLs in links + env front_controller_active true + } + file_server +} + +http://collabora.korhonen.lan { + reverse_proxy collabora:9980 } diff --git a/docker/caddy/Caddyfile.old b/docker/caddy/Caddyfile.old new file mode 100644 index 00000000..e33bef26 --- /dev/null +++ b/docker/caddy/Caddyfile.old @@ -0,0 +1,195 @@ +# My old public configuration. +# Currently don't have a public IP so running everything in LAN +# in the current configuration + +{ + order umami first +} + +(common_site_settings) { + encode zstd gzip + + tls { + dns cloudflare {$CLOUDFLARE_API_TOKEN} + resolvers 1.1.1.1 + } + + header { + Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" + } +} + +korhonen.cc, *.korhonen.cc { + import common_site_settings + + @static { + file + path *.ico *.css *.js *.gif *.webp *.avif *.jpg *.jpeg *.png *.svg *.woff *.woff2 *.pdf *.webmanifest + } + + @homepage-www-redir host www.korhonen.cc + handle @homepage-www-redir { + redir https://korhonen.cc + } + + @homepage host korhonen.cc + handle @homepage { + # Redirect finnish WIP + # @redirFinnish { + # header Accept-Language *fi-FI* + # not path *.js *.css *.png *.jpg *.jpeg *.svg + # not path /en* /fi* + # } + # redir @redirFinnish /fi{uri} + # + # uri strip_prefix /en + + header @static Cache-Control max-age=5184000 + root * /var/www/korhonen.cc + file_server + } + + @wkd host openpgpkey.korhonen.cc + handle @wkd { + root * /var/www/wkd + file_server browse + header Access-Control-Allow-Origin "*" + } + + @index host index.korhonen.cc + handle @index { + umami { + event_endpoint "https://umami.korhonen.cc/api/send" + website_uuid "9fe4f5c0-8e63-4479-a58d-d399cdbc0a3a" + client_ip_header X-Real-IP + device_detection + allowed_extensions "" .tar.zst .json .html + } + root * /var/www/index.korhonen.cc + file_server browse + } + + @home-assistant host home.korhonen.cc + handle @home-assistant { + reverse_proxy home-assistant:8123 + } + + @authentik host sso.korhonen.cc + handle @authentik { + reverse_proxy authentik:9000 + } + + @forgejo host git.korhonen.cc + handle @forgejo { + rewrite /user/login /user/oauth2/authentik + reverse_proxy forgejo:3000 + } + + @woodpecker host ci.korhonen.cc + handle @woodpecker { + reverse_proxy woodpecker:8000 + } + + @searx host search.korhonen.cc + handle @searx { + reverse_proxy searx:8080 + } + + @freshrss host rss.korhonen.cc + handle @freshrss { + reverse_proxy freshrss + } + + @jellyfin host jellyfin.korhonen.cc + handle @jellyfin { + reverse_proxy jellyfin:8096 + } + + @pihole host pihole.korhonen.cc + handle @pihole { + reverse_proxy pihole + } + + @umami host umami.korhonen.cc + handle @umami { + reverse_proxy umami:3000 + } + + @nextcloud host cloud.korhonen.cc + handle @nextcloud { + # Redirect login page to Authentik + redir /login /apps/sociallogin/custom_oidc/korhonen-sso 301 + + # .htaccess / data / config / ... shouldn't be accessible from outside + @forbidden { + path /.htaccess + path /data/* + path /config/* + path /db_structure + path /.xml + path /README + path /3rdparty/* + path /lib/* + path /templates/* + path /occ + path /console.php + } + handle @forbidden { + respond 404 + } + + redir /.well-known/carddav /remote.php/dav 301 + redir /.well-known/caldav /remote.php/dav 301 + + root * /var/www/nextcloud + php_fastcgi nextcloud:9000 { + root /var/www/html + # Tells nextcloud to remove /index.php from URLs in links + env front_controller_active true + } + file_server + } + + @tvheadend host tvheadend.korhonen.cc + handle @tvheadend { + reverse_proxy tvheadend:9981 + } + + @collabora host collabora.korhonen.cc + handle @collabora { + reverse_proxy collabora:9980 + } + + @drop host drop.korhonen.cc + handle @drop { + reverse_proxy drop:3000 + } + + @ipvX host ipv6.korhonen.cc ipv4.korhonen.cc + handle @ipvX { + respond {remote_host} + } + + @ott host ott.korhonen.cc + handle @ott { + reverse_proxy opentogethertube:8080 + } + + handle { + respond "404 Not Found" 404 + } + + handle_errors { + @homepage_404 { + expression {http.error.status_code} == 404 + host korhonen.cc + } + handle @homepage_404 { + root * /var/www/korhonen.cc + rewrite * /404.html + file_server + } + + respond "{err.status_code} {err.status_text}" + } +} diff --git a/docker/homeautomation/docker-compose.yaml b/docker/homeautomation/docker-compose.yaml index 346e9660..ca42998a 100644 --- a/docker/homeautomation/docker-compose.yaml +++ b/docker/homeautomation/docker-compose.yaml @@ -11,8 +11,6 @@ services: restart: unless-stopped environment: - TZ=Europe/Helsinki - devices: - - /dev/ttyACM0 volumes: - hass:/config - /etc/localtime:/etc/localtime:ro @@ -25,20 +23,20 @@ services: - 8300:8300 extra_hosts: - host.docker.internal:host-gateway - mosquitto: - container_name: mosquitto - image: eclipse-mosquitto - restart: unless-stopped - environment: - - TZ=Europe/Helsinki - networks: - - homeautomation - ports: - - 1883:1883 - - 8866:8866 - volumes: - - mosquitto:/mosquitto - - /etc/localtime:/etc/localtime:ro + # mosquitto: + # container_name: mosquitto + # image: eclipse-mosquitto + # restart: unless-stopped + # environment: + # - TZ=Europe/Helsinki + # networks: + # - homeautomation + # ports: + # - 1883:1883 + # - 8866:8866 + # volumes: + # - mosquitto:/mosquitto + # - /etc/localtime:/etc/localtime:ro piper_english: container_name: piper_english image: rhasspy/wyoming-piper @@ -75,85 +73,6 @@ services: volumes: - whisper_english:/data - /etc/localtime:/etc/localtime:ro - openwakeword_english: - container_name: openwakeword_english - image: rhasspy/wyoming-openwakeword - restart: unless-stopped - environment: - - TZ=Europe/Helsinki - networks: - - homeautomation - command: - - --preload-model - - ok_nabu - depends_on: - - home-assistant - volumes: - - openwakeword_english:/data - - /etc/localtime:/etc/localtime:ro - microphone: - build: https://github.com/rhasspy/wyoming-mic-external.git - image: rhasspy/wyoming-mic-external - container_name: microphone - restart: unless-stopped - devices: - - /dev/snd:/dev/snd - ports: - - 10600:10600 - group_add: - - audio - networks: - - homeautomation - command: - - --device - - plughw:CARD=USB,DEV=0 - - --debug - volumes: - - /etc/localtime:/etc/localtime:ro - speaker: - build: https://github.com/rhasspy/wyoming-snd-external.git - image: rhasspy/wyoming-snd-external - container_name: speaker - restart: unless-stopped - devices: - - /dev/snd:/dev/snd - ports: - - 10601:10601 - group_add: - - audio - networks: - - homeautomation - command: - - --device - - iec958:CARD=USB,DEV=0 - - --debug - volumes: - - /etc/localtime:/etc/localtime:ro - satellite: - build: https://github.com/rhasspy/wyoming-satellite.git - image: rhasspy/wyoming-satellite - container_name: satellite - restart: unless-stopped - ports: - - 10700:10700 - networks: - - homeautomation - depends_on: - - speaker - - microphone - - whisper_english - command: - - --name - - ha-server-satellite - - --mic-uri - - tcp://microphone:10600 - - --snd-uri - - tcp://speaker:10601 - - --wake-uri - - tcp://openwakeword_english:10400 - - --debug - volumes: - - /etc/localtime:/etc/localtime:ro networks: homeautomation: external: false diff --git a/home/.config/dconf.ini b/home/.config/dconf.ini index 15d59d20..19ccc814 100644 --- a/home/.config/dconf.ini +++ b/home/.config/dconf.ini @@ -17,10 +17,10 @@ locations=[<(uint32 2, <('Lappeenranta', 'EFLP', false, [(1.0654507804726074, 0. locations=[<(uint32 2, <('Lappeenranta', 'EFLP', false, [(1.0654507804726074, 0.49128594181309354)], @a(dd) [])>)>] [org/gnome/shell/world-clocks] -locations=[<(uint32 2, <('Bangkok', 'VTBD', true, [(0.24289166005364171, 1.7558012275062955)], [(0.23998277214922031, 1.754346792280731)])>)>] +locations=[<(uint32 2, <('Bangkok', 'VTBD', true, [(0.24289166005364171, 1.7558012275062955)], [(0.23998277214922031, 1.754346792280731)])>)>, <(uint32 2, <('Lappeenranta', 'EFLP', true, [(1.0654507804726074, 0.49128594181309354)], [(1.065814402368968, 0.49189195503597105)])>)>] [org/gnome/clocks] -world-clocks=[{'location': <(uint32 2, <('Bangkok', 'VTBD', true, [(0.24289166005364171, 1.7558012275062955)], [(0.23998277214922031, 1.754346792280731)])>)>}] +world-clocks=[{'location': <(uint32 2, <('Bangkok', 'VTBD', true, [(0.24289166005364171, 1.7558012275062955)], [(0.23998277214922031, 1.754346792280731)])>)>}, {'location': <(uint32 2, <('Lappeenranta', 'EFLP', true, [(1.0654507804726074, 0.49128594181309354)], [(1.065814402368968, 0.49189195503597105)])>)>}] [org/gnome/desktop/a11y/mouse] dwell-click-enabled=false diff --git a/home/.config/fontconfig/fonts.conf b/home/.config/fontconfig/fonts.conf index f00c9381..a12fa719 100644 --- a/home/.config/fontconfig/fonts.conf +++ b/home/.config/fontconfig/fonts.conf @@ -4,19 +4,19 @@ sans-serif - Overpass + Adwaita Sans serif - Overpass + Adwaita Sans monospace - Hack Nerd Font Mono + Adwaita mono diff --git a/home/.config/git/config b/home/.config/git/config index 788a7261..545f3313 100644 --- a/home/.config/git/config +++ b/home/.config/git/config @@ -42,6 +42,7 @@ pull-merge = pull --no-rebase --no-ff --no-edit log-merge = log -i --grep=merge --pretty=oneline log-fp = log --first-parent --pretty=oneline ll = log --pretty=oneline +dno = !git --no-pager diff --name-only [color] pager = no diff --git a/home/.config/nvim/lazy-lock.json b/home/.config/nvim/lazy-lock.json index 434819ce..1ebcf4b2 100644 --- a/home/.config/nvim/lazy-lock.json +++ b/home/.config/nvim/lazy-lock.json @@ -1,69 +1,70 @@ { - "LuaSnip": { "branch": "master", "commit": "787dee55ca364cc9119787165418fe93b74c1842" }, - "alpha-nvim": { "branch": "main", "commit": "bf3c8bb8c02ed3d9644cc5bbc48e2bdc39349cd7" }, - "auto-dark-mode.nvim": { "branch": "master", "commit": "d365beccca05ffcb01e50109f2adca2459c3995a" }, - "bufferline.nvim": { "branch": "main", "commit": "5cc447cb2b463cb499c82eaeabbed4f5fa6a0a44" }, + "LuaSnip": { "branch": "master", "commit": "c9b9a22904c97d0eb69ccb9bab76037838326817" }, + "alpha-nvim": { "branch": "main", "commit": "de72250e054e5e691b9736ee30db72c65d560771" }, + "auto-dark-mode.nvim": { "branch": "master", "commit": "c31de126963ffe9403901b4b0990dde0e6999cc6" }, + "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, "cder.nvim": { "branch": "main", "commit": "0a071389bb52544ac9cf9557378aa1212dff6982" }, "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, "cmp-cmdline": { "branch": "main", "commit": "d250c63aa13ead745e3a40f61fdd3470efde3923" }, - "cmp-git": { "branch": "main", "commit": "741b6a759dbbcc55e9e5d72e2a84099cf6f4af9c" }, - "cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" }, + "cmp-git": { "branch": "main", "commit": "d9efd00e0b9527ee05031ce7e7e55d6b118f543e" }, + "cmp-nvim-lsp": { "branch": "main", "commit": "99290b3ec1322070bcfb9e846450a46f6efa50f0" }, "cmp-nvim-lua": { "branch": "main", "commit": "f12408bdb54c39c23e67cab726264c10db33ada8" }, "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, "cmp-spell": { "branch": "master", "commit": "694a4e50809d6d645c1ea29015dad0c293f019d6" }, - "cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" }, + "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, "confirm-quit.nvim": { "branch": "main", "commit": "f15f6d728d385a3d2efa22098e9a45b8a2b20144" }, - "copilot-cmp": { "branch": "master", "commit": "b6e5286b3d74b04256d0a7e3bd2908eabec34b44" }, - "copilot.lua": { "branch": "master", "commit": "f8d8d872bb319f640d5177dad5fbf01f7a16d7d0" }, + "copilot-cmp": { "branch": "master", "commit": "15fc12af3d0109fa76b60b5cffa1373697e261d1" }, + "copilot.lua": { "branch": "master", "commit": "535ebb53880ae67e33d9e50b503d25f9ef3ca06c" }, "diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" }, - "dropbar.nvim": { "branch": "master", "commit": "998441a88476af2ec77d8cb1b21bae62c9f548c1" }, - "firenvim": { "branch": "master", "commit": "64f9389b88c8b0c7667d45c171a5f25c42d852fb" }, - "friendly-snippets": { "branch": "main", "commit": "de8fce94985873666bd9712ea3e49ee17aadb1ed" }, + "dropbar.nvim": { "branch": "master", "commit": "873ba43f83398fd0e28880cf98fd89e6ce667c51" }, + "firenvim": { "branch": "master", "commit": "c4ab7d2aeb145cd93db8660cb134f771722f2b5e" }, + "friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" }, "fugitive-gitea": { "branch": "master", "commit": "d93176028d13820f941c165c14039a6019744a5a" }, - "gitsigns.nvim": { "branch": "main", "commit": "ee7634ab4f0a6606438fe13e16cbf2065589a5ed" }, - "indent-blankline.nvim": { "branch": "master", "commit": "e7a4442e055ec953311e77791546238d1eaae507" }, - "kanagawa.nvim": { "branch": "master", "commit": "f491b0fe68fffbece7030181073dfe51f45cda81" }, - "lazy.nvim": { "branch": "main", "commit": "cf8ecc2c5e4332760431a33534240b0cbc6680ab" }, - "lazydev.nvim": { "branch": "main", "commit": "491452cf1ca6f029e90ad0d0368848fac717c6d2" }, - "lualine.nvim": { "branch": "master", "commit": "b431d228b7bbcdaea818bdc3e25b8cdbe861f056" }, + "gitsigns.nvim": { "branch": "main", "commit": "7010000889bfb6c26065e0b0f7f1e6aa9163edd9" }, + "indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" }, + "kanagawa.nvim": { "branch": "master", "commit": "709018d5af92d2e5780bfb8a6d36e9cad01a6402" }, + "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, + "lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" }, + "lualine.nvim": { "branch": "master", "commit": "1517caa8fff05e4b4999857319d3b0609a7f57fa" }, "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" }, - "mason-extra-cmds": { "branch": "main", "commit": "606ecf0cebed0f91926558158e61725d2678d90c" }, + "mason-extra-cmds": { "branch": "main", "commit": "cc7163cb5089236042b5e351cb1a078d0905e40d" }, "mason-lock.nvim": { "branch": "main", "commit": "86614f76c3442fba1c5c8d79aa1efcb3ad69de1c" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "7446f47b3dfb7df801f31a6f6783c2ad119a6935" }, - "mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" }, - "mini.nvim": { "branch": "main", "commit": "77533e69cc4fadb7f4c25f23255ae0890a058818" }, - "neoformat": { "branch": "master", "commit": "d9d3311097eacdba9bd7a425b267d304b509e7ea" }, - "noice.nvim": { "branch": "main", "commit": "df448c649ef6bc5a6a633a44f2ad0ed8d4442499" }, - "nui.nvim": { "branch": "main", "commit": "b58e2bfda5cea347c9d58b7f11cf3012c7b3953f" }, - "nvim-asciidoc-preview": { "branch": "main", "commit": "7b8dacdcea38dad0b53b8c3ae01e7045ed6a04db" }, - "nvim-autopairs": { "branch": "master", "commit": "ee297f215e95a60b01fde33275cc3c820eddeebe" }, - "nvim-cmp": { "branch": "main", "commit": "29fb4854573355792df9e156cb779f0d31308796" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" }, + "mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" }, + "mini.nvim": { "branch": "main", "commit": "189010888bc37fc1c382f2dcc81b7a6441160686" }, + "neoformat": { "branch": "master", "commit": "874dcd0995db340278c41860e0209bef29d6ef87" }, + "noice.nvim": { "branch": "main", "commit": "0427460c2d7f673ad60eb02b35f5e9926cf67c59" }, + "nui.nvim": { "branch": "main", "commit": "8d3bce9764e627b62b07424e0df77f680d47ffdb" }, + "nvim-asciidoc-preview": { "branch": "main", "commit": "b12e113b5f7e7522b4e412213d5498cc529f2628" }, + "nvim-autopairs": { "branch": "master", "commit": "6522027785b305269fa17088395dfc0f456cedd2" }, + "nvim-cmp": { "branch": "main", "commit": "1e1900b0769324a9675ef85b38f99cca29e203b3" }, "nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" }, - "nvim-dap": { "branch": "master", "commit": "7ff6936010b7222fea2caea0f67ed77f1b7c60dd" }, - "nvim-dap-ui": { "branch": "master", "commit": "ffa89839f97bad360e78428d5c740fdad9a0ff02" }, - "nvim-jdtls": { "branch": "master", "commit": "efe813854432a314b472226dca813f0f2598d44a" }, + "nvim-dap": { "branch": "master", "commit": "6a5bba0ddea5d419a783e170c20988046376090d" }, + "nvim-dap-ui": { "branch": "master", "commit": "bc81f8d3440aede116f821114547a476b082b319" }, + "nvim-jdtls": { "branch": "master", "commit": "2f7bff9b8d2ee1918b36ca55f19547d9d335a268" }, "nvim-lsp-file-operations": { "branch": "master", "commit": "9744b738183a5adca0f916527922078a965515ed" }, - "nvim-lspconfig": { "branch": "master", "commit": "85afd4b936acd62b578c2e2d8e86541fb972c32e" }, - "nvim-nio": { "branch": "master", "commit": "a428f309119086dc78dd4b19306d2d67be884eee" }, - "nvim-notify": { "branch": "master", "commit": "fbef5d32be8466dd76544a257d3f3dce20082a07" }, - "nvim-tree.lua": { "branch": "master", "commit": "8760d76c1d316aa46f141f3f2b80b853a2acc41e" }, - "nvim-treesitter": { "branch": "master", "commit": "377039daa260b71f304c881d1b21d643c501a261" }, - "nvim-treesitter-textobjects": { "branch": "master", "commit": "0d79d169fcd45a8da464727ac893044728f121d4" }, - "nvim-ts-autotag": { "branch": "main", "commit": "e239a560f338be31337e7abc3ee42515daf23f5e" }, - "nvim-ufo": { "branch": "main", "commit": "c96bb3bb853ff6253fe74f057df03e61fafd2403" }, - "nvim-web-devicons": { "branch": "master", "commit": "19d257cf889f79f4022163c3fbb5e08639077bd8" }, + "nvim-lspconfig": { "branch": "master", "commit": "85e0dd26b710e834a105d679200d01e326a3d2b0" }, + "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, + "nvim-notify": { "branch": "master", "commit": "22f29093eae7785773ee9d543f8750348b1a195c" }, + "nvim-tree.lua": { "branch": "master", "commit": "44d9b58f11d5a426c297aafd0be1c9d45617a849" }, + "nvim-treesitter": { "branch": "master", "commit": "da5825bf70cc2ea7eacd1e60c32c07baf19adeba" }, + "nvim-treesitter-textobjects": { "branch": "master", "commit": "9937e5e356e5b227ec56d83d0a9d0a0f6bc9cad4" }, + "nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" }, + "nvim-ufo": { "branch": "main", "commit": "a52c92c3bbaa10f0c9b547a50adaa8c7d8b29f94" }, + "nvim-web-devicons": { "branch": "master", "commit": "4c3a5848ee0b09ecdea73adcd2a689190aeb728c" }, "password-store": { "branch": "master", "commit": "b5e965a838bb68c1227caa2cdd874ba496f10149" }, - "plenary.nvim": { "branch": "master", "commit": "2d9b06177a975543726ce5c73fca176cedbffe9d" }, + "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, "promise-async": { "branch": "main", "commit": "119e8961014c9bfaf1487bf3c2a393d254f337e2" }, - "statuscol.nvim": { "branch": "main", "commit": "5998d16044159ad3779f62c45e756c555e3051f0" }, - "suda.vim": { "branch": "master", "commit": "b97fab52f9cdeabe2bbb5eb98d82356899f30829" }, - "telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" }, - "telescope-project.nvim": { "branch": "master", "commit": "796200876bb0fe8157b8eb1ce03d927d3827a052" }, + "schemastore.nvim": { "branch": "main", "commit": "d307d291f38678d064cb987112926df6d9134de3" }, + "statuscol.nvim": { "branch": "main", "commit": "c399884e8f64019ec9bb581251f9710915b7f996" }, + "suda.vim": { "branch": "master", "commit": "9adda7d195222d4e2854efb2a88005a120296c47" }, + "telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" }, + "telescope-project.nvim": { "branch": "master", "commit": "ce2c9fe209a68c7a924acde42d94ed8a2b2a52c5" }, "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" }, - "telescope.nvim": { "branch": "master", "commit": "df534c3042572fb958586facd02841e10186707c" }, + "telescope.nvim": { "branch": "master", "commit": "a4ed82509cecc56df1c7138920a1aeaf246c0ac5" }, "vim-asciidoctor": { "branch": "master", "commit": "f553311b5db03440eb8d7035434d0405e4a2c559" }, "vim-caddyfile": { "branch": "master", "commit": "24fe0720551883e407cb70ae1d7c03f162d1d5a0" }, - "vim-fugitive": { "branch": "master", "commit": "d4877e54cef67f5af4f950935b1ade19ed6b7370" }, + "vim-fugitive": { "branch": "master", "commit": "4a745ea72fa93bb15dd077109afbb3d1809383f2" }, "vim-gnupg": { "branch": "main", "commit": "f9b608f29003dfde6450931dc0f495a912973a88" }, - "which-key.nvim": { "branch": "main", "commit": "8badb359f7ab8711e2575ef75dfe6fbbd87e4821" } + "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } } diff --git a/home/.config/nvim/lua/plugins/mason.lua b/home/.config/nvim/lua/plugins/mason.lua index c1231f88..7c727ce0 100644 --- a/home/.config/nvim/lua/plugins/mason.lua +++ b/home/.config/nvim/lua/plugins/mason.lua @@ -19,12 +19,15 @@ return { "mfussenegger/nvim-jdtls", -- Add support for LSP file operations { "antosha417/nvim-lsp-file-operations", opts = {} }, + -- Automatically fetch schemas from JSON schema store + "b0o/schemastore.nvim", }, config = function() require("mason").setup() local mlspc = require("mason-lspconfig") local lsp_utils = require("lsp_utils") + local lspconfig = require("lspconfig") local commonLspConfigArgs = { on_attach = lsp_utils.map_keys, @@ -35,13 +38,13 @@ return { mlspc.setup_handlers({ -- Default handler function(server_name) - require("lspconfig")[server_name].setup(commonLspConfigArgs) + lspconfig[server_name].setup(commonLspConfigArgs) end, -- Disable tsserver diagnostics diagnostics -- that come from ESLint ["ts_ls"] = function() - require("lspconfig").ts_ls.setup(vim.tbl_extend("force", commonLspConfigArgs, { + lspconfig.ts_ls.setup(vim.tbl_extend("force", commonLspConfigArgs, { settings = { diagnostics = { ignoredCodes = { @@ -55,6 +58,17 @@ return { -- Don't set up jdtls, it is set up by nvim-jdtls ["jdtls"] = function() end, + + ["jsonls"] = function() + lspconfig.jsonls.setup(vim.tbl_extend("force", commonLspConfigArgs, { + settings = { + json = { + schemas = require("schemastore").json.schemas(), + validate = { enable = true }, + }, + }, + })) + end, }) end, } diff --git a/home/.config/nvim/mason-lock.json b/home/.config/nvim/mason-lock.json index 8626bee9..25d803af 100644 --- a/home/.config/nvim/mason-lock.json +++ b/home/.config/nvim/mason-lock.json @@ -1,23 +1,15 @@ { - "bash-language-server": "5.4.2", + "bash-language-server": "5.4.3", + "bibtex-tidy": "1.14.0", "css-lsp": "4.10.0", - "docker-compose-language-service": "0.2.0", + "docker-compose-language-service": "0.3.0", "dockerfile-language-server": "0.13.0", "eslint-lsp": "4.10.0", - "google-java-format": "v1.24.0", "html-lsp": "4.10.0", - "java-debug-adapter": "0.58.0", - "jdtls": "v1.40.0", "json-lsp": "4.10.0", - "lemminx": "0.27.1", - "lua-language-server": "3.11.1", - "nil": "2024-08-06", - "nixpkgs-fmt": "1.3.0", - "prettier": "3.3.3", - "prettierd": "0.25.3", - "stylua": "v0.20.0", - "taplo": "0.9.3", - "tree-sitter-cli": "v0.24.3", - "typescript-language-server": "4.3.3", - "yaml-language-server": "1.15.0" -} + "lemminx": "0.28.0", + "lua-language-server": "3.13.9", + "texlab": "v5.22.1", + "typescript-language-server": "4.3.4", + "yaml-language-server": "1.17.0" +} \ No newline at end of file diff --git a/home/.config/paru/paru.conf b/home/.config/paru/paru.conf index 98eeaf95..063d7694 100644 --- a/home/.config/paru/paru.conf +++ b/home/.config/paru/paru.conf @@ -1,5 +1,6 @@ [options] NewsOnUpgrade +PgpFetch [bin] Sudo = doas diff --git a/root/etc/kernel/cmdline b/root/etc/kernel/cmdline index 8521db9c..b38c85c5 100644 --- a/root/etc/kernel/cmdline +++ b/root/etc/kernel/cmdline @@ -1,7 +1,9 @@ {%@@ if profile == "Mirkwood" @@%} -cryptdevice=UUID=19fa8fab-c5fe-454a-9a17-b7185ce975ea:cryptroot:allow-discards root=/dev/mapper/cryptroot rootflags=subvol=root resume=/dev/mapper/cryptroot resume_offset=10530935 rw quiet splash vt.global_cursor_default=0 fbcon=nodefer log_level=3 udev.log_level=3 +cryptdevice=UUID=ddc8cabe-f726-4287-8407-3a0323ec6037:cryptroot:allow-discards root=/dev/mapper/cryptroot rootflags=subvol=root resume=/dev/mapper/cryptroot resume_offset=18529853 rw quiet splash vt.global_cursor_default=0 fbcon=nodefer log_level=3 udev.log_level=3 {%@@ elif profile == "Moria" @@%} -cryptdevice=UUID=51115cf2-6a44-4f8c-8aa2-ff9d834953d8:cryptroot root=/dev/mapper/cryptroot rootflags=subvol=root ip=:::::eth0:dhcp netconf_timeout=60 rw quiet splash vt.global_cursor_default=0 fbcon=nodefer log_level=3 udev.log_level=3 +cryptdevice=UUID=51115cf2-6a44-4f8c-8aa2-ff9d834953d8:cryptroot:allow-discards root=/dev/mapper/cryptroot rootflags=subvol=root ip=:::::eth0:dhcp netconf_timeout=60 rw quiet splash vt.global_cursor_default=0 fbcon=nodefer log_level=3 udev.log_level=3 {%@@ elif profile == "Shire" @@%} -cryptdevice=UUID=370d6c2a-86ab-4e7d-9442-d15ad173f3e3:cryptroot root=/dev/mapper/cryptroot resume_offset=1908736 intel_idle.max_cstate=1 rw quiet splash vt.global_cursor_default=0 fbcon=nodefer log_level=3 udev.log_level=3 +cryptdevice=UUID=8898d32c-d150-4258-ad0f-96b5afca4718:cryptroot root=/dev/mapper/cryptroot rootflags=subvol=root resume_offset=2106624 intel_idle.max_cstate=1 rw quiet splash vt.global_cursor_default=0 fbcon=nodefer log_level=3 udev.log_level=3 +{%@@ elif profile == "VentoyArch" @@%} +cryptdevice=UUID=d43414f3-37e9-4f35-9d3c-2f85c36c0034:cryptroot:allow-discards root=/dev/mapper/cryptroot rootflags=subvol=root rw quiet splash vt.global_cursor_default=0 fbcon=nodefer log_level=3 udev.log_level=3 {%@@ endif @@%} diff --git a/root/etc/mkinitcpio.conf b/root/etc/mkinitcpio.conf index cce0fe98..9fec8d14 100644 --- a/root/etc/mkinitcpio.conf +++ b/root/etc/mkinitcpio.conf @@ -12,9 +12,11 @@ BINARIES=() FILES=() {%@@ if profile == "Mirkwood" @@%} -HOOKS=(base udev kms plymouth keyboard autodetect microcode modconf block filesystems btrfs encrypt fsck) +HOOKS=(base udev kms plymouth keyboard autodetect microcode modconf block filesystems btrfs encrypt resume fsck) {%@@ elif profile == 'Moria' @@%} HOOKS=(base udev kms keyboard autodetect microcode modconf block netconf dropbear encryptssh filesystems btrfs fsck) {%@@ elif profile == 'Shire' @@%} -HOOKS=(base udev kms keyboard keymap autodetect microcode modconf block unl0kr encrypt plymouth filesystems fsck) +HOOKS=(base udev kms keyboard keymap autodetect microcode modconf block bluetooth unl0kr encrypt plymouth filesystems resume fsck) +{%@@ elif profile == "VentoyArch" @@%} +HOOKS=(base udev kms plymouth keyboard autodetect microcode modconf block ventoy filesystems btrfs encrypt resume fsck) {%@@ endif @@%} diff --git a/root/etc/pacman.conf b/root/etc/pacman.conf index 249cd2a9..437f09b9 100755 --- a/root/etc/pacman.conf +++ b/root/etc/pacman.conf @@ -30,6 +30,5 @@ Include = /etc/pacman.d/mirrorlist Server = file:///var/www/index.korhonen.cc/repo/arch_linux/$repo/$arch {%@@ else @@%} Include = /etc/pacman.d/pacserve -Server = https://index.korhonen.cc/repo/arch_linux/$repo/$arch +Server = http://index.korhonen.lan/repo/arch_linux/$repo/$arch {%@@ endif @@%} - diff --git a/root/etc/systemd/system/getty@tty6.service.d/override.conf b/root/etc/systemd/system/getty@tty6.service.d/override.conf deleted file mode 100644 index b3c5c28f..00000000 --- a/root/etc/systemd/system/getty@tty6.service.d/override.conf +++ /dev/null @@ -1,3 +0,0 @@ -[Service] -ExecStart= -ExecStart=-/usr/bin/agetty --skip-login --nonewline --noissue --autologin {{@@ env['USRNAME'] @@}} --noclear %I $TERM diff --git a/root/etc/systemd/system/qbittorrent.service b/root/etc/systemd/system/qbittorrent.service deleted file mode 100644 index ed7a42c0..00000000 --- a/root/etc/systemd/system/qbittorrent.service +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=qBittorrent Daemon Service -After=network.target - -[Service] -User=qbtuser -ExecStart=/usr/bin/qbittorrent-nox --webui-port=8080 - -[Install] -WantedBy=multi-user.target diff --git a/root/etc/systemd/timesyncd.conf b/root/etc/systemd/timesyncd.conf index 3b117f76..243bc7a3 100644 --- a/root/etc/systemd/timesyncd.conf +++ b/root/etc/systemd/timesyncd.conf @@ -1,3 +1,3 @@ [Time] -NTP=ntp.korhonen.cc -FallbackNTP=0.fi.pool.ntp.org +NTP=esgaroth.korhonen.lan +FallbackNTP=0.pool.ntp.org diff --git a/scripts/autorotate.sh b/scripts/autorotate.sh deleted file mode 100755 index c4f6f674..00000000 --- a/scripts/autorotate.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -function rotate_ms { - case $1 in - "normal") - swaymsg output eDP-1 transform 0 - ;; - "right-up") - swaymsg output eDP-1 transform 90 - ;; - "bottom-up") - swaymsg output eDP-1 transform 180 - ;; - "left-up") - swaymsg output eDP-1 transform 270 - ;; - esac -} - -while IFS='$\n' read -r line; do - rotation="$(echo $line | sed -En "s/^.*orientation changed: (.*)/\1/p")" - [[ ! -z $rotation ]] && rotate_ms $rotation -done < <(stdbuf -oL monitor-sensor) diff --git a/scripts/checkupdates.sh b/scripts/checkupdates.sh deleted file mode 100755 index 27bd1464..00000000 --- a/scripts/checkupdates.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -checkupdates -d - -CODE=$? - -if [ $CODE -eq 2 ]; then - echo "No updates available" - exit 0 -fi - -exit $CODE diff --git a/scripts/fhackeditor b/scripts/fhackeditor new file mode 100755 index 00000000..7a1d4934 --- /dev/null +++ b/scripts/fhackeditor @@ -0,0 +1,9 @@ +#!/bin/sh +# Script to launch a graphical editor if in graphical mode, +# terminal editor otherwise + +if [ -n "$DISPLAY" ] || [ -n "$WAYLAND_DISPLAY" ]; then + echo "Running in graphical mode" +else + echo "Running in TTY mode" +fi diff --git a/scripts/mail/notify-new-mail.sh b/scripts/mail/notify-new-mail.sh deleted file mode 100755 index a4d2f302..00000000 --- a/scripts/mail/notify-new-mail.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -NEWMAILDIR=~/.mail/$1/INBOX/new -COUNT=$(ls $NEWMAILDIR | wc -l) -ICON=/usr/share/icons/Papirus-Dark/64x64/apps/email.svg -SOUND=/usr/share/sounds/Oxygen-Im-Message-In.ogg - -if [ $COUNT -ne 0 ]; then - mpv $SOUND & -fi - -if [ $COUNT -gt 1 ]; then - fromaddress=$(cat $NEWMAILDIR/$(ls $NEWMAILDIR | sort -R | tail -1) | formail -x From | tail -1) - notify-send.sh -i $ICON "$COUNT new messages in $1" "From $fromaddress and others" - -elif [ $COUNT -eq 1 ]; then - mailsubject=$(cat $NEWMAILDIR/* | formail -x Subject) - fromaddress=$(cat $NEWMAILDIR/* | formail -x From | tail -1) - - notify-send.sh -i $ICON "New message in $1" "$fromaddress $mailsubject" -else - echo "No new mail" -fi diff --git a/scripts/media/imageviewer b/scripts/media/imageviewer deleted file mode 100755 index bd14f550..00000000 --- a/scripts/media/imageviewer +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -if [ $# -eq 1 ]; then - DIR=/tmp/images - IMGNAME=$(basename $1) - - if [ ! -d $DIR ]; then - mkdir $DIR - fi - - if [ ! -f $DIR/$IMGNAME ]; then - wget $1 -O $DIR/$IMGNAME - fi - - mimeo $DIR/$IMGNAME - -else - DIR=/tmp/images/$(basename $1) - - if [ ! -d $]; then - mkdir -p $DIR - fi - - if [ ! -f $DIR/$IMGNAME ]; then - wget -P $DIR $@ - fi - - mimeo $DIR/* -fi diff --git a/scripts/media/imgurviewer b/scripts/media/imgurviewer deleted file mode 100755 index a5a02053..00000000 --- a/scripts/media/imgurviewer +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -ALBUMNAME=$(basename $1) -ALBUMDIR=/tmp/imgur/$ALBUMNAME - -if [ ! -d $ALBUMDIR ]; then - mkdir -p $ALBUMDIR - imgur-album-downloader $1 $ALBUMDIR -fi - -mimeo $ALBUMDIR diff --git a/scripts/media/mpvqueue b/scripts/media/mpvqueue deleted file mode 100755 index 5a84bc64..00000000 --- a/scripts/media/mpvqueue +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -notify="notify-send -i mpv -a mpv" -url="$1" - -# NOTE: You need to configure mpv to -# enable ipc server on this path (see my mpv config for an example) -MPVSOCKET="/tmp/mpvsocket" - -# See if MPV is already running -if [ -z "$(pidof mpv)" ]; then - # mpv is not running - - # pause other players - playerctl pause - - # start mpv - /usr/bin/mpv --no-terminal "$url" & disown - - # Wait for mpv to be up before adding anything else to playlist - while [ -z "$(pidof mpv)" ]; do - sleep 1 - done - $notify "Playing $url" - -else - # mpv is running, so add stuff to playlist - $notify "Adding $url" - echo "{\"command\": [\"loadfile\", \"$url\", \"append\"]}" | socat - /tmp/mpvsocket -fi