diff --git a/SwarselSystems.org b/SwarselSystems.org index e4405de..148fae6 100644 --- a/SwarselSystems.org +++ b/SwarselSystems.org @@ -11846,567 +11846,3 @@ This sets up the =dashboard=, which is really quite useless. But, it looks cool #+end_src - -* Wiki -:PROPERTIES: -:CUSTOM_ID: h:c4c37b94-0760-4bff-9917-f1b0f023f6c3 -:END: - -This houses a few configuration snippets that might be useful if you are new to the nix ecosystem. It will be infrequently updated as I come across things that I deem to be interesting to such a reader. Also, interesting configuration tricks will move here if I happen to obsolete them in my main configuration. - -** Importing a NixOS module that is not in nixpkgs -:PROPERTIES: -:CUSTOM_ID: h:b917d84e-5549-4966-8817-f1d947083ab9 -:END: - -This requires changes in multiple locations. As an example we will use an early version of the mautrix-signal module by Niklas Korz. - -1) Add the module source to =flake.nix=: - - #+begin_src nix - { - inputs = { - [...] - # provides expressions for mautrix-signal - nixpkgs-mautrix-signal ={ - url = github:niklaskorz/nixpkgs/nixos-23.11-mautrix-signal; - }; - [...] - }; - - outputs = inputs@{ - self, - [...] - nixpkgs-mautrix-signal, - [...] - }: let - [...] - pkgsmautrix = import nixpkgs-mautrix-signal { inherit system; - config.allowUnfree = true; - }; - [...] - in { - nixosConfigurations = { - matrix = nixpkgs.lib.nixosSystem { - pkgs = pkgsmautrix; - # this is to import a service module that is not on nixpkgs - # this way avoids infinite recursion errors - specialArgs.unstable = nixpkgs-mautrix-signal; - modules = [ - [...] - ]; - }; - }; - } - } - - #+end_src - -2) Import the module in the configuration (=configuration.nix=) - - #+begin_src nix - - [...] - imports = [ - [...] - (unstable + "/nixos/modules/services/matrix/mautrix-signal.nix") - ]; - - [...] - #+end_src -** Build a firefox addon -:PROPERTIES: -:CUSTOM_ID: h:0ea4318a-ef11-4d9a-bef4-e994c5020989 -:END: - -1) app id can be found in the manifest.json file of the .xpi (.xpi is just a normal archive) -2) url can be found by copy url of the "add extension" button on the addon page -3) the rest of the information is also found in the manifest.json, but might not be needed - - In =configuration.nix=: - -#+begin_src nix - programs.firefox = { - [...] - profiles.default = { - [...] - extensions = with pkgs.nur.repos.rycee.firefox-addons; [ - [...] - (buildFirefoxXpiAddon { - pname = ":emoji:"; - version = "0.1.3"; - addonId = "gonelf@gmail.com"; - url = "https://addons.mozilla.org/firefox/downloads/file/3365324/emojidots-0.1.3.xpi"; - sha256 = "4f7cc25c478fe52eb82f37c9ff4978dcaa3f95020398c5b184e517f6efa2c201"; - meta = with lib; - { - description = "emoji autocomplete anywhere on the internet"; - mozPermissions = [ "https://gist.githubusercontent.com/gonelf/d8ae3ccb7902b501c4a5dd625d4089da/raw/5eeda197ba92f8c8139e846a1225d5640077e06f/emoji_pretty.json" "tabs" "storage"]; - platforms = platforms.all; - }; - }) - [...] -#+end_src -** Define shell utility as package -:PROPERTIES: -:CUSTOM_ID: h:ce7a2467-72e0-4a13-89c0-61e3b3dbb6e7 -:END: - -In =configuration.nix= (or =home.nix=): - -#+begin_src nix - - home.packages = with pkgs; [ # or for NixOS environment.systemPackages = with pkgs; [ - [...] - (pkgs.writeShellApplication { - name = "pass-fuzzel"; - runtimeInputs = [ pkgs.pass pkgs.fuzzel ]; - text = '' - shopt -s nullglob globstar - - typeit=0 - if [[ $# -ge 1 && $1 == "--type" ]]; then - typeit=1 - shift - fi - - export PASSWORD_STORE_DIR=~/.local/share/password-store - prefix=''${PASSWORD_STORE_DIR-~/.local/share/password-store} - password_files=( "$prefix"/**/*.gpg ) - password_files=( "''${password_files[@]#"$prefix"/}" ) - password_files=( "''${password_files[@]%.gpg}" ) - - password=$(printf '%s\n' "''${password_files[@]}" | fuzzel --dmenu "$@") - - [[ -n $password ]] || exit - - if [[ $typeit -eq 0 ]]; then - pass show -c "$password" &>/tmp/pass-fuzzel - else - pass show "$password" | { IFS= read -r pass; printf %s "$pass"; } | wtype - - fi - notify-send -u critical -a pass -t 1000 "Copied/Typed Password" - ''; - }) - - [...] - -#+end_src -** Add program with prebuild binaries to nix store -:PROPERTIES: -:CUSTOM_ID: h:f98faf13-1e3b-4ba4-9e76-cc4b98f1c308 -:END: - -In =configuration.nix=: - -#+begin_src nix - - home.packages = with pkgs; [ # or for NixOS environment.systemPackages = with pkgs; [ - [...] - (stdenv.mkDerivation { - name = "oama"; - - src = pkgs.fetchurl { - name = "oama"; - url = "https://github.com/pdobsan/oama/releases/download/0.13.1/oama-0.13.1-Linux-x86_64-static.tgz"; - sha256 = "sha256-OTdCObVfnMPhgZxVtZqehgUXtKT1iyqozdkPIV+i3Gc="; - }; - - phases = [ - "unpackPhase" - ]; - - unpackPhase = '' - mkdir -p $out/bin - tar xvf $src -C $out/ - mv $out/oama-0.13.1-Linux-x86_64-static/oama $out/bin/ - ''; - - }) - - [...] -#+end_src -** Patch a utilty for nix paths: -:PROPERTIES: -:CUSTOM_ID: h:fceba848-f065-40e0-ad3f-d16e48c24db5 -:END: -See https://drakerossman.com/blog/how-to-patch-a-package-source-on-nixos -** let-block for overriding a package in nixpkgs (here: replacing airsonic with airsonic-advanced) -:PROPERTIES: -:CUSTOM_ID: h:f87f511f-f2be-486d-8297-4361eee6a0d8 -:END: - -This can be useful if a module does not let you use your own package yourself. - -In =flake.nix=: - -#+begin_src nix - - pkgs = import nixpkgs { inherit system; - overlays = [ emacs-overlay.overlay - nur.overlay - nixgl.overlay - (self: super: { - airsonic = super.airsonic.overrideAttrs (_: rec { - version = "11.0.2-kagemomiji"; - name = "airsonic-advanced-${version}"; - src = super.fetchurl { - url = "https://github.com/kagemomiji/airsonic-advanced/releases/download/11.0.2/airsonic.war"; - sha256 = "PgErtEizHraZgoWHs5jYJJ5NsliDd9VulQfS64ackFo="; - }; - }); - }) - ]; - config.allowUnfree = true; - }; - -#+end_src -** Reference configurations -:PROPERTIES: -:CUSTOM_ID: h:236b7d18-d97b-4714-805f-2ca4d8b1c3c2 -:END: - -Configurations that I have retired or are there for the general study. - -*** non-nixos -:PROPERTIES: -:CUSTOM_ID: h:60bd347b-81c5-47b2-82f7-2e6a0c888d3e -:END: -My Surface Pro 3, only used for on-the-go university work. Be careful when pushing large changes to this machine, as it easily runs out of memory on large switches. At the moment the only machine running non-NixOS, so special care must be taken not to break this one during updates. - -***** Channel setup -:PROPERTIES: -:CUSTOM_ID: h:63e6e03a-8c1e-45f4-aec2-7ca351eccd35 -:END: - -This installs nixGL, which is needed to run GL apps installed through home-manager, since this machine is not using NixOS. - -This is not super clean (because it is not fully replicative), but I do not really care. - -1) Install nixGL: - -#+begin_src nix - nix-channel --add https://github.com/guibou/nixGL/archive/main.tar.gz nixgl && nix-channel --update - nix-env -iA nixgl.auto.nixGLDefault # or replace `nixGLDefault` with your desired wrapper -#+end_src - -This is needed in order to use EGL. Prefix programs that use it with `nixGL` - -***** Home manager -:PROPERTIES: -:CUSTOM_ID: h:483a26b5-5a40-4417-9ffb-67cc2cf07161 -:END: - -Special things to note here: We are running xcape to allow =CAPS= to act as =CTRL= and =ESC=. Also we are using =nixGL= in most places. - -#+begin_src nix - - { config, pkgs, lib, fetchFromGitHub, ... }: - - { - programs.home-manager.enable = true; - home.username = "leons"; - home.homeDirectory = "/home/leons"; - - home.stateVersion = "23.05"; # Please read the comment before changing. - - stylix.image = ../../wallpaper/surfacewp.png; - <> - - nixpkgs = { - config = { - allowUnfree = true; - allowUnfreePredicate = _: true; - }; - }; - services.xcape = { - enable = true; - mapExpression = { - Control_L = "Escape"; - }; - }; - #keyboard config - home.keyboard.layout = "us"; - - sops.age.sshKeyPaths = [ "/etc/ssh/sops" ]; - - # waybar config - programs.waybar.settings.mainBar.cpu.format = "{icon0} {icon1} {icon2} {icon3}"; - - programs.waybar.settings.mainBar.temperature.hwmon-path = "/sys/devices/platform/coretemp.0/hwmon/hwmon3/temp3_input"; - programs.waybar.settings.mainBar.modules-right = ["custom/outer-left-arrow-dark" "mpris" "custom/left-arrow-light" - "network" - "custom/left-arrow-dark" - "pulseaudio" - "custom/left-arrow-light" - "battery" - "custom/left-arrow-dark" - "temperature" - "custom/left-arrow-light" - "disk" - "custom/left-arrow-dark" - "memory" - "custom/left-arrow-light" - "cpu" - "custom/left-arrow-dark" - "tray" - "custom/left-arrow-light" - "clock#2" - "custom/left-arrow-dark" - "clock#1" ]; - services.blueman-applet.enable = true; - home.packages = with pkgs; [ - # nixgl.auto.nixGLDefault - evince - # nodejs_20 - - # messaging - # we use gomuks for RAM preservation, but keep schildi around for files and images - ]; - - programs.zsh.initExtra = " - export GPG_TTY=\"$(tty)\" - export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) - gpgconf --launch gpg-agent - "; - - # sway config - wayland.windowManager.sway= { - config = rec { - input = { - "*" = { - xkb_layout = "us"; - xkb_options = "ctrl:nocaps,grp:win_space_toggle"; - xkb_variant = "altgr-intl"; - }; - "type:touchpad" = { - dwt = "enabled"; - tap = "enabled"; - natural_scroll = "enabled"; - middle_emulation = "enabled"; - }; - }; - - output = { - eDP-1 = { - mode = "2160x1440@59.955Hz"; - scale = "1"; - bg = "~/.dotfiles/wallpaper/surfacewp.png fill"; - }; - }; - - keybindings = let - inherit (config.wayland.windowManager.sway.config) modifier; - in { - "${modifier}+F2" = "exec brightnessctl set +5%"; - "${modifier}+F1"= "exec brightnessctl set 5%-"; - "${modifier}+n" = "exec sway output eDP-1 transform normal, splith"; - "${modifier}+Ctrl+p" = "exec nixGL wl-mirror eDP-1"; - "${modifier}+t" = "exec sway output eDP-1 transform 90, splitv"; - "${modifier}+XF86AudioLowerVolume" = "exec grim -g \"$(slurp)\" -t png - | wl-copy -t image/png"; - "${modifier}+XF86AudioRaiseVolume" = "exec grim -g \"$(slurp)\" -t png - | wl-copy -t image/png"; - }; - - startup = [ - { command = "sleep 60 && nixGL nextcloud --background";} - # { command = "sleep 60 && nixGL spotify";} - { command = "sleep 60 && nixGL vesktop --start-minimized -enable-features=UseOzonePlatform -ozone-platform=wayland";} - # { command = "sleep 60 && nixGL schildichat-desktop --hidden";} - { command = "sleep 60 && nixGL syncthingtray --wait"; } - { command = "sleep 60 && ANKI_WAYLAND=1 nixGL anki";} - { command = "nm-applet --indicator";} - { command = "sleep 60 && OBSIDIAN_USE_WAYLAND=1 nixGL obsidian -enable-features=UseOzonePlatform -ozone-platform=wayland";} - ]; - - keycodebindings = { - "124" = "exec systemctl suspend"; - }; - }; - - extraConfig = " - exec swaymsg input 7062:6917:NTRG0001:01_1B96:1B05 map_to_output eDP-1 - exec swaymsg input 7062:6917:NTRG0001:01_1B96:1B05_Stylus map_to_output eDP-1 - "; - }; - } - -#+end_src -*** nixos -:PROPERTIES: -:CUSTOM_ID: h:3f747cb3-bf83-4cb6-8fe4-6a4865472eeb -:END: -***** Onett (Lenovo Y510P) -:PROPERTIES: -:CUSTOM_ID: h:80753b6b-667e-4b04-a260-a3b5c73fb624 -:END: - -My laptop, sadly soon to be replaced by a new one, since most basic functions are stopping to work lately. - -****** NixOS -:PROPERTIES: -:CUSTOM_ID: h:6f3fe0dc-a857-440a-b4bd-c32fd9024b8b -:END: - -#+begin_src nix - - { config, lib, pkgs, inputs, ... }: - - { - - <> - - services = { - greetd.settings.initial_session.user ="swarsel"; - xserver.videoDrivers = ["nvidia"]; - }; - - - hardware = { - nvidia = { - modesetting.enable = true; - powerManagement.enable = true; - prime = { - intelBusId = "PCI:0:2:0"; - nvidiaBusId = "PCI:1:0:0"; - sync.enable = true; - }; - }; - pulseaudio.configFile = pkgs.runCommand "default.pa" {} '' - sed 's/module-udev-detect$/module-udev-detect tsched=0/' \ - ${pkgs.pulseaudio}/etc/pulse/default.pa > $out - ''; - bluetooth.enable = true; - }; - - stylix.image = ../../wallpaper/lenovowp.png; - <> - - boot.loader.grub = { - enable = true; - device = "/dev/sda"; - useOSProber = true; - }; - - networking.hostName = "onett"; # Define your hostname. - networking.enableIPv6 = false; - - users.users.swarsel = { - isNormalUser = true; - description = "Leon S"; - extraGroups = [ "networkmanager" "wheel" "lp"]; - packages = with pkgs; []; - }; - - system.stateVersion = "23.05"; # Did you read the comment? - - environment.systemPackages = with pkgs; [ - ]; - - - } - -#+end_src -****** Home Manager -:PROPERTIES: -:CUSTOM_ID: h:7b76c914-c9b2-47b5-ba89-c501d6391110 -:END: - -#+begin_src nix - - { config, pkgs, lib, fetchFromGitHub, ... }: - - { - - <> - - home = { - username = "swarsel"; - homeDirectory = "/home/swarsel"; - stateVersion = "23.05"; # Please read the comment before changing. - keyboard.layout = "de"; - packages = with pkgs; [ - ]; - }; - - sops.age.sshKeyPaths = [ "${config.home.homeDirectory}/.ssh/sops" ]; - - # # waybar config - programs.waybar.settings.mainBar = { - cpu.format = "{icon0} {icon1} {icon2} {icon3} {icon4} {icon5} {icon6} {icon7}"; - temperature.hwmon-path = "/sys/devices/platform/coretemp.0/hwmon/hwmon3/temp3_input"; - }; - <> - - services.blueman-applet.enable = true; - - wayland.windowManager.sway= { - config = rec { - input = { - "1:1:AT_Translated_Set_2_keyboard" = { - xkb_layout = "us"; - xkb_options = "grp:win_space_toggle"; - # xkb_options = "ctrl:nocaps,grp:win_space_toggle"; - xkb_variant = "altgr-intl"; - }; - "2362:33538:ipad_keyboard_Keyboard" = { - xkb_layout = "us"; - xkb_options = "altwin:swap_lalt_lwin,ctrl:nocaps,grp:win_space_toggle"; - xkb_variant = "colemak_dh"; - }; - "36125:53060:splitkb.com_Kyria_rev3" = { - xkb_layout = "us"; - xkb_variant = "altgr-intl"; - }; - - "type:touchpad" = { - dwt = "enabled"; - tap = "enabled"; - natural_scroll = "enabled"; - middle_emulation = "enabled"; - }; - }; - - output = { - eDP-1 = { - mode = "1920x1080"; - scale = "1"; - bg = "~/.dotfiles/wallpaper/lenovowp.png fill"; - position = "1920,0"; - }; - VGA-1 = { - mode = "1920x1080"; - scale = "1"; - bg = "~/.dotfiles/wallpaper/lenovowp.png fill"; - position = "0,0"; - }; - }; - - keybindings = let - inherit (config.wayland.windowManager.sway.config) modifier; - in { - "${modifier}+F2" = "exec brightnessctl set +5%"; - "${modifier}+F1"= "exec brightnessctl set 5%-"; - "XF86MonBrightnessUp" = "exec brightnessctl set +5%"; - "XF86MonBrightnessDown"= "exec brightnessctl set 5%-"; - "${modifier}+Ctrl+p" = "exec wl-mirror eDP-1"; - "XF86HomePage" = "exec wtype -P Escape -p Escape"; - "${modifier}+w" = "exec \"bash ~/.dotfiles/scripts/checkschildi.sh\""; - }; - keycodebindings = { - "94" = "exec wtype c"; - "Shift+94" = "exec wtype C"; - "Ctrl+94" = "exec wtype -M ctrl c -m ctrl"; - "Ctrl+Shift+94" = "exec wtype -M ctrl -M shift c -m ctrl -m shift"; - }; - - startup = [ - <> - ]; - }; - - extraConfig = " - "; - }; - } - -#+end_src