From 0267199f6e883211a7b35f2bccb6555d5fbd9a7a Mon Sep 17 00:00:00 2001 From: Oliver Ladner Date: Sun, 5 Oct 2025 14:14:45 +0200 Subject: [PATCH] feat: add all configs --- .gitignore | 3 + README.md | 92 ++++++ etc/default/useradd | 27 ++ etc/iwd/main.conf | 2 + etc/pacman.d/mirrorlist | 33 +++ generate_pkglist.sh | 3 + generate_systemd_enabled.sh | 3 + home/oli/.config/fastfetch/config.jsonc | 63 ++++ home/oli/.config/fontconfig/fonts.conf | 24 ++ home/oli/.config/htop/htoprc | 64 ++++ home/oli/.config/mako/config | 29 ++ home/oli/.config/pipewire/pipewire.conf | 371 ++++++++++++++++++++++++ home/oli/.config/sway/config | 222 ++++++++++++++ home/oli/.config/sway/status.sh | 184 ++++++++++++ home/oli/.config/swayimg/config | 268 +++++++++++++++++ home/oli/.config/swaylock/config | 5 + home/oli/.config/wayvnc/config | 7 + home/oli/bin/alert.sh | 12 + home/oli/bin/vnc.sh | 7 + pkglist.txt | 92 ++++++ root/aufii.sh | 144 +++++++++ systemd_enabled.txt | 10 + systemd_enabled_user.txt | 8 + 23 files changed, 1673 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 etc/default/useradd create mode 100644 etc/iwd/main.conf create mode 100644 etc/pacman.d/mirrorlist create mode 100755 generate_pkglist.sh create mode 100755 generate_systemd_enabled.sh create mode 100644 home/oli/.config/fastfetch/config.jsonc create mode 100644 home/oli/.config/fontconfig/fonts.conf create mode 100644 home/oli/.config/htop/htoprc create mode 100644 home/oli/.config/mako/config create mode 100644 home/oli/.config/pipewire/pipewire.conf create mode 100644 home/oli/.config/sway/config create mode 100755 home/oli/.config/sway/status.sh create mode 100644 home/oli/.config/swayimg/config create mode 100644 home/oli/.config/swaylock/config create mode 100644 home/oli/.config/wayvnc/config create mode 100755 home/oli/bin/alert.sh create mode 100644 home/oli/bin/vnc.sh create mode 100644 pkglist.txt create mode 100755 root/aufii.sh create mode 100644 systemd_enabled.txt create mode 100644 systemd_enabled_user.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..01c912c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +**/.env +**/.env* +**/.local/share/fonts/* diff --git a/README.md b/README.md new file mode 100644 index 0000000..05bbefa --- /dev/null +++ b/README.md @@ -0,0 +1,92 @@ +# Arch Linux + +My custom Arch Linux configuration for the [MINIX NEO Z100-0dB][minix100]. + +## Blog post about this + +Some background on the intention is available in my blog post. + +## Repository contents + +```shell +$ tree -a -I .git -F +./ +├── etc/ +│   ├── default/ +│   │   └── useradd # ZSH as default shell +│   ├── iwd/ +│   │   └── main.conf # Fix IPV4 DHCP +│   └── pacman.d/ +│   └── mirrorlist # Arch mirrors near me +├── generate_pkglist.sh* +├── generate_systemd_enabled.sh* +├── home/ +│   └── oli/ +│   ├── bin/ +│   │   └── vnc.sh # VNC config explained above +│   ├── .config/ +│   │   ├── fastfetch/ +│   │   │   └── config.jsonc # Minimal fastfetch config +│   │   ├── fontconfig/ +│   │   │   └── fonts.conf # Set default fonts for Sway/Wayland +│   │   ├── htop/ +│   │   │   └── htoprc +│   │   ├── mako/ +│   │   │   └── config # Notifications +│   │   ├── pipewire/ +│   │   │   └── pipewire.conf # Audio +│   │   ├── sway/ +│   │   │   ├── config # Sway +│   │   │   └── status.sh* # swaybar output +│   │   ├── swaylock/ +│   │   │   └── config # Lock screen +│   │   └── wayvnc/ +│   │   └── config +│   └── .local/ +│   └── share/ +│   └── fonts/ +│   ├── BerkeleyMono[...]-BoldOblique.ttf # https://usgraphics.com +│   ├── BerkeleyMono[...]-Bold.ttf # https://usgraphics.com +│   ├── BerkeleyMono[...]-Oblique.ttf # https://usgraphics.com +│   └── BerkeleyMono[...]-Regular.ttf # https://usgraphics.com +├── pkglist.txt # List of installed packages +├── README.md +├── root/ +│   └── aufii.sh* # Generates EFI boot stub +├── systemd_enabled.txt # List of enabled services (system-wide) +└── systemd_enabled_user.txt # List of enabled user services +``` + +## Installation + +Follow the [official Installation guide][guide]. + +```shell +pacstrap -K /mnt base linux linux-firmware intel-ucode efibootmgr iwd neovim openssh git curl xfsprogs +``` + +- initramfs generation is needed `mkinitcpio -P` +- Use `root/aufii.sh` to generate/execute the [efibootmgr][efi] command + +## Using it + +### Fonts + +Are managed by fontconfig. + +### VNC + +| Type | Name | Purpose | Details | +| ------- | -------- | -------------- | -------------------------------- | +| Package | `wayvnc` | VNC server | `~/.config/wayvnc/config` | +| File | SSH key | VNC encryption | `~/.config/wayvnc/rsa_key.pem\*` | + +Packages: + +- `wayvnc`. Running `~/bin/vnc.sh` allows to connect to an already + established sway session. On macOS, you can use the RealVNC client. Keys are + switched, Alt on Linux is Cmd on macOS. + +[minix100]: https://www.minix.com.hk/products/minix-z100-0db-fanless-mini-pc +[guide]: https://wiki.archlinux.org/title/Installation_guide +[efi]: https://wiki.archlinux.org/title/EFI_boot_stub diff --git a/etc/default/useradd b/etc/default/useradd new file mode 100644 index 0000000..6e78b50 --- /dev/null +++ b/etc/default/useradd @@ -0,0 +1,27 @@ +# Default values for useradd(8) +# +# The SHELL variable specifies the default login shell on your +# system. +SHELL=/usr/bin/zsh + +# The default group for users +GROUP=users + +# The default home directory. +HOME=/home + +# The number of days after a password expires until the account is permanently +# disabled +INACTIVE=-1 + +# The default expire date +EXPIRE= + +# The SKEL variable specifies the directory containing "skeletal" user files; +# in other words, files such as a sample .profile that will be copied to the +# new user's home directory when it is created. +SKEL=/etc/skel + +# Defines whether the mail spool should be created while +# creating the account +CREATE_MAIL_SPOOL=no diff --git a/etc/iwd/main.conf b/etc/iwd/main.conf new file mode 100644 index 0000000..85eb509 --- /dev/null +++ b/etc/iwd/main.conf @@ -0,0 +1,2 @@ +[General] +EnableNetworkConfiguration=True diff --git a/etc/pacman.d/mirrorlist b/etc/pacman.d/mirrorlist new file mode 100644 index 0000000..48236eb --- /dev/null +++ b/etc/pacman.d/mirrorlist @@ -0,0 +1,33 @@ +################################################################################ +################# Arch Linux mirrorlist generated by Reflector ################# +################################################################################ + +# With: reflector @/etc/xdg/reflector/reflector.conf +# When: 2025-09-13 20:58:10 UTC +# From: https://archlinux.org/mirrors/status/json/ +# Retrieved: 2025-09-13 20:57:25 UTC +# Last Check: 2025-09-13 20:04:54 UTC + +Server = https://mirror.init7.net/archlinux/$repo/os/$arch +Server = https://mirror.puzzle.ch/archlinux/$repo/os/$arch +#Server = https://mirrors.kernel.org/archlinux/$repo/os/$arch +#Server = https://de.arch.niranjan.co/$repo/os/$arch +#Server = https://archlinux.richard-neumann.de/$repo/os/$arch +#Server = https://us.arch.niranjan.co/$repo/os/$arch +#Server = https://mirror.pseudoform.org/$repo/os/$arch +#Server = https://mirror.moson.org/arch/$repo/os/$arch +#Server = https://london.mirror.pkgbuild.com/$repo/os/$arch +#Server = https://al.arch.niranjan.co/$repo/os/$arch +#Server = https://at.arch.niranjan.co/$repo/os/$arch +#Server = https://at.arch.mirror.kescher.at/$repo/os/$arch +#Server = https://berlin.mirror.pkgbuild.com/$repo/os/$arch +#Server = https://mirror.ubrco.de/archlinux/$repo/os/$arch +#Server = https://arch.phinau.de/$repo/os/$arch +#Server = https://mirror.sunred.org/archlinux/$repo/os/$arch +#Server = https://mirror.theash.xyz/arch/$repo/os/$arch +#Server = https://arch.mirror.constant.com/$repo/os/$arch +#Server = https://johannesburg.mirror.pkgbuild.com/$repo/os/$arch +#Server = https://losangeles.mirror.pkgbuild.com/$repo/os/$arch +#Server = https://singapore.mirror.pkgbuild.com/$repo/os/$arch +#Server = https://sydney.mirror.pkgbuild.com/$repo/os/$arch +#Server = https://taipei.mirror.pkgbuild.com/$repo/os/$arch diff --git a/generate_pkglist.sh b/generate_pkglist.sh new file mode 100755 index 0000000..e89888b --- /dev/null +++ b/generate_pkglist.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +sudo pacman -Qqe > pkglist.txt diff --git a/generate_systemd_enabled.sh b/generate_systemd_enabled.sh new file mode 100755 index 0000000..59c773f --- /dev/null +++ b/generate_systemd_enabled.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +sudo systemctl list-unit-files --state=enabled > systemd_enabled.txt +systemctl list-unit-files --user --state=enabled > systemd_enabled_user.txt diff --git a/home/oli/.config/fastfetch/config.jsonc b/home/oli/.config/fastfetch/config.jsonc new file mode 100644 index 0000000..e8f0e04 --- /dev/null +++ b/home/oli/.config/fastfetch/config.jsonc @@ -0,0 +1,63 @@ +{ + "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json", + "logo": { + "source": "arch_small", // fastfetch --list-logos or --print-logos + "width": 5, + "padding": { + "top": 1 + } + }, + "display": { + "separator": " " + }, + "modules": [ + "break", + // "title", + { + "type": "terminal", + "key": "TERM", + // "keyColor": "33" + }, + { + "type": "kernel", + "key": "KRNL", + // "keyColor": "33" + }, + // { + // "type": "host", + // "format": "MINIX {2} {3}", + // "key": "host ", + // // "keyColor": "33" + // }, + { + "type": "wifi", + "format": "{7} ({4}, {13} GHz)", + "key": "WIFI", + // "keyColor": "33" + }, + { + "type": "packages", + "format": "{}", + "key": "PKGS", + // "keyColor": "33" + }, + { + "type": "uptime", + // "format": "{1}d{2}h{3}m", + "format": "{10}", + "key": "UPTM", + // "keyColor": "33" + }, + { + "type": "memory", + "key": "MEMR", + // "keyColor": "33" + }, + { + "type": "swap", + "key": "SWAP", + // "keyColor": "33" // = color3 + }, + "break" + ] +} diff --git a/home/oli/.config/fontconfig/fonts.conf b/home/oli/.config/fontconfig/fonts.conf new file mode 100644 index 0000000..30bef40 --- /dev/null +++ b/home/oli/.config/fontconfig/fonts.conf @@ -0,0 +1,24 @@ + + + + + sans-serif + + SF Pro Text + + + + + serif + + SF Pro Text + + + + + monospace + + BerkeleyMono Nerd Font Mono + + + diff --git a/home/oli/.config/htop/htoprc b/home/oli/.config/htop/htoprc new file mode 100644 index 0000000..7d41608 --- /dev/null +++ b/home/oli/.config/htop/htoprc @@ -0,0 +1,64 @@ +# Beware! This file is rewritten by htop when settings are changed in the interface. +# The parser is also very primitive, and not human-friendly. +htop_version=3.4.1-3.4.1 +config_reader_min_version=3 +fields=0 48 17 18 38 39 40 2 46 47 49 1 +hide_kernel_threads=1 +hide_userland_threads=0 +hide_running_in_container=0 +shadow_other_users=1 +show_thread_names=0 +show_program_path=1 +highlight_base_name=1 +highlight_deleted_exe=1 +shadow_distribution_path_prefix=0 +highlight_megabytes=1 +highlight_threads=1 +highlight_changes=0 +highlight_changes_delay_secs=5 +find_comm_in_cmdline=1 +strip_exe_from_cmdline=1 +show_merged_command=0 +header_margin=1 +screen_tabs=1 +detailed_cpu_time=0 +cpu_count_from_one=0 +show_cpu_usage=1 +show_cpu_frequency=1 +show_cpu_temperature=1 +degree_fahrenheit=0 +show_cached_memory=1 +update_process_names=0 +account_guest_in_cpu_meter=0 +color_scheme=0 +enable_mouse=1 +delay=15 +hide_function_bar=0 +header_layout=two_50_50 +column_meters_0=AllCPUs Memory Swap +column_meter_modes_0=1 1 1 +column_meters_1=Tasks LoadAverage GPU +column_meter_modes_1=2 2 1 +tree_view=1 +sort_key=46 +tree_sort_key=46 +sort_direction=-1 +tree_sort_direction=-1 +tree_view_always_by_pid=0 +all_branches_collapsed=0 +screen:Main=PID USER PRIORITY NICE M_VIRT M_RESIDENT M_SHARE STATE PERCENT_CPU PERCENT_MEM TIME Command +.sort_key=PERCENT_CPU +.tree_sort_key=PERCENT_CPU +.tree_view_always_by_pid=0 +.tree_view=1 +.sort_direction=-1 +.tree_sort_direction=-1 +.all_branches_collapsed=0 +screen:I/O=PID USER IO_PRIORITY IO_RATE IO_READ_RATE IO_WRITE_RATE PERCENT_SWAP_DELAY PERCENT_IO_DELAY Command +.sort_key=IO_READ_RATE +.tree_sort_key=PID +.tree_view_always_by_pid=0 +.tree_view=0 +.sort_direction=-1 +.tree_sort_direction=1 +.all_branches_collapsed=0 diff --git a/home/oli/.config/mako/config b/home/oli/.config/mako/config new file mode 100644 index 0000000..bda08a1 --- /dev/null +++ b/home/oli/.config/mako/config @@ -0,0 +1,29 @@ +sort=-time +layer=top +background-color=#162422 +text-color=#53847d +border-color=#000055 +border-size=4 +border-radius=0 +padding=15 +width=450 +icons=0 +markup=1 +default-timeout=7000 +ignore-timeout=1 +font=BerkeleyMono Nerd Font Mono 12 +format=%s %a\n%b + +[urgency=low] +background-color=#5a5a5a +text-color=#a3a3a3 +border-color=#00000000 + +[urgency=critical] +background-color=#720000 +text-color=#f0f0f0 +border-color=#00000000 + +# highlight notifications from scripts +[app-name=script] +border-color=#000099 diff --git a/home/oli/.config/pipewire/pipewire.conf b/home/oli/.config/pipewire/pipewire.conf new file mode 100644 index 0000000..8945d65 --- /dev/null +++ b/home/oli/.config/pipewire/pipewire.conf @@ -0,0 +1,371 @@ +# Daemon config file for PipeWire version "1.4.8" # +# +# Copy and edit this file in /etc/pipewire for system-wide changes +# or in ~/.config/pipewire for local changes. +# +# It is also possible to place a file with an updated section in +# /etc/pipewire/pipewire.conf.d/ for system-wide changes or in +# ~/.config/pipewire/pipewire.conf.d/ for local changes. +# + +context.properties = { + ## Configure properties in the system. + #library.name.system = support/libspa-support + #context.data-loop.library.name.system = support/libspa-support + #support.dbus = true + #link.max-buffers = 64 + link.max-buffers = 16 # version < 3 clients can't handle more + #mem.warn-mlock = false + #mem.allow-mlock = true + #mem.mlock-all = false + #clock.power-of-two-quantum = true + #log.level = 2 + #cpu.zero.denormals = false + + #loop.rt-prio = -1 # -1 = use module-rt prio, 0 disable rt + #loop.class = data.rt + #thread.affinity = [ 0 1 ] # optional array of CPUs + #context.num-data-loops = 1 # -1 = num-cpus, 0 = no data loops + # + #context.data-loops = [ + # { loop.rt-prio = -1 + # loop.class = [ data.rt audio.rt ] + # #library.name.system = support/libspa-support + # thread.name = data-loop.0 + # #thread.affinity = [ 0 1 ] # optional array of CPUs + # } + #] + + core.daemon = true # listening for socket connections + core.name = pipewire-0 # core name and socket name + + ## Properties for the DSP configuration. + #default.clock.rate = 48000 + #default.clock.allowed-rates = [ 48000 ] + #default.clock.quantum = 1024 + #default.clock.min-quantum = 32 + #default.clock.max-quantum = 2048 + #default.clock.quantum-limit = 8192 + #default.clock.quantum-floor = 4 + #default.video.width = 640 + #default.video.height = 480 + #default.video.rate.num = 25 + #default.video.rate.denom = 1 + # + #settings.check-quantum = false + #settings.check-rate = false +} + +context.properties.rules = [ + { matches = [ { cpu.vm.name = !null } ] + actions = { + update-props = { + # These overrides are only applied when running in a vm. + default.clock.min-quantum = 1024 + } + } + } +] + +context.spa-libs = { + # = + # + # Used to find spa factory names. It maps an spa factory name + # regular expression to a library name that should contain + # that factory. + # + audio.convert.* = audioconvert/libspa-audioconvert + avb.* = avb/libspa-avb + api.alsa.* = alsa/libspa-alsa + api.v4l2.* = v4l2/libspa-v4l2 + api.libcamera.* = libcamera/libspa-libcamera + api.bluez5.* = bluez5/libspa-bluez5 + api.vulkan.* = vulkan/libspa-vulkan + api.jack.* = jack/libspa-jack + support.* = support/libspa-support + video.convert.* = videoconvert/libspa-videoconvert + #filter.graph = filter-graph/libspa-filter-graph + #videotestsrc = videotestsrc/libspa-videotestsrc + #audiotestsrc = audiotestsrc/libspa-audiotestsrc +} + +context.modules = [ + #{ name = + # ( args = { = ... } ) + # ( flags = [ ( ifexists ) ( nofail ) ] ) + # ( condition = [ { = ... } ... ] ) + #} + # + # Loads a module with the given parameters. + # If ifexists is given, the module is ignored when it is not found. + # If nofail is given, module initialization failures are ignored. + # If condition is given, the module is loaded only when the context + # properties all match the match rules. + # + + # Uses realtime scheduling to boost the audio thread priorities. This uses + # RTKit if the user doesn't have permission to use regular realtime + # scheduling. You can also clamp utilisation values to improve scheduling + # on embedded and heterogeneous systems, e.g. Arm big.LITTLE devices. + # use module.rt.args = { ... } to override the arguments. + { name = libpipewire-module-rt + args = { + nice.level = -11 + rt.prio = 88 + #rt.time.soft = -1 + #rt.time.hard = -1 + #uclamp.min = 0 + #uclamp.max = 1024 + } + flags = [ ifexists nofail ] + condition = [ { module.rt = !false } ] + } + + # The native communication protocol. + { name = libpipewire-module-protocol-native + args = { + # List of server Unix sockets, and optionally permissions + #sockets = [ { name = "pipewire-0" }, { name = "pipewire-0-manager" } ] + } + } + + # The profile module. Allows application to access profiler + # and performance data. It provides an interface that is used + # by pw-top and pw-profiler. + # use module.profiler.args = { ... } to override the arguments. + { name = libpipewire-module-profiler + args = { + #profile.interval.ms = 0 + } + condition = [ { module.profiler = !false } ] + } + + # Allows applications to create metadata objects. It creates + # a factory for Metadata objects. + { name = libpipewire-module-metadata + condition = [ { module.metadata = !false } ] + } + + # Creates a factory for making devices that run in the + # context of the PipeWire server. + { name = libpipewire-module-spa-device-factory + condition = [ { module.spa-device-factory = !false } ] + } + + # Creates a factory for making nodes that run in the + # context of the PipeWire server. + { name = libpipewire-module-spa-node-factory + condition = [ { module.spa-node-factory = !false } ] + } + + # Allows creating nodes that run in the context of the + # client. Is used by all clients that want to provide + # data to PipeWire. + { name = libpipewire-module-client-node + condition = [ { module.client-node = !false } ] + } + + # Allows creating devices that run in the context of the + # client. Is used by the session manager. + { name = libpipewire-module-client-device + condition = [ { module.client-device = !false } ] + } + + # The portal module monitors the PID of the portal process + # and tags connections with the same PID as portal + # connections. + { name = libpipewire-module-portal + flags = [ ifexists nofail ] + condition = [ { module.portal = !false } ] + } + + # The access module can perform access checks and block + # new clients. + { name = libpipewire-module-access + args = { + # Socket-specific access permissions + #access.socket = { pipewire-0 = "default", pipewire-0-manager = "unrestricted" } + + # Deprecated legacy mode (not socket-based), + # for now enabled by default if access.socket is not specified + #access.legacy = true + } + condition = [ { module.access = !false } ] + } + + # Makes a factory for wrapping nodes in an adapter with a + # converter and resampler. + { name = libpipewire-module-adapter + condition = [ { module.adapter = !false } ] + } + + # Makes a factory for creating links between ports. + # use module.link-factory.args = { ... } to override the arguments. + { name = libpipewire-module-link-factory + args = { + #allow.link.passive = false + } + condition = [ { module.link-factory = !false } ] + } + + # Provides factories to make session manager objects. + { name = libpipewire-module-session-manager + condition = [ { module.session-manager = !false } ] + } + + # Use libcanberra to play X11 Bell + { name = libpipewire-module-x11-bell + args = { + #sink.name = "@DEFAULT_SINK@" + #sample.name = "bell-window-system" + #x11.display = null + #x11.xauthority = null + } + flags = [ ifexists nofail ] + condition = [ { module.x11.bell = !false } ] + } + # The JACK DBus detection module. When jackdbus is started, this + # will automatically make PipeWire become a JACK client. + # use module.jackdbus-detect.args = { ... } to override the arguments. + { name = libpipewire-module-jackdbus-detect + args = { + #jack.library = libjack.so.0 + #jack.server = null + #jack.client-name = PipeWire + #jack.connect = true + #tunnel.mode = duplex # source|sink|duplex + source.props = { + #audio.channels = 2 + #midi.ports = 1 + #audio.position = [ FL FR ] + # extra sink properties + } + sink.props = { + #audio.channels = 2 + #midi.ports = 1 + #audio.position = [ FL FR ] + # extra sink properties + } + } + flags = [ ifexists nofail ] + condition = [ { module.jackdbus-detect = !false } ] + } +] + +context.objects = [ + #{ factory = + # ( args = { = ... } ) + # ( flags = [ ( nofail ) ] ) + # ( condition = [ { = ... } ... ] ) + #} + # + # Creates an object from a PipeWire factory with the given parameters. + # If nofail is given, errors are ignored (and no object is created). + # If condition is given, the object is created only when the context properties + # all match the match rules. + # + #{ factory = spa-node-factory args = { factory.name = videotestsrc node.name = videotestsrc node.description = videotestsrc node.param.Props = { patternType = 1 } } } + #{ factory = spa-device-factory args = { factory.name = api.jack.device foo=bar } flags = [ nofail ] } + #{ factory = spa-device-factory args = { factory.name = api.alsa.enum.udev } } + #{ factory = spa-node-factory args = { factory.name = api.alsa.seq.bridge node.name = Internal-MIDI-Bridge } } + #{ factory = adapter args = { factory.name = audiotestsrc node.name = my-test node.description = audiotestsrc node.param.Props = { live = false }} } + #{ factory = spa-node-factory args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } } + + # A default dummy driver. This handles nodes marked with the "node.always-process" + # property when no other driver is currently active. JACK clients need this. + { factory = spa-node-factory + args = { + factory.name = support.node.driver + node.name = Dummy-Driver + node.group = pipewire.dummy + node.sync-group = sync.dummy + priority.driver = 200000 + #clock.id = monotonic # realtime | tai | monotonic-raw | boottime + #clock.name = "clock.system.monotonic" + } + condition = [ { factory.dummy-driver = !false } ] + } + { factory = spa-node-factory + args = { + factory.name = support.node.driver + node.name = Freewheel-Driver + priority.driver = 190000 + node.group = pipewire.freewheel + node.sync-group = sync.dummy + node.freewheel = true + #freewheel.wait = 10 + } + condition = [ { factory.freewheel-driver = !false } ] + } + + # This creates a new Source node. It will have input ports + # that you can link, to provide audio for this source. + #{ factory = adapter + # args = { + # factory.name = support.null-audio-sink + # node.name = "my-mic" + # node.description = "Microphone" + # media.class = "Audio/Source/Virtual" + # audio.position = "FL,FR" + # monitor.passthrough = true + # } + #} + + # This creates a single PCM source device for the given + # alsa device path hw:0. You can change source to sink + # to make a sink in the same way. + #{ factory = adapter + # args = { + # factory.name = api.alsa.pcm.source + # node.name = "alsa-source" + # node.description = "PCM Source" + # media.class = "Audio/Source" + # api.alsa.path = "hw:0" + # api.alsa.period-size = 1024 + # api.alsa.headroom = 0 + # api.alsa.disable-mmap = false + # api.alsa.disable-batch = false + # audio.format = "S16LE" + # audio.rate = 48000 + # audio.channels = 2 + # audio.position = "FL,FR" + # } + #} + + # Use the metadata factory to create metadata and some default values. + #{ factory = metadata + # args = { + # metadata.name = my-metadata + # metadata.values = [ + # { key = default.audio.sink value = { name = somesink } } + # { key = default.audio.source value = { name = somesource } } + # ] + # } + #} +] + +context.exec = [ + #{ path = + # ( args = "" | [ ... ] ) + # ( condition = [ { = ... } ... ] ) + #} + # + # Execute the given program with arguments. + # If condition is given, the program is executed only when the context + # properties all match the match rules. + # + # You can optionally start the session manager here, + # but it is better to start it as a systemd service. + # Run the session manager with -h for options. + # + #{ path = "/usr/bin/pipewire-media-session" args = "" + # condition = [ { exec.session-manager = !false } ] } + # + # You can optionally start the pulseaudio-server here as well + # but it is better to start it as a systemd service. + # It can be interesting to start another daemon here that listens + # on another address with the -a option (eg. -a tcp:4713). + # + #{ path = "/usr/bin/pipewire" args = [ "-c" "pipewire-pulse.conf" ] + # condition = [ { exec.pipewire-pulse = !false } ] } +] diff --git a/home/oli/.config/sway/config b/home/oli/.config/sway/config new file mode 100644 index 0000000..7e678a9 --- /dev/null +++ b/home/oli/.config/sway/config @@ -0,0 +1,222 @@ +# Mod1 = Alt +# Mod4 = Windows key +set $mod Mod1 +set $left h +set $down j +set $up k +set $right l +set $term alacritty +set $browser firefox +set $menu wmenu-run -i -p '>' -l 4 -f "BerkeleyMono Nerd Font Mono 12" +set $file thunar + +set $ws1 1 web +set $ws2 2 term +set $ws3 3 file +set $ws4 4 blog +set $ws5 5 media +set $ws7 6 other + +default_border pixel 5 +default_floating_border pixel 5 +gaps inner 8 +# Hide border when only 1 window +hide_edge_borders smart + +set { + $bg #243936 + #$focused #ffde21 + $text #c0c8c6 + $active #66ac9f +} +# border background text indicator childborder +client.focused $bg $bg $text $active $active + +output * bg ~/data/local/wallpaper/abstract.jpg fill +# output HDMI-A-1 resolution 1920x1080 position 1920,0 +# You can get the names of your outputs by running: swaymsg -t get_outputs + +# BSP-style window tiling +exec_always autotiling + +# This will lock your screen after 300 seconds of inactivity, then turn off +# your displays after another 300 seconds, and turn your screens back on when +# resumed. It will also lock your screen before your computer goes to sleep. +exec swayidle -w \ + timeout 300 'swaylock -f -c 000000' \ + timeout 330 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \ + before-sleep 'swaylock -f -c 000000' + +# Clipboard manager +#exec wl-paste -t text --watch clipman store --no-persist +exec wl-paste --watch cliphist store +bindsym $mod+ctrl+v exec cliphist list | wmenu -l 3 | cliphist decode | wl-copy && wl-paste --no-newline | xargs -I {} wtype {} + +# Notifications + +### Input configuration +input type:keyboard { + xkb_layout "us" + xkb_variant intl + repeat_delay 250 + repeat_rate 50 +} + +input type:pointer { + #accel_profile "flat" # disable mouse acceleration (enabled by default; to set it manually, use "adaptive" instead of "flat") + accel_profile "adaptive" # disable mouse acceleration (enabled by default; to set it manually, use "adaptive" instead of "flat") + pointer_accel -0.85 # set mouse sensitivity (between -1 and 1) +} + +# Read `man 5 sway-input` for more information about this section. + +### Key bindings +bindsym $mod+Return exec $term +bindsym $mod+G exec $browser +bindsym $mod+T exec $file + +# Kill focused window +bindsym $mod+Shift+q kill + +# Start your launcher +bindsym $mod+d exec $menu + +# Drag floating windows by holding down $mod and left mouse button. +# Resize them with right mouse button + $mod. +# Despite the name, also works for non-floating windows. +# Change normal to inverse to use left mouse button for resizing and right +# mouse button for dragging. +floating_modifier $mod normal + +# Reload the configuration file +bindsym $mod+Shift+c reload + +# Exit sway (logs you out of your Wayland session) +bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit' + +# Lock screen +bindsym $mod+o exec 'swaylock -f' +# Focus window +bindsym $mod+$left focus left +bindsym $mod+$down focus down +bindsym $mod+$up focus up +bindsym $mod+$right focus right +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right + +# Move focused window +bindsym $mod+Shift+$left move left +bindsym $mod+Shift+$down move down +bindsym $mod+Shift+$up move up +bindsym $mod+Shift+$right move right +bindsym $mod+Shift+Left move left +bindsym $mod+Shift+Down move down +bindsym $mod+Shift+Up move up +bindsym $mod+Shift+Right move right + +# Switch workspace +bindsym $mod+1 workspace $ws1 +bindsym $mod+2 workspace $ws2 +bindsym $mod+3 workspace $ws3 +bindsym $mod+4 workspace $ws4 +bindsym $mod+5 workspace $ws5 +bindsym $mod+6 workspace $ws6 +bindsym $mod+7 workspace $ws7 +# Move focused container to workspace +bindsym $mod+Shift+1 move container to workspace $ws1 +bindsym $mod+Shift+2 move container to workspace $ws2 +bindsym $mod+Shift+3 move container to workspace $ws3 +bindsym $mod+Shift+4 move container to workspace $ws4 +bindsym $mod+Shift+5 move container to workspace $ws5 +bindsym $mod+Shift+6 move container to workspace $ws6 +bindsym $mod+Shift+7 move container to workspace $ws7 +bindsym ctrl+alt+shift+n workspace next +bindsym ctrl+alt+shift+p workspace prev + +# LAYOUT +# You can "split" the current object of your focus with +# $mod+b or $mod+v, for horizontal and vertical splits +# respectively. +bindsym $mod+b splith +bindsym $mod+v splitv + +# Switch the current container between different layout styles +#bindsym $mod+s layout stacking +#bindsym $mod+w layout tabbed +#bindsym $mod+e layout toggle split + +# Make the current focus fullscreen +bindsym $mod+f fullscreen + +# Zen mode +bindsym $mod+z floating toggle; resize set width 1750 height 1000; move position center + +# Toggle the current focus between tiling and floating mode +bindsym $mod+Shift+space floating toggle + +# Swap focus between the tiling area and the floating area +bindsym $mod+space focus mode_toggle + +# Move focus to the parent container +# XXX: what is this for +#bindsym $mod+a focus parent + +# Sway has a "scratchpad", which is a bag of holding for windows. +# You can send windows there and get them back later. +# Move the currently focused window to the scratchpad +bindsym $mod+Shift+minus move scratchpad + +# Show the next scratchpad window or hide the focused scratchpad window. +# If there are multiple scratchpad windows, this command cycles through them. +bindsym $mod+minus scratchpad show + +bindsym ctrl+alt+shift+a resize shrink width 10px +bindsym ctrl+alt+shift+s resize grow height 10px +bindsym ctrl+alt+shift+w resize shrink height 10px +bindsym ctrl+alt+shift+d resize grow width 10px + +# Resizing containers: +mode "RESIZE" { + bindsym $left resize shrink width 80px + bindsym $down resize grow height 20px + bindsym $up resize shrink height 20px + bindsym $right resize grow width 80px + # Return to default mode + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym ctrl+alt+shift+r mode "RESIZE" + +# Volume control with PipeWire +# https://github.com/xkbcommon/libxkbcommon/blob/master/include/xkbcommon/xkbcommon-keysyms.h +# Get the device ID with `wpctl status` or use @DEFAULT_AUDIO_SINK@ +bindsym --locked XF86AudioMute exec wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bindsym --locked XF86AudioLowerVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.01- +bindsym --locked XF86AudioRaiseVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.01+ +# FIXME: https://wiki.archlinux.org/title/MPRIS +# bindsym --locked XF86AudioPause exec wpctl set-mute 48 toggle + +# Screenshot +bindsym Mod4+Shift+4 exec grimshot --notify save area +bindsym Mod4+Shift+Space exec grimshot --notify save window + +# man 5 sway-bar +bar { + position bottom + font BerkeleyMono Nerd Font Mono + status_command ~/.config/sway/status.sh + + colors { + statusline #869795 + background #ffffff00 + inactive_workspace #32323200 #32323200 #6c7e7c + focused_workspace #2d4844 #2d4844 #d5dad9 + urgent_workspace #b4b479 #b4b479 #121c1b + } +} + +for_window [title="galculator"] floating enable + +include /etc/sway/config.d/* diff --git a/home/oli/.config/sway/status.sh b/home/oli/.config/sway/status.sh new file mode 100755 index 0000000..304e6be --- /dev/null +++ b/home/oli/.config/sway/status.sh @@ -0,0 +1,184 @@ +#!/usr/bin/env bash +# +# Status bar for Sway +# Needs a .env.homeassistant with an API token in ~/.config/sway/.env.homeassistant +# XXX is it possible to display a motd, but keep it longer than the rest in here? +# TODO: +# - HA optimize API calls: https://community.home-assistant.io/t/get-limited-number-of-states-entities-when-using-api-states/830323 +# man 7 swaybar-protocol + +homeassistant_url="http://10.7.1.11:8123/api/states" + +common() { + bg_ok="#66ac9f" + bg_ok_trans="#00000000" + text_dark="#36454f" + text_light="#c0c8c6" + warn1="#facc15" + warn2="#cc8d22" + crit="#710f3d" + . ~/.config/sway/.env.homeassistant + echo -n "{" + echo -n "\"separator_block_width\":10," + echo -n "\"separator\":false," + echo -n "\"color\":\"$fg\"," + echo -n "\"background\":\"$bg\"," + echo -n "\"name\":\"$name\"," + echo -n "\"full_text\":\" $stat\"," + echo -n "}," +} + +temp_cpu() { + local name="cpu" + local cpu=$(expr $(cat /sys/class/thermal/thermal_zone2/temp) / 1000) + if [[ $(echo "$cpu >= 55" | bc -l ) == "1" ]] && [[ $(echo "$cpu < 65" | bc -l ) == "1" ]]; then + local bg=$warn1 + local fg=$text_dark + elif [[ $(echo "$cpu >= 65" | bc -l ) == "1" ]] && [[ $(echo "$cpu < 75" | bc -l ) == "1" ]]; then + local bg=$warn2 + local fg=$text_dark + elif [[ $(echo "$cpu >= 75" | bc -l ) == "1" ]]; then + local bg=$crit + local fg=$text_light + else + local bg=$bg_ok_trans + local fg=$text_light + fi + icon="󰍛" + local stat=$icon\ $cpu\ °C" " + common +} + +mem(){ + local name="mem" + local memused=$(free | grep Mem | awk '{printf "%.1f\n", $3/$2 * 100.0}') + local memproc=$(basename "$(ps --no-headers -A --sort -rss -o cmd | head -1 | awk {'print $1'})") + if [[ $(echo "$memused >= 50" | bc -l ) == "1" ]] && [[ $(echo "$memused < 60" | bc -l ) == "1" ]]; then + local bg=$warn1 + local fg=$text_dark + elif [[ $(echo "$memused >= 60" | bc -l ) == "1" ]] && [[ $(echo "$memused < 70" | bc -l ) == "1" ]]; then + local bg=$warn2 + local fg=$text_dark + elif [[ $(echo "$memused >= 70" | bc -l ) == "1" ]]; then + local bg=$crit + local fg=$text_light + else + local bg=$bg_ok_trans + local fg=$text_light + fi + icon="" + local stat=$icon\ $memused\ %\ [$memproc]" " + common +} + +wifi() { + local name="wifi" + # orig = negative number + local wifidbm_orig=$(iwctl station wlan0 show | awk '/[[:space:]]RSSI/{print $2}') + local wifidbm=$((wifidbm_orig * -1)) + if [[ $(echo "$wifidbm >= 50" | bc -l ) == "1" ]] && [[ $(echo "$wifidbm < 60" | bc -l ) == "1" ]]; then + local bg=$warn1 + local fg=$text_dark + elif [[ $(echo "$wifidbm >= 60" | bc -l ) == "1" ]] && [[ $(echo "$wifidbm < 70" | bc -l ) == "1" ]]; then + local bg=$warn2 + local fg=$text_dark + elif [[ $(echo "$wifidbm >= 70" | bc -l ) == "1" ]]; then + local bg=$crit + local fg=$text_light + else + local bg=$bg_ok_trans + local fg=$text_light + fi + icon="" + local stat=$icon\ -$wifidbm\ dBm" " + common +} + +mydate() { + local bg=$bg_ok_trans + local fg=$bg_ok + local name="id_time" + local icon="" + local stat=$icon\ $(date +'%A, %d %B %R %Z') + common +} + +loadavg() { + local bg=$bg_ok_trans + local fg=$text_light + local name="loadavg" + icon="󰍛" + local stat=$icon\ $(awk {'print $1,$2,$3'} /proc/loadavg) + common +} + +temp_indoor() { + local bg=$bg_ok_trans + local fg=$text_light + local name="temp_indoor" + local ha_indoor=$(curl -s -H "Authorization: Bearer $ha_token" -H "Content-Type: application/json" $homeassistant_url/sensor.vindstyrka_oli_temperature | jq -r '.state') + icon="" + local stat=$icon\ $ha_indoor\ °C" " + common +} + +humid_indoor() { + local bg=$bg_ok_trans + local fg=$text_light + local name="temp_indoor" + local ha_indoor=$(curl -s -H "Authorization: Bearer $ha_token" -H "Content-Type: application/json" $homeassistant_url/sensor.vindstyrka_oli_humidity | jq -r '.state') + icon="" + local stat=$icon\ $ha_indoor\ %" " + common +} + +powerdraw() { + local bg=$bg_ok_trans + local fg=$text_light + local name="temp_indoor" + local ha_indoor=$(curl -s -H "Authorization: Bearer $ha_token" -H "Content-Type: application/json" $homeassistant_url/sensor.inspelning_oli_power | jq -r '.state') + icon="" + local stat=$icon\ $ha_indoor\ W" " + common +} + +audio_volume() { + local name="audio" + local volume=$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk {'print $NF*100'}) + if [[ $(echo "$volume >= 50" | bc -l ) == "1" ]] && [[ $(echo "$volume < 60" | bc -l ) == "1" ]]; then + local bg=$warn1 + local fg=$text_dark + elif [[ $(echo "$volume >= 60" | bc -l ) == "1" ]] && [[ $(echo "$volume < 70" | bc -l ) == "1" ]]; then + local bg=$warn2 + local fg=$text_dark + elif [[ $(echo "$volume >= 70" | bc -l ) == "1" ]]; then + local bg=$crit + local fg=$text_light + else + local bg=$bg_ok_trans + local fg=$text_light + fi + icon="" + local stat=$icon\ $volume\ %" " + common +} + +# header +echo '{ "version": 1 , "click_events":false}' +echo '[[],' + +while : +do + echo -n "[" + mydate + loadavg + temp_indoor + humid_indoor + powerdraw + temp_cpu + mem + wifi + audio_volume + echo -n "]," + sleep 5 +done diff --git a/home/oli/.config/swayimg/config b/home/oli/.config/swayimg/config new file mode 100644 index 0000000..b594ef1 --- /dev/null +++ b/home/oli/.config/swayimg/config @@ -0,0 +1,268 @@ +# Any of these options can be overridden using the --config argument +# on the command line, for instance: +# $ swayimg --config="general.mode=gallery" + +################################################################################ +# General configuration +################################################################################ +[general] +# Mode at startup (viewer/slideshow/gallery) +mode = viewer +# Window size (fullscreen/image, or absolute size) +size = 1280,720 +# Sway/Hyprland only: Window position (auto or absolute coordinates, e.g. 10,20) +position = auto +# Sway/Hyprland only: create floating window above the currently focused one +overlay = no +# Use window decoration (yes/no) +decoration = no +# Action performed by SIGUSR1 signal (same format as for key bindings) +sigusr1 = reload +# Action performed by SIGUSR2 signal (same format as for key bindings) +sigusr2 = next_file +# Application ID and window class name +app_id = swayimg + +################################################################################ +# Viewer mode configuration +################################################################################ +[viewer] +# Window background color (auto/extend/mirror/RGBA) +window = #00000000 +# Background for transparent images (grid/RGBA) +transparency = grid +# Default image scale (optimal/width/height/fit/fill/real/keep) +scale = optimal +# Initial image position on the window (center/top/bottom/free/...) +position = center +# Anti-aliasing mode (none/box/bilinear/bicubic/mks13) +antialiasing = mks13 +# Loop image list: jump to first image when end of list is reached (yes/no) +loop = yes +# Number of previously viewed images to store in cache +history = 1 +# Number of preloaded images (read ahead) +preload = 1 + +################################################################################ +# Slideshow mode configuration +################################################################################ +[slideshow] +# Slideshow image display time (seconds) +time = 3 +# Window background color (auto/extend/mirror/RGBA) +window = auto +# Background for transparent images (grid/RGBA) +transparency = #000000ff +# Default image scale (optimal/width/height/fit/fill/real) +scale = fit +# Initial image position on the window (center/top/bottom/free/...) +position = center +# Anti-aliasing mode (none/box/bilinear/bicubic/mks13) +antialiasing = mks13 + +################################################################################ +# Gallery mode configuration +################################################################################ +[gallery] +# Height and width of each thumbnail (pixels) +size = 200 +# Max number of invisible thumbnails stored in memory cache +cache = 500 +# Load not only visible but also adjacent thumbnails +preload = yes +# Enable/disable storing thumbnails in persistent storage (yes/no) +pstore = yes +# Fill the entire tile with thumbnail (yes/no) +fill = yes +# Anti-aliasing mode for thumbnails (none/box/bilinear/bicubic/mks13) +antialiasing = mks13 +# Background color of the window (RGBA) +window = #00000000 +# Background color of non-selected tiles (RGBA) +background = #202020ff +# Background color of the selected tile (RGBA) +select = #404040ff +# Border color of the selected tile (RGBA) +border = #000000ff +# Shadow color of the selected tile (RGBA) +shadow = #000000ff + +################################################################################ +# Image list configuration +################################################################################ +[list] +# Default order (none/alpha/numeric/mtime/size/random) +order = alpha +# Reverse order (yes/no) +reverse = no +# Read directories recursively (yes/no) +recursive = no +# Add files from the same directory as the first file (yes/no) +all = no +# Enable file system monitoring for adding new images to the list (yes/no) +fsmon = yes + +################################################################################ +# Font configuration +################################################################################ +[font] +# Font name +name = monospace +# Font size (pt) +size = 14 +# Font color (RGBA) +color = #ccccccff +# Shadow color (RGBA) +shadow = #000000d0 +# Background color (RGBA) +background = #00000000 + +################################################################################ +# Image meta info scheme (format, size, EXIF, etc.) +################################################################################ +[info] +# Show on startup (yes/no) +show = no +# Timeout to hide info (seconds, 0 to always show) +info_timeout = 0 +# Timeout to hide status message (seconds) +status_timeout = 3 + +# Display scheme for viewer mode (position = content) +[info.viewer] +top_left = +name,+format,+filesize,+imagesize,+exif +top_right = index +bottom_left = scale,frame +bottom_right = status + +# Display scheme for slideshow mode (position = content) +[info.slideshow] +top_left = none +top_right = none +bottom_left = none +bottom_right = dir,status + +# Display scheme for gallery mode (position = content) +[info.gallery] +top_left = none +top_right = index +bottom_left = none +bottom_right = name,status + +################################################################################ +# Viewer mode key binding configuration: key = action [parameters] +################################################################################ +[keys.viewer] +F1 = help +Home = first_file +End = last_file +Prior = prev_file +Next = next_file +Space = next_file +Shift+r = rand_file +Shift+d = prev_dir +d = next_dir +Shift+o = prev_frame +o = next_frame +c = skip_file +s = mode slideshow +n = animation +f = fullscreen +Return = mode gallery +g = mode gallery +Left = prev_file +Right = next_file +Up = step_up 10 +Down = step_down 10 +Equal = zoom +10 +Plus = zoom +10 +Minus = zoom -10 +w = zoom width +Shift+w = zoom height +z = zoom fit +Shift+z = zoom fill +0 = zoom real +BackSpace = zoom optimal +j = prev_file +k = next_file +Alt+s = zoom +bracketleft = rotate_left +bracketright = rotate_right +m = flip_vertical +Shift+m = flip_horizontal +a = antialiasing +r = reload +i = info +Shift+Delete = exec rm -f '%' && echo "File removed: %"; skip_file +Escape = exit +q = exit +# Mouse related +ScrollLeft = step_right 5 +ScrollRight = step_left 5 +ScrollUp = prev_file +ScrollDown = next_file +Ctrl+ScrollUp = zoom +10 +Ctrl+ScrollDown = zoom -10 +Shift+ScrollUp = prev_file +Shift+ScrollDown = next_file +Alt+ScrollUp = prev_frame +Alt+ScrollDown = next_frame +MouseLeft = drag +MouseSide = prev_file +MouseExtra = next_file +MouseRight = info + +################################################################################ +# Slideshow mode key binding configuration: key = action [parameters] +################################################################################ +[keys.slideshow] +F1 = help +Home = first_file +End = last_file +Prior = prev_file +Next = next_file +Shift+r = rand_file +Shift+d = prev_dir +d = next_dir +Space = pause +i = info +f = fullscreen +Return = mode +Escape = exit +q = exit + +################################################################################ +# Gallery mode key binding configuration: key = action [parameters] +################################################################################ +[keys.gallery] +F1 = help +Home = first_file +End = last_file +Left = step_left +Right = step_right +Up = step_up +Down = step_down +Prior = page_up +Next = page_down +c = skip_file +s = mode slideshow +f = fullscreen +Return = mode viewer +a = antialiasing +r = reload +i = info +Equal = thumb +20 +Plus = thumb +20 +Minus = thumb -20 +Shift+Delete = exec rm -f '%' && echo "File removed: %"; skip_file +Escape = exit +q = exit +# Mouse related +ScrollLeft = step_right +ScrollRight = step_left +ScrollUp = step_up +ScrollDown = step_down +Ctrl+ScrollUp = thumb +20 +Ctrl+ScrollDown = thumb -20 +MouseLeft = mode viewer diff --git a/home/oli/.config/swaylock/config b/home/oli/.config/swaylock/config new file mode 100644 index 0000000..ba3e9cd --- /dev/null +++ b/home/oli/.config/swaylock/config @@ -0,0 +1,5 @@ +color=123524 +#show-keyboard-layout +indicator-idle-visible +indicator-radius=75 +indicator-thickness=45 diff --git a/home/oli/.config/wayvnc/config b/home/oli/.config/wayvnc/config new file mode 100644 index 0000000..104c9d4 --- /dev/null +++ b/home/oli/.config/wayvnc/config @@ -0,0 +1,7 @@ +use_relative_paths=true +address=0.0.0.0 +enable_auth=true +username=foo +password=bar +# ssh-keygen -m pem -f ~/.config/wayvnc/rsa_key.pem -t rsa -N "" +rsa_private_key_file=rsa_key.pem diff --git a/home/oli/bin/alert.sh b/home/oli/bin/alert.sh new file mode 100755 index 0000000..6162b78 --- /dev/null +++ b/home/oli/bin/alert.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +# +# Send notifications to mako +# Priorities: low, normal, critical +# FIXME: this totally ignores escaping strings +app=script +prio=$1 +title=$2 +msg=$3 + +notify-send -a $app -u "$prio" "$title" "$msg" + diff --git a/home/oli/bin/vnc.sh b/home/oli/bin/vnc.sh new file mode 100644 index 0000000..e81cd5c --- /dev/null +++ b/home/oli/bin/vnc.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +export WLR_BACKENDS=headless +export WLR_RENDERER=pixman +export WLR_LIBINPUT_NO_DEVICES=1 +nohup sway & +WAYLAND_DISPLAY=wayland-1 wayvnc 0.0.0.0 diff --git a/pkglist.txt b/pkglist.txt new file mode 100644 index 0000000..fdbd03b --- /dev/null +++ b/pkglist.txt @@ -0,0 +1,92 @@ +alacritty +alsa-utils +autotiling +aws-cli-v2 +base +base-devel +bc +bind +cliphist +cmake +cpio +curl +darkman +efibootmgr +fastfetch +ffmpegthumbnailer +firefox +fortune-mod +fzf +galculator +git +glow +graphviz +grim +gvfs +gvfs-smb +htop +imv +intel-ucode +iwd +jq +keepassxc +linux +linux-firmware +mako +man-db +mc +namcap +ncdu +neovim +nodejs +npm +openssh +pipewire-alsa +pipewire-audio +pkgstats +pnpm +powertop +prettyping +pulse-secure +pwgen +ripgrep +ristretto +rpmextract +signal-desktop +slurp +speedtest-cli +stress-ng +sudo +sway +sway-contrib +swaybg +swayidle +swayimg +swaylock +sysstat +thunar +thunar-archive-plugin +thunar-volman +tmux +tree +tree-sitter-cli +ttf-liberation +unzip +uv +vlc +vlc-plugin-ffmpeg +vlc-plugin-x264 +w3m +wavemon +wayvnc +webkit2gtk +wget +which +whois +wmenu +wtype +xdg-desktop-portal +xfsprogs +xorg-xwayland +zsh +zsh-syntax-highlighting diff --git a/root/aufii.sh b/root/aufii.sh new file mode 100755 index 0000000..b189a4c --- /dev/null +++ b/root/aufii.sh @@ -0,0 +1,144 @@ +#!/bin/bash +### Automatically generate UEFI-boot entries +usage() { printf "Usage:\t aufii \naufii is a simple interactive tool to automatically generate UEFI boot entries. It generates efibootmgr commands and exports them to a small executable. You can safely run the script as it does write nothing without further confirmation. \n [-h]\t\n "; 1>&2; exit 1; } + + +# Compose [and execute] efibootmgr commands +while getopts :h OPT; do + case ${OPT} in + h) + usage;; + esac +done +shift $((OPTIND-1)) +read -r -p "Simple interactive tool to create UEFI-boot entries. No changes will be written to disk before confirmation. Start now (y/N)? " CHOICE +if [ "${CHOICE}" != "y" ]; then + printf "Exiting\n" + exit 1 +fi + +echo ... +echo ... +read -r -p "Please specify EFI partition: " str + +# Detect partitions +#EFI=$(blkid | grep EFI | awk -F ':' '{print $1}') + +EFI=${str} +EFIU=$(blkid | grep "${EFI}" | awk -F '"' '{print $2}') + +## Check if drive is /dev/nvmeXXX or /dev/sdXX +if [ "${EFI:5:4}" == "nvme" ]; then + DISK=$(echo "${EFI}" | awk -F 'p' '{print $1}') + PART=$(echo "${EFI}" | awk -F 'p' '{print $2}') +else + DISK=$(echo "${EFI::-1}") + PART=$(echo "${EFI: -1}") +fi + +AROT=$(lsblk| grep -w "/"|awk -F ' ' '{print $1}'|tail -c4) +ROOT=$(blkid | grep "${AROT}"| awk -F '"' '{print $2}') +SWAP=$(blkid | grep swap | awk -F '"' '{print $2}') +P_S=$(blkid | grep "${SWAP}" | awk -F ':' '{print $1}') +P_E=$(blkid | grep "${EFI}" | awk -F ':' '{print $1}') +P_R=$(blkid | grep "${ROOT}"| awk -F ':' '{print $1}') + +echo ... +echo ... +read -r -p "Include microcode (amd/intel/no)? (a/i/n) " CHOICE +case ${CHOICE} in +a) +echo "Including amd-ucode" +UCODE="initrd=\amd-ucode.img" +echo ... +echo ...;; +i) +echo "Including intel-ucode" +UCODE="initrd=\intel-ucode.img" +echo ... +echo ...;; +n) +echo "Not using microcode" +echo ... +echo ...;; +esac + +# Choose kernel +read -r -p "Choose your kernel: linux, linux-hardened, linux-lts, linux-zen (l/h/s/z) " CHOICE +case ${CHOICE} in +l) +echo "kernel is linux" +echo ... +echo ... +KERN="";; +h) +echo "kernel is linux-hardened" +echo ... +echo ... +KERN="-hardened";; +p) +echo "kernel is linux-lts" +echo ... +echo ... +KERN="-lts";; +z) +echo "kernel is linux-zen" +echo ... +echo ... +KERN="-zen";; +esac +shift $((OPTIND-1)) + +# Name +read -r -p "Please label the boot entry (e.g. Arch-Linux): " str +## empty strings as boot entries may crash uefi menus +if [ ! -z "$str" -a "$str" != " " ]; then + NAME=${str} +else + printf "Setting \"Arch-Linux\" label\n\n" + NAME="Arch-Linux" +fi + +shift $((OPTIND-1)) + +# Compose commands +FLBK=$(echo "efibootmgr --disk ${DISK} --part ${PART} --create --label \"${NAME}-Fallback\" --loader /vmlinuz-linux${KERN} --unicode 'root=UUID=${ROOT} resume=UUID=${SWAP} rw ${UCODE} initrd=\initramfs-linux${KERN}-fallback.img'") +LINX=$(echo "efibootmgr --disk ${DISK} --part ${PART} --create --label \"${NAME}\" --loader /vmlinuz-linux${KERN} --unicode 'root=UUID=${ROOT} resume=UUID=${SWAP} rw ${UCODE} initrd=\initramfs-linux${KERN}.img'") + +# Prompt detected partitions and composed commands +printf "Partitions detected:\nEFI:\t${P_E}\t${EFIU}\nRoot:\t${P_R}\t${ROOT}\nSwap:\t${P_S}\t${SWAP}\n" +echo ... +echo ... +echo "Composed commands:" +echo ... +echo "${FLBK}" +echo ... +echo "${LINX}" +echo ... +echo "To add additional kernel parameters just choose the first option in the next step and edit the file before executing it." +echo ... +echo ... +# Write to disk and execute or abort +write_exec (){ +echo "#!/bin/bash" > UEFI_gen${KERN} +echo "${FLBK}" >> UEFI_gen${KERN} +echo "${LINX}" >> UEFI_gen${KERN} +echo "exit 0" >> UEFI_gen${KERN} +echo "# See man efibootmgr" >> UEFI_gen${KERN} +chmod +x UEFI_gen${KERN} +printf "Commands written to file UEFI_gen${KERN}\n" +} + +read -r -p "Create executable, create and execute (sets UEFI boot entries) or abort (c/ce/a)? " CHOICE +case ${CHOICE} in +c) # write to file +write_exec;; +ce) # write to file and execute it +write_exec +./UEFI_gen${KERN} +printf "Changes written, poweroff and restart, don't reboot.\n";; +a) # abort +printf "Aborted, no changes written to disk.\n";; +esac +shift $((OPTIND-1)) +exit 0 diff --git a/systemd_enabled.txt b/systemd_enabled.txt new file mode 100644 index 0000000..c98df18 --- /dev/null +++ b/systemd_enabled.txt @@ -0,0 +1,10 @@ +UNIT FILE STATE PRESET +getty@.service enabled enabled +iwd.service enabled disabled +pulsesecure.service enabled disabled +sshd.service enabled disabled +systemd-resolved.service enabled enabled +systemd-userdbd.socket enabled enabled +remote-fs.target enabled enabled + +7 unit files listed. diff --git a/systemd_enabled_user.txt b/systemd_enabled_user.txt new file mode 100644 index 0000000..acfab96 --- /dev/null +++ b/systemd_enabled_user.txt @@ -0,0 +1,8 @@ +UNIT FILE STATE PRESET +darkman.service enabled enabled +pipewire.service enabled enabled +wireplumber.service enabled enabled +p11-kit-server.socket enabled enabled +pipewire.socket enabled enabled + +5 unit files listed.