From 95c0cc7134a74206b69dfc9e99c189a4ec2cde2b Mon Sep 17 00:00:00 2001 From: chayleaf Date: Sun, 24 Dec 2023 14:27:43 +0700 Subject: [PATCH] home/hosts/phone: init (wip) --- flake.nix | 10 +- home/common/firefox.nix | 43 ---- home/common/waybar.nix | 129 ---------- home/hosts/nixmsi.nix | 32 +-- home/hosts/phone.nix | 38 +++ home/modules/firefox.nix | 75 ++++++ home/{common => modules}/fish.nix | 0 home/{common => modules}/general.nix | 0 home/{common => modules}/gui.nix | 17 ++ home/{common => modules}/helix.nix | 0 home/{common => modules}/i3-sway.nix | 36 ++- home/{common => modules}/kakoune.nix | 0 home/{common => modules}/nvim.nix | 0 home/{common => modules}/options.nix | 9 +- home/{common => modules}/sway.patch | 0 home/{common => modules}/terminal.nix | 6 +- home/{common => modules}/waybar.css | 10 +- home/modules/waybar.nix | 225 ++++++++++++++++++ home/{common => modules}/zsh.nix | 0 pkgs/default.nix | 2 + pkgs/mobile-config-firefox/default.nix | 31 +++ pkgs/schlock/default.nix | 56 +++++ system/hardware/oneplus-enchilada/default.nix | 40 ++-- system/hardware/oneplus-enchilada/pkgs.nix | 2 +- system/hosts/phone/default.nix | 40 +++- system/hosts/phone/options.nix | 12 + system/hosts/server/files.nix | 7 + system/hosts/server/matrix.nix | 8 +- system/modules/common.nix | 2 + 29 files changed, 595 insertions(+), 235 deletions(-) delete mode 100644 home/common/firefox.nix delete mode 100644 home/common/waybar.nix create mode 100644 home/hosts/phone.nix create mode 100644 home/modules/firefox.nix rename home/{common => modules}/fish.nix (100%) rename home/{common => modules}/general.nix (100%) rename home/{common => modules}/gui.nix (95%) rename home/{common => modules}/helix.nix (100%) rename home/{common => modules}/i3-sway.nix (93%) rename home/{common => modules}/kakoune.nix (100%) rename home/{common => modules}/nvim.nix (100%) rename home/{common => modules}/options.nix (96%) rename home/{common => modules}/sway.patch (100%) rename home/{common => modules}/terminal.nix (97%) rename home/{common => modules}/waybar.css (87%) create mode 100644 home/modules/waybar.nix rename home/{common => modules}/zsh.nix (100%) create mode 100644 pkgs/mobile-config-firefox/default.nix create mode 100644 pkgs/schlock/default.nix create mode 100644 system/hosts/phone/options.nix diff --git a/flake.nix b/flake.nix index 6ef8722..fb9b6fe 100644 --- a/flake.nix +++ b/flake.nix @@ -142,9 +142,13 @@ }; home.user = [ ./home/hosts/nixmsi.nix ]; }; - phone = { + phone = rec { system = "aarch64-linux"; modules = [ ./system/devices/oneplus-6-phone.nix ]; + home.common.extraSpecialArgs = { + notlua = inputs.notlua.lib.${system}; + }; + home.user = [ ./home/hosts/phone.nix ]; }; }; @@ -169,8 +173,10 @@ hydraJobs = { server.${config.server.system} = self.nixosConfigurations.server.config.system.build.toplevel; - workstation.${config.nixmsi.system} = self.nixosConfigurations.nixmsi.config.system.build.toplevel; router.${config.router-emmc.system} = self.nixosConfigurations.router-emmc.config.system.build.toplevel; + phone.${config.phone.system} = self.nixosConfigurations.phone.config.system.build.toplevel; + phone-home.${config.phone.system} = self.homeConfigurations."user@phone".activation-script; + workstation.${config.nixmsi.system} = self.nixosConfigurations.nixmsi.config.system.build.toplevel; workstation-home.${config.nixmsi.system} = self.homeConfigurations."user@nixmsi".activation-script; }; diff --git a/home/common/firefox.nix b/home/common/firefox.nix deleted file mode 100644 index 42652ba..0000000 --- a/home/common/firefox.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ config, pkgs, ... }: - -{ - imports = [ - ./gui.nix - ]; - programs.firefox = { - enable = true; - package = pkgs.wrapFirefox pkgs.librewolf-unwrapped { - inherit (pkgs.librewolf-unwrapped) extraPrefsFiles extraPoliciesFiles; - wmClass = "LibreWolf"; - libName = "librewolf"; - nativeMessagingHosts = with pkgs; [ keepassxc ]; - }; - profiles.chayleaf = { - extensions = (with config.nur.repos.rycee.firefox-addons; [ - cookies-txt - don-t-fuck-with-paste - greasemonkey - keepassxc-browser - libredirect - localcdn - noscript - privacy-pass - protondb-for-steam - return-youtube-dislikes - rust-search-extension - search-by-image - sponsorblock - steam-database - ublock-origin - unpaywall - vimium-c - youtube-shorts-block - ]) ++ (with pkgs.firefoxAddons; [ - fastforwardteam - middle-mouse-button-scroll - rikaitan - youtube-nonstop - ]); - }; - }; -} diff --git a/home/common/waybar.nix b/home/common/waybar.nix deleted file mode 100644 index 775999e..0000000 --- a/home/common/waybar.nix +++ /dev/null @@ -1,129 +0,0 @@ -{ config, pkgs, ... }: -{ - services.playerctld.enable = config.wayland.windowManager.sway.enable; - programs.waybar = { - enable = config.wayland.windowManager.sway.enable; - package = pkgs.waybar.override { - withMediaPlayer = true; - }; - /*).overrideAttrs (old: { - src = pkgs.fetchFromGitHub { - owner = "chayleaf"; - repo = "Waybar"; - rev = "3091cf4a009e92665325c0dd61adf5ab367786a3"; - sha256 = "sha256-zH4hbQ8+9TYRVW/XYqmAVsi0vsSPn1LPqXxr0gi0j1E="; - }; - });*/ - settings = [{ - layer = "bottom"; - # position = "bottom"; - ipc = true; - height = 40; - modules-left = [ "sway/workspaces" "sway/mode" "idle_inhibitor" "mpris" ]; - idle_inhibitor = { - format = "{icon}"; - format-icons = { - activated = "󰅶"; - deactivated = "󰾪"; - }; - }; - mpris = { - tooltip = true; - format = "{player_icon} {dynamic}"; - format-paused = "{status_icon} {dynamic}"; - interval = 1; - ellipsis = "…"; - # tooltip-format = "{dynamic}"; - album-len = 44; - artist-len = 44; - title-len = 44; - dynamic-len = 44; - player-icons = { - default = ""; - mpd = ""; - }; - status-icons.paused = ""; - }; - "sway/workspaces" = { - disable-scroll = true; - format = "{value}{icon}"; - format-icons = { - default = ""; - urgent = " "; - "2" = " 󰵅"; - "3" = " "; - "4" = " "; - "5" = " "; - }; - persistent-workspaces = { - "1" = [ ]; "2" = [ ]; "3" = [ ]; - }; - }; - "sway/mode" = { - tooltip = false; - }; - modules-center = [ "sway/window" ]; - #fixed-center = false; - "sway/window" = { - format = "{title}"; - max-length = 50; - # tooltip = false; - icon = true; - rewrite = { - kitty = ""; - zsh = ""; - nheko = ""; - Nextcloud = ""; - "(.*) — LibreWolf" = "$1"; - "(.*) - KeePassXC" = "$1"; - }; - }; - modules-right = [ "memory" "cpu" "tray" "wireplumber" "clock" "sway/language" ]; - cpu = { - # format = "{usage}% "; - format = "{icon0}{icon1}{icon2}{icon3}{icon4}{icon5}{icon6}{icon7}{icon8}{icon9}{icon10}{icon11}{icon12}{icon13}{icon14}{icon15}"; - format-icons = ["▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"]; - }; - memory = { - format = "{used}G"; - }; - tray = { - icon-size = 26; - spacing = 5; - }; - wireplumber = { - format = "{volume}%"; - format-muted = "ﱝ"; - tooltip = false; - }; - clock = { - interval = 5; - format = "{:%Y-%m-%d %H:%M:%S}"; - tooltip-format = "{calendar}"; - calendar = { - mode = "year"; - # TODO: make this work - mode-mon-col = 3; - on-scroll = 1; - on-click-right = "mode"; - format = { - months = "{}"; - days = "{}"; - weeks = "W{}"; - weekdays = "{}"; - today = "{}"; - }; - }; - }; - "sway/language" = { - tooltip = false; - # make sure it isn't pushed away when other modules get too big - min-length = 2; - }; - }]; - style = ./waybar.css; - }; - home.packages = with pkgs; [ - playerctl - ]; -} diff --git a/home/hosts/nixmsi.nix b/home/hosts/nixmsi.nix index 41e44aa..5c65299 100644 --- a/home/hosts/nixmsi.nix +++ b/home/hosts/nixmsi.nix @@ -6,12 +6,12 @@ { imports = [ - ../common/general.nix - ../common/firefox.nix - ../common/i3-sway.nix - ../common/nvim.nix - ../common/helix.nix - ../common/kakoune.nix + ../modules/general.nix + ../modules/firefox.nix + ../modules/i3-sway.nix + ../modules/nvim.nix + ../modules/helix.nix + ../modules/kakoune.nix inputs.nur.nixosModules.nur ]; @@ -42,28 +42,10 @@ home.stateVersion = "22.11"; home.username = "user"; home.homeDirectory = "/home/user"; - termShell = { - enable = true; - path = "${pkgs.fish}/bin/fish"; - }; + terminals = [ "kitty" ]; # xsession.windowManager.i3.enable = true; wayland.windowManager.sway.enable = true; - terminals = [ "kitty" "urxvt" ]; - services.mpd = { - enable = true; - network.startWhenNeeded = true; - }; - services.mpdris2 = { - enable = true; - }; - programs.ncmpcpp = { - enable = true; - }; services.kdeconnect.enable = true; - systemd.user.services.kdeconnect.Service = { - Restart = lib.mkForce "always"; - RestartSec = "30"; - }; home.sessionVariables = { STEAM_EXTRA_COMPAT_TOOLS_PATHS = "${pkgs.proton-ge}"; CARGO_PROFILE_DEV_INCREMENTAL = "true"; diff --git a/home/hosts/phone.nix b/home/hosts/phone.nix new file mode 100644 index 0000000..971e37b --- /dev/null +++ b/home/hosts/phone.nix @@ -0,0 +1,38 @@ +{ pkgs +, inputs, +... +}: + +{ + imports = [ + ../modules/general.nix + ../modules/firefox.nix + ../modules/i3-sway.nix + ../modules/nvim.nix + inputs.nur.nixosModules.nur + ]; + + nix.settings = { + trusted-public-keys = [ + "binarycache.pavluk.org:Vk0ms/vSqoOV2JXeNVOroc8EfilgVxCCUtpCShGIKsQ=" + "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" + ]; + trusted-substituters = [ + "https://binarycache.pavluk.org" + "https://cache.nixos.org" + ]; + }; + + phone.enable = true; + home.stateVersion = "23.11"; + home.username = "user"; + home.homeDirectory = "/home/user"; + terminals = [ "foot" "kitty" ]; + wayland.windowManager.sway.enable = true; + services.kdeconnect.enable = true; + home.packages = with pkgs; [ + squeekboard + techmino + tdesktop + ]; +} diff --git a/home/modules/firefox.nix b/home/modules/firefox.nix new file mode 100644 index 0000000..f2896d8 --- /dev/null +++ b/home/modules/firefox.nix @@ -0,0 +1,75 @@ +{ config +, pkgs +, lib +, ... +}: + +{ + imports = [ + ./gui.nix + ]; + home.file.".mozilla/firefox/profiles.ini".target = ".librewolf/profiles.ini"; + programs.firefox = { + enable = true; + package = pkgs.wrapFirefox pkgs.librewolf-unwrapped { + inherit (pkgs.librewolf-unwrapped) extraPrefsFiles extraPoliciesFiles; + wmClass = "LibreWolf"; + libName = "librewolf"; + nativeMessagingHosts = with pkgs; [ keepassxc ]; + }; + profiles.chayleaf = lib.mkMerge [ + { + extensions = (with config.nur.repos.rycee.firefox-addons; [ + cookies-txt + don-t-fuck-with-paste + greasemonkey + keepassxc-browser + libredirect + localcdn + noscript + privacy-pass + protondb-for-steam + return-youtube-dislikes + rust-search-extension + search-by-image + sponsorblock + steam-database + ublock-origin + unpaywall + vimium-c + youtube-shorts-block + ]) ++ (with pkgs.firefoxAddons; [ + fastforwardteam + middle-mouse-button-scroll + rikaitan + youtube-nonstop + ]); + settings = lib.mkIf config.phone.enable { + "dom.w3c.touch_events.enabled" = true; + "apz.allow_zooming" = true; + "apz.allow_double_tap_zooming" = true; + "dom.w3c_touch_events.legacy_apis.enabled" = true; + "browser.tabs.inTitlebar" = 1; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + "browser.urlbar.clickSelectsAll" = true; + "toolkit.cosmeticAnimations.enabled" = false; + "browser.download.animateNotifications" = false; + }; + } + (let + concatFiles = dir: + builtins.concatStringsSep "" + (map + (k: lib.optionalString (!lib.hasInfix ".before-ff" k) (builtins.readFile "${dir}/${k}")) + (builtins.attrNames (builtins.readDir dir))); + in lib.mkIf config.phone.enable { + userChrome = + concatFiles "${pkgs.mobile-config-firefox}/etc/mobile-config-firefox/common" + + concatFiles "${pkgs.mobile-config-firefox}/etc/mobile-config-firefox/userChrome"; + userContent = + concatFiles "${pkgs.mobile-config-firefox}/etc/mobile-config-firefox/common" + + concatFiles "${pkgs.mobile-config-firefox}/etc/mobile-config-firefox/userContent"; + }) + ]; + }; +} diff --git a/home/common/fish.nix b/home/modules/fish.nix similarity index 100% rename from home/common/fish.nix rename to home/modules/fish.nix diff --git a/home/common/general.nix b/home/modules/general.nix similarity index 100% rename from home/common/general.nix rename to home/modules/general.nix diff --git a/home/common/gui.nix b/home/modules/gui.nix similarity index 95% rename from home/common/gui.nix rename to home/modules/gui.nix index abf8e90..cdce9e3 100644 --- a/home/common/gui.nix +++ b/home/modules/gui.nix @@ -234,6 +234,23 @@ # settings = { # }; #}; + termShell = { + enable = true; + path = "${pkgs.fish}/bin/fish"; + }; + services.mpd = { + enable = true; + network.startWhenNeeded = true; + }; + services.mpdris2 = { + enable = true; + }; + systemd.user.services.kdeconnect = lib.mkIf config.services.kdeconnect.enable { + Service = { + Restart = lib.mkForce "always"; + RestartSec = "30"; + }; + }; # some packages require a pointer theme home.pointerCursor.gtk.enable = true; diff --git a/home/common/helix.nix b/home/modules/helix.nix similarity index 100% rename from home/common/helix.nix rename to home/modules/helix.nix diff --git a/home/common/i3-sway.nix b/home/modules/i3-sway.nix similarity index 93% rename from home/common/i3-sway.nix rename to home/modules/i3-sway.nix index fd75c26..a385ff0 100644 --- a/home/common/i3-sway.nix +++ b/home/modules/i3-sway.nix @@ -1,6 +1,6 @@ { options, config, pkgs, lib, ... }: let -modifier = "Mod4"; +modifier = if config.phone.enable then "Mod1" else "Mod4"; rofiSway = config.programs.rofi.finalPackage; rofiI3 = pkgs.rofi.override { plugins = config.programs.rofi.plugins; }; audioNext = pkgs.writeShellScript "playerctl-next" '' @@ -35,7 +35,7 @@ audioPrev = pkgs.writeShellScript "playerctl-prev" '' fi ''; barConfig = { - mode = "dock"; + mode = "overlay"; hiddenState = "hide"; position = "bottom"; workspaceButtons = true; @@ -80,6 +80,11 @@ commonConfig = { inherit modifier; startup = [ { command = toString (pkgs.writeShellScript "init-wm" '' + ${lib.optionalString config.phone.enable '' + ${pkgs.squeekboard}/bin/squeekboard& + ${pkgs.wvkbd}/bin/wvkbd-mobintl --hidden -l full,special,cyrillic,emoji& + ${pkgs.systemd}/bin/busctl call --user sm.puri.OSK0 /sm/puri/OSK0 sm.puri.OSK0 SetVisible b true + ''} ${pkgs.home-daemon}/bin/home-daemon system76-scheduler& ${pkgs.gnome.zenity}/bin/zenity --password | (${pkgs.keepassxc}/bin/keepassxc --pw-stdin ~/Nextcloud/keepass.kdbx&) # nextcloud and nheko need secret service access @@ -232,7 +237,7 @@ in extraConfig = '' title_align center ''; - config = let swayConfig = { + config = commonConfig // { bars = [ { command = "${config.programs.waybar.package}/bin/waybar"; @@ -308,7 +313,7 @@ in "--inhibited --no-repeat --allow-other --release Scroll_Lock" = "exec ${pkgs.mumble}/bin/mumble rpc stoptalking"; "${modifier}+c" = "exec ${rofiSway}/bin/rofi -show calc -no-show-match -no-sort -no-persist-history"; "${modifier}+Print" = "exec ${grimshot}/bin/grimshot copy area"; - "${modifier}+Mod1+Print" = "exec ${grimshot}/bin/grimshot copy window"; + "${modifier}+${if modifier == "Mod1" then "Mod4" else "Mod1"}+Print" = "exec ${grimshot}/bin/grimshot copy window"; "--locked XF86AudioRaiseVolume" = "exec ${pkgs.pamixer}/bin/pamixer --increase 5"; "--locked XF86AudioLowerVolume" = "exec ${pkgs.pamixer}/bin/pamixer --decrease 5"; "--locked XF86AudioMute" = "exec ${pkgs.pamixer}/bin/pamixer --toggle-mute"; @@ -340,7 +345,8 @@ in }; }; menu = "${rofiSway}/bin/rofi -show drun"; - }; in commonConfig // swayConfig; + workspaceLayout = "tabbed"; + }; # export WLR_RENDERER=vulkan extraSessionCommands = lib.optionalString config.wayland.windowManager.sway.vulkan '' export WLR_RENDERER=vulkan @@ -358,9 +364,15 @@ in export XDG_SESSION_DESKTOP=sway ''; }; - services.swayidle = let swaylock-start = toString (pkgs.writeShellScript "swaylock-start" '' - ${pkgs.procps}/bin/pgrep -fx "${pkgs.swaylock}/bin/swaylock -f" || ${pkgs.swaylock}/bin/swaylock -f - ''); in { + services.swayidle = let + swaylock = + if config.phone.enable + then "${pkgs.schlock}/bin/schlock -f /secrets/schlock.pin" + else "${pkgs.swaylock}/bin/swaylock -f"; + swaylock-start = toString (pkgs.writeShellScript "swaylock-start" '' + ${pkgs.procps}/bin/pgrep -fx "${swaylock}" || ${swaylock} + ''); + in { enable = config.wayland.windowManager.sway.enable; events = [ { event = "before-sleep"; command = swaylock-start; } @@ -466,7 +478,13 @@ in }; terminal = config.terminalBin; extraConfig = { - modi = [ "steam:${pkgs.rofi-steam-game-list}/bin/rofi-steam-game-list" "drun" "run" "ssh" ]; + modi = lib.optionals (!config.phone.enable) [ + "steam:${pkgs.rofi-steam-game-list}/bin/rofi-steam-game-list" + ] ++ [ + "drun" + "run" + "ssh" + ]; icon-theme = "hicolor"; drun-match-fields = [ "name" "generic" "exec" "keywords" ]; show-icons = true; diff --git a/home/common/kakoune.nix b/home/modules/kakoune.nix similarity index 100% rename from home/common/kakoune.nix rename to home/modules/kakoune.nix diff --git a/home/common/nvim.nix b/home/modules/nvim.nix similarity index 100% rename from home/common/nvim.nix rename to home/modules/nvim.nix diff --git a/home/common/options.nix b/home/modules/options.nix similarity index 96% rename from home/common/options.nix rename to home/modules/options.nix index 34feb21..03d33c6 100644 --- a/home/common/options.nix +++ b/home/modules/options.nix @@ -1,5 +1,12 @@ { lib, config, ... }: with lib; { + options.phone = { + enable = mkOption { + type = types.bool; + default = false; + description = "whether this is a phone"; + }; + }; options.rustAnalyzerAndroidSettings = mkOption { type = with types; attrs; description = "Additional cargo arguments for rust-analyzer's RustAndroid command"; @@ -89,7 +96,7 @@ with lib; { config.colors.brMagenta = builtins.elemAt config.colors.base 13; config.colors.brCyan = builtins.elemAt config.colors.base 14; config.colors.brWhite = builtins.elemAt config.colors.base 15; - options.termShell = mkOption { + options.termShell = { enable = mkOption { description = "Use a separate shell for gui terminal"; type = types.bool; diff --git a/home/common/sway.patch b/home/modules/sway.patch similarity index 100% rename from home/common/sway.patch rename to home/modules/sway.patch diff --git a/home/common/terminal.nix b/home/modules/terminal.nix similarity index 97% rename from home/common/terminal.nix rename to home/modules/terminal.nix index 0c2a84d..c3bd5de 100644 --- a/home/common/terminal.nix +++ b/home/modules/terminal.nix @@ -1,7 +1,7 @@ { config, pkgs, lib, ... }: let supportTerminal = term: builtins.elem term config.terminals; - getTerminalBin = term: lib.getExe { + getTerminalBin = term: { alacritty = "${pkgs.alacritty}/bin/alacritty"; foot = "${pkgs.foot}/bin/footclient"; kitty = "${pkgs.kitty}/bin/kitty"; @@ -123,7 +123,9 @@ in { "*antialias" = true; "*autohint" = true; }; - home.file.".Xdefaults".source = lib.mkIf config.programs.urxvt.enable config.home.file."${config.home.homeDirectory}/.Xresources".source; + home.file.".Xdefaults" = lib.mkIf config.programs.urxvt.enable { + source = config.home.file."${config.home.homeDirectory}/.Xresources".source; + }; programs.foot = { enable = supportTerminal "foot"; server.enable = true; diff --git a/home/common/waybar.css b/home/modules/waybar.css similarity index 87% rename from home/common/waybar.css rename to home/modules/waybar.css index f9efb66..f65f96f 100644 --- a/home/common/waybar.css +++ b/home/modules/waybar.css @@ -11,10 +11,18 @@ border: none; border-radius: 0; font-family: Noto Sans Mono, "Symbols Nerd Font Mono", monospace; - font-size: 19; + font-size: 19px; min-height: 0; } +#custom-a { font-size: 40px; } +#custom-b { font-size: 40px; } +#custom-c { font-size: 40px; } +#custom-d { font-size: 40px; } +#custom-e { font-size: 40px; } +#custom-f { font-size: 40px; } +#custom-g { font-size: 40px; } + #mpris { padding-left: 3px; font-family: "Noto Sans Mono CJK JP", "Noto Sans Mono", "Symbols Nerd Font Mono", monospace; diff --git a/home/modules/waybar.nix b/home/modules/waybar.nix new file mode 100644 index 0000000..24f596b --- /dev/null +++ b/home/modules/waybar.nix @@ -0,0 +1,225 @@ +{ config +, pkgs +, lib +, ... +}: + +{ + services.playerctld.enable = config.wayland.windowManager.sway.enable; + programs.waybar = { + enable = config.wayland.windowManager.sway.enable; + package = pkgs.waybar.override { + withMediaPlayer = true; + }; + /*).overrideAttrs (old: { + src = pkgs.fetchFromGitHub { + owner = "chayleaf"; + repo = "Waybar"; + rev = "3091cf4a009e92665325c0dd61adf5ab367786a3"; + sha256 = "sha256-zH4hbQ8+9TYRVW/XYqmAVsi0vsSPn1LPqXxr0gi0j1E="; + }; + });*/ + settings = lib.toList { + layer = "top"; + position = "top"; + ipc = true; + height = 40; + modules-left = [ + "sway/workspaces" + "sway/mode" + "idle_inhibitor" + ] + ++ lib.optional (!config.phone.enable) "mpris"; + idle_inhibitor = { + format = "{icon}"; + format-icons = { + activated = "󰅶"; + deactivated = "󰾪"; + }; + }; + mpris = { + tooltip = true; + format = "{player_icon} {dynamic}"; + format-paused = "{status_icon} {dynamic}"; + interval = 1; + ellipsis = "…"; + # tooltip-format = "{dynamic}"; + album-len = 44; + artist-len = 44; + title-len = 44; + dynamic-len = 44; + player-icons = { + default = ""; + mpd = ""; + }; + status-icons.paused = ""; + }; + "sway/workspaces" = { + disable-scroll = true; + format = "{value}{icon}"; + format-icons = { + default = ""; + urgent = " "; + } // lib.optionalAttrs (!config.phone.enable) { + "2" = " 󰵅"; + "3" = " "; + "4" = " "; + "5" = " "; + }; + persistent-workspaces = { + "1" = [ ]; "2" = [ ]; "3" = [ ]; + }; + }; + "sway/mode" = { + tooltip = false; + }; + modules-center = [ "sway/window" ]; + #fixed-center = false; + "sway/window" = { + format = "{title}"; + max-length = 50; + # tooltip = false; + icon = true; + rewrite = { + kitty = ""; + zsh = ""; + nheko = ""; + Nextcloud = ""; + "(.*) — LibreWolf" = "$1"; + "(.*) - KeePassXC" = "$1"; + }; + }; + modules-right = [ + "memory" + ] + ++ lib.optional (!config.phone.enable) "cpu" + ++ [ + "tray" + (if config.phone.enable then "pulseaudio" else "wireplumber") + ] + ++ lib.optional (!config.phone.enable) "clock" + ++ [ "sway/language" ] + ++ lib.optional config.phone.enable "battery"; + battery = { + format = "{capacity}%"; + }; + cpu = { + # format = "{usage}% "; + format = "{icon0}{icon1}{icon2}{icon3}{icon4}{icon5}{icon6}{icon7}{icon8}{icon9}{icon10}{icon11}{icon12}{icon13}{icon14}{icon15}"; + format-icons = ["▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"]; + }; + memory = { + format = "{used}G"; + }; + tray = { + icon-size = 26; + spacing = 5; + }; + wireplumber = { + format = "{volume}%"; + format-muted = "ﱝ"; + tooltip = false; + }; + pulseaudio = { + format = "{volume}%"; + format-muted = "ﱝ"; + tooltip = false; + }; + clock = { + interval = 5; + format = "{:%Y-%m-%d %H:%M:%S}"; + tooltip-format = "{calendar}"; + calendar = { + mode = "year"; + # TODO: make this work + mode-mon-col = 3; + on-scroll = 1; + on-click-right = "mode"; + format = { + months = "{}"; + days = "{}"; + weeks = "W{}"; + weekdays = "{}"; + today = "{}"; + }; + }; + }; + "sway/language" = { + tooltip = false; + # make sure it isn't pushed away when other modules get too big + min-length = 2; + }; + } ++ lib.optionals config.phone.enable [ + { + layer = "top"; + position = "top"; + ipc = true; + height = 40; + clock = { + interval = 5; + format = "{:%Y-%m-%d %H:%M:%S}"; + }; + cpu = { + # format = "{usage}% "; + format = "{icon0}{icon1}{icon2}{icon3}{icon4}{icon5}{icon6}{icon7}{icon8}{icon9}{icon10}{icon11}{icon12}{icon13}{icon14}{icon15}"; + format-icons = ["▁" "▂" "▃" "▄" "▅" "▆" "▇" "█"]; + }; + modules-left = [ "cpu" ]; + modules-right = [ "clock" ]; + } + { + layer = "top"; + position = "bottom"; + ipc = true; + height = 80; + modules-left = [ "custom/a" "custom/b" "custom/c" ]; + modules-right = [ "custom/d""custom/e" "custom/f" ]; + # 2 btns: keyboards + # 1 btn: close + # + "custom/a" = { + interval = "once"; exec = "${pkgs.coreutils}/bin/echo a"; exec-if = "${pkgs.coreutils}/bin/true"; + format = " A "; + on-click = "${config.home.homeDirectory}/scripts/a.sh"; + }; + "custom/b" = { + interval = "once"; exec = "${pkgs.coreutils}/bin/echo a"; exec-if = "${pkgs.coreutils}/bin/true"; + format = " 󰌌 "; + on-click = pkgs.writeShellScript "toggle-keyboard.sh" '' + pkill -x -SIGRTMIN wvkbd-mobintl + ''; + }; + "custom/c" = { + interval = "once"; exec = "${pkgs.coreutils}/bin/echo a"; exec-if = "${pkgs.coreutils}/bin/true"; + format = " C "; + on-click = "${config.home.homeDirectory}/scripts/c.sh"; + }; + "custom/d" = { + interval = "once"; exec = "${pkgs.coreutils}/bin/echo a"; exec-if = "${pkgs.coreutils}/bin/true"; + format = " D "; + on-click = "${config.home.homeDirectory}/scripts/d.sh"; + }; + "custom/e" = { + interval = "once"; exec = "${pkgs.coreutils}/bin/echo a"; exec-if = "${pkgs.coreutils}/bin/true"; + format = " 󰌌 "; + on-click = pkgs.writeShellScript "toggle-keyboard.sh" '' + if ${pkgs.systemd}/bin/busctl get-property --user sm.puri.OSK0 /sm/puri/OSK0 sm.puri.OSK0 Visible | ${pkgs.gnugrep}/bin/grep true; then + ${pkgs.systemd}/bin/busctl call --user sm.puri.OSK0 /sm/puri/OSK0 sm.puri.OSK0 SetVisible b false + else + ${pkgs.systemd}/bin/busctl call --user sm.puri.OSK0 /sm/puri/OSK0 sm.puri.OSK0 SetVisible b true + fi + ''; + }; + "custom/f" = { + interval = "once"; exec = "${pkgs.coreutils}/bin/echo a"; exec-if = "${pkgs.coreutils}/bin/true"; + format = " X "; + on-click = "${pkgs.sway}/bin/swaymsg kill"; + }; + } + ]; + style = ./waybar.css; + }; + home.packages = with pkgs; [ + playerctl + ]; +} diff --git a/home/common/zsh.nix b/home/modules/zsh.nix similarity index 100% rename from home/common/zsh.nix rename to home/modules/zsh.nix diff --git a/pkgs/default.nix b/pkgs/default.nix index 79ca196..e8515b8 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -114,6 +114,7 @@ in kvmfrOverlay = kvmfr: kvmfr.overrideAttrs (old: { inherit (pkgs'.looking-glass-client) version src; }); + mobile-config-firefox = callPackage ./mobile-config-firefox { }; ping-exporter = callPackage ./ping-exporter { }; proton-ge = pkgs.stdenvNoCC.mkDerivation { inherit (sources.proton-ge) pname version src; @@ -129,6 +130,7 @@ in version = "unstable-" + sources.searxng.date; postInstall = builtins.replaceStrings [ "/botdetection" ] [ "" ] old.postInstall; })); + schlock = callPackage ./schlock { }; techmino = callPackage ./techmino { }; firefoxAddons = lib.recurseIntoAttrs (callPackage ./firefox-addons { inherit nur sources; }); diff --git a/pkgs/mobile-config-firefox/default.nix b/pkgs/mobile-config-firefox/default.nix new file mode 100644 index 0000000..fdbe3a9 --- /dev/null +++ b/pkgs/mobile-config-firefox/default.nix @@ -0,0 +1,31 @@ +{ lib +, stdenv +, fetchFromGitLab +}: + +stdenv.mkDerivation rec { + pname = "mobile-config-firefox"; + version = "4.2.0"; + + src = fetchFromGitLab { + owner = "postmarketOS"; + repo = "mobile-config-firefox"; + rev = version; + hash = "sha256-JEfgB+dqfy97n4FC2N6eHDV0aRFAhmFujYJHYa3kENE="; + }; + + makeFlags = [ "DESTDIR=$(out)" "FIREFOX_DIR=/lib/firefox" ]; + + postInstall = '' + rm -rf "$out/usr" + ''; + + meta = with lib; { + description = "Mobile and privacy friendly configuration for Firefox (distro-independent"; + homepage = "https://gitlab.com/postmarketOS/mobile-config-firefox"; + license = licenses.mpl20; + maintainers = with maintainers; [ chayleaf ]; + mainProgram = "mobile-config-firefox"; + platforms = platforms.all; + }; +} diff --git a/pkgs/schlock/default.nix b/pkgs/schlock/default.nix new file mode 100644 index 0000000..324f555 --- /dev/null +++ b/pkgs/schlock/default.nix @@ -0,0 +1,56 @@ +{ lib +, stdenv +, fetchFromGitHub +, meson +, ninja +, pkg-config +, scdoc +, cairo +, gdk-pixbuf +, libsodium +, libxkbcommon +, wayland +, wayland-protocols +}: + +stdenv.mkDerivation { + pname = "schlock"; + version = "unstable-2022-02-02"; + + src = fetchFromGitHub { + owner = "telent"; + repo = "schlock"; + rev = "f3dde16f074fd5b7482a253b9d26b4ead66dea82"; + hash = "sha256-Ot86vALt1kkzbBocwh9drCycbRIw2jMKJU4ODe9PYQM="; + }; + + nativeBuildInputs = [ + meson + ninja + pkg-config + scdoc + ]; + + buildInputs = [ + cairo + gdk-pixbuf + libsodium + libxkbcommon + wayland + wayland-protocols + ]; + + mesonFlags = [ + "-Dgdk-pixbuf=enabled" + "-Dman-pages=enabled" + ]; + + meta = with lib; { + description = ""; + homepage = "https://github.com/telent/schlock"; + license = licenses.mit; + maintainers = with maintainers; [ chayleaf ]; + mainProgram = "schlock"; + platforms = platforms.all; + }; +} diff --git a/system/hardware/oneplus-enchilada/default.nix b/system/hardware/oneplus-enchilada/default.nix index 2e1a357..c0007f3 100644 --- a/system/hardware/oneplus-enchilada/default.nix +++ b/system/hardware/oneplus-enchilada/default.nix @@ -38,10 +38,15 @@ in requires = [ "dbus.socket" ]; serviceConfig.ExecStart = "${pkgs.q6voiced}/bin/q6voiced hw:0,6"; }; - environment.etc."wireplumber/main.lua.d/51-qcom-sdm845.lua".source = pkgs.fetchurl { - url = "https://gitlab.com/postmarketOS/pmaports/-/raw/0aa9524204e9c9c002c860b87c972bc2ebf025f3/device/community/soc-qcom-sdm845/51-qcom-sdm845.lua"; - hash = "sha256-56oNJJyuZZe1Iig1xskDuyazw3PbRZtmU/YRFUTqjwk="; - }; + systemd.user.services.wireplumber.environment.WIREPLUMBER_CONFIG_DIR = pkgs.runCommand "wireplumber-config" {} '' + cp -a "${pkgs.wireplumber}/share/wireplumber" "$out" + chmod +w "$out" "$out/main.lua.d" + ln -s ${pkgs.fetchurl { + url = "https://gitlab.com/postmarketOS/pmaports/-/raw/0aa9524204e9c9c002c860b87c972bc2ebf025f3/device/community/soc-qcom-sdm845/51-qcom-sdm845.lua"; + hash = "sha256-56oNJJyuZZe1Iig1xskDuyazw3PbRZtmU/YRFUTqjwk="; + }} "$out/main.lua.d/51-qcom-sdm845.lua" + ''; + systemd.services.wireplumber.environment.WIREPLUMBER_CONFIG_DIR = config.systemd.user.services.wireplumber.environment.WIREPLUMBER_CONFIG_DIR; networking.modemmanager.enable = !config.networking.networkmanager.enable; services.udev.extraRules = '' SUBSYSTEM=="input", KERNEL=="event*", ENV{ID_INPUT}=="1", SUBSYSTEMS=="input", ATTRS{name}=="spmi_haptics", TAG+="uaccess", ENV{FEEDBACKD_TYPE}="vibra" @@ -108,16 +113,23 @@ in boot.initrd.postMountCommands = '' pkill -x buffyboard ''; - services.getty.extraArgs = [ "--skip-login" ]; - services.getty.loginProgram = let - lockfile = "/tmp/buffyboard-lock.lock"; - in pkgs.writeShellScript "login-with-buffyboard-once" '' - if [ ! -f '${lockfile}' ]; then - ${pkgs.coreutils}/bin/touch '${lockfile}' - ${pkgs.buffyboard}/bin/buffyboard 2>/dev/null & - fi - exec ${pkgs.shadow}/bin/login -f user - ''; + common.gettyAutologin = true; + systemd.services.buffyboard = { + description = "buffyboard"; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + ExecStart = "${pkgs.buffyboard}/bin/buffyboard"; + Restart = "always"; + RestartSec = "1"; + }; + }; + security.sudo.extraRules = [ + { groups = [ "users" ]; + commands = [ + { command = "/run/current-system/sw/bin/systemctl stop buffyboard"; options = [ "SETENV" "NOPASSWD" ]; } + { command = "/run/current-system/sw/bin/systemctl start buffyboard"; options = [ "SETENV" "NOPASSWD" ]; } + ]; } + ]; }) (lib.mkIf cfg.rndis.enable { boot.initrd.kernelModules = [ "configfs" "libcomposite" ]; diff --git a/system/hardware/oneplus-enchilada/pkgs.nix b/system/hardware/oneplus-enchilada/pkgs.nix index 93c4c1d..9626e77 100644 --- a/system/hardware/oneplus-enchilada/pkgs.nix +++ b/system/hardware/oneplus-enchilada/pkgs.nix @@ -49,7 +49,7 @@ in { mkdir -p "$out"/share/alsa/ucm2/{OnePlus,conf.d/sdm845,lib} mv ucm2/lib/card-init.conf "$out/share/alsa/ucm2/lib/" mv ucm2/OnePlus/enchilada "$out/share/alsa/ucm2/OnePlus/" - ln -s ../../OnePlus/enchilada/enchilada.conf "$out/share/alsa/ucm2/conf.d/sdm845/OnePlus 6.conf" + ln -s ../../OnePlus/enchilada/enchilada.conf "$out/share/alsa/ucm2/conf.d/sdm845/oneplus-OnePlus6-Unknown.conf" ''; # to overwrite card-init.conf meta.priority = -10; diff --git a/system/hosts/phone/default.nix b/system/hosts/phone/default.nix index 0be8ee3..39b5011 100644 --- a/system/hosts/phone/default.nix +++ b/system/hosts/phone/default.nix @@ -1,12 +1,36 @@ { pkgs , lib -# , config +, config , ... }: { + imports = [ ./options.nix ]; + system.stateVersion = "23.11"; + systemd.network.links."40-wlan0" = { + matchConfig.OriginalName = "wlan0"; + linkConfig.MACAddressPolicy = "none"; + linkConfig.MACAddress = config.phone.mac; + }; + + sound.enable = true; + services.logind.powerKey = "ignore"; + services.logind.powerKeyLongPress = "poweroff"; + hardware.sensor.iio.enable = true; + services.pipewire.enable = false; + hardware.pulseaudio.enable = lib.mkForce true; + users.users.${config.common.mainUsername}.extraGroups = [ + "dialout" + "feedbackd" + "video" + ] ++ lib.optional (config.networking.modemmanager.enable || config.networking.networkmanager.enable) "networkmanager"; + + common.minimal = false; + services.sshd.enable = true; + services.tlp.enable = true; + # kde connect networking.firewall.allowedTCPPortRanges = [ { from = 1714; to = 1764; } @@ -15,12 +39,20 @@ { from = 1714; to = 1764; } ]; - common.minimal = false; + programs.calls.enable = true; + environment.systemPackages = with pkgs; [ + # IM and SMS + chatty + ]; + programs.sway.enable = true; xdg.portal = { enable = true; extraPortals = with pkgs; [ xdg-desktop-portal-gtk xdg-desktop-portal-wlr ]; }; - services.sshd.enable = true; - # users.users.${config.common.mainUsername}.extraGroups = [ "video" "feedbackd" "dialout" ]; + # services.xserver.desktopManager.phosh = { + # enable = true; + # group = "users"; + # user = config.common.mainUsername; + # }; } diff --git a/system/hosts/phone/options.nix b/system/hosts/phone/options.nix new file mode 100644 index 0000000..6989333 --- /dev/null +++ b/system/hosts/phone/options.nix @@ -0,0 +1,12 @@ +{ lib +, ... +}: + +{ + options.phone = { + mac = lib.mkOption { + description = "mac address"; + type = lib.types.str; + }; + }; +} diff --git a/system/hosts/server/files.nix b/system/hosts/server/files.nix index ccaf757..37f64e7 100644 --- a/system/hosts/server/files.nix +++ b/system/hosts/server/files.nix @@ -11,6 +11,13 @@ in { enableACME = true; forceSSL = true; locations."/".proxyPass = "http://${lib.quoteListenAddr settings.server.HTTP_ADDR}:${toString settings.server.HTTP_PORT}"; + locations."= /robots.txt".extraConfig = '' + return 200 ${builtins.toJSON '' + User-agent: * + Disallow: /mirrors/nixpkgs + Disallow: /chayleaf/nixpkgs + ''}; + ''; }; services.forgejo = { enable = true; diff --git a/system/hosts/server/matrix.nix b/system/hosts/server/matrix.nix index fc18c45..0e4f423 100644 --- a/system/hosts/server/matrix.nix +++ b/system/hosts/server/matrix.nix @@ -8,17 +8,17 @@ let "m.server" = "matrix.${cfg.domainName}:443"; }; matrixClientJson = { - "m.homeserver" = { base_url = "https://matrix.${cfg.domainName}"; }; - "m.identity_server" = { base_url = "https://vector.im"; }; + "m.homeserver".base_url = "https://matrix.${cfg.domainName}"; + "m.identity_server".base_url = "https://vector.im"; }; matrixServerConfigResponse = '' add_header Content-Type application/json; - return 200 '${builtins.toJSON matrixServerJson}'; + return 200 ${builtins.toJSON (builtins.toJSON matrixServerJson)}; ''; matrixClientConfigResponse = '' add_header Content-Type application/json; add_header Access-Control-Allow-Origin *; - return 200 '${builtins.toJSON matrixClientJson}'; + return 200 ${builtins.toJSON (builtins.toJSON matrixClientJson)}; ''; matrixAddr = "::1"; matrixPort = 8008; diff --git a/system/modules/common.nix b/system/modules/common.nix index 62bcf6f..691bf64 100644 --- a/system/modules/common.nix +++ b/system/modules/common.nix @@ -123,6 +123,7 @@ in { wget kitty.terminfo + foot.terminfo # rxvt-unicode-unwrapped.terminfo ]; programs.fish.enable = true; @@ -200,6 +201,7 @@ in { security.polkit.enable = true; security.rtkit.enable = true; services.dbus.enable = true; + programs.dconf.enable = true; }) ];