home/hosts/phone: init (wip)
This commit is contained in:
parent
e9122a4e7f
commit
95c0cc7134
10
flake.nix
10
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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
]);
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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 = "<tt><small>{calendar}</small></tt>";
|
||||
calendar = {
|
||||
mode = "year";
|
||||
# TODO: make this work
|
||||
mode-mon-col = 3;
|
||||
on-scroll = 1;
|
||||
on-click-right = "mode";
|
||||
format = {
|
||||
months = "<span color='#ffead3'><b>{}</b></span>";
|
||||
days = "<span color='#ecc6d9'><b>{}</b></span>";
|
||||
weeks = "<span color='#99ffdd'><b>W{}</b></span>";
|
||||
weekdays = "<span color='#ffcc66'><b>{}</b></span>";
|
||||
today = "<span color='#ff6699'><b><u>{}</u></b></span>";
|
||||
};
|
||||
};
|
||||
};
|
||||
"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
|
||||
];
|
||||
}
|
|
@ -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";
|
||||
|
|
38
home/hosts/phone.nix
Normal file
38
home/hosts/phone.nix
Normal file
|
@ -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
|
||||
];
|
||||
}
|
75
home/modules/firefox.nix
Normal file
75
home/modules/firefox.nix
Normal file
|
@ -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";
|
||||
})
|
||||
];
|
||||
};
|
||||
}
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
225
home/modules/waybar.nix
Normal file
225
home/modules/waybar.nix
Normal file
|
@ -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 = "<tt><small>{calendar}</small></tt>";
|
||||
calendar = {
|
||||
mode = "year";
|
||||
# TODO: make this work
|
||||
mode-mon-col = 3;
|
||||
on-scroll = 1;
|
||||
on-click-right = "mode";
|
||||
format = {
|
||||
months = "<span color='#ffead3'><b>{}</b></span>";
|
||||
days = "<span color='#ecc6d9'><b>{}</b></span>";
|
||||
weeks = "<span color='#99ffdd'><b>W{}</b></span>";
|
||||
weekdays = "<span color='#ffcc66'><b>{}</b></span>";
|
||||
today = "<span color='#ff6699'><b><u>{}</u></b></span>";
|
||||
};
|
||||
};
|
||||
};
|
||||
"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
|
||||
];
|
||||
}
|
|
@ -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; });
|
||||
|
|
31
pkgs/mobile-config-firefox/default.nix
Normal file
31
pkgs/mobile-config-firefox/default.nix
Normal file
|
@ -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;
|
||||
};
|
||||
}
|
56
pkgs/schlock/default.nix
Normal file
56
pkgs/schlock/default.nix
Normal file
|
@ -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;
|
||||
};
|
||||
}
|
|
@ -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 {
|
||||
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" ];
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
# };
|
||||
}
|
||||
|
|
12
system/hosts/phone/options.nix
Normal file
12
system/hosts/phone/options.nix
Normal file
|
@ -0,0 +1,12 @@
|
|||
{ lib
|
||||
, ...
|
||||
}:
|
||||
|
||||
{
|
||||
options.phone = {
|
||||
mac = lib.mkOption {
|
||||
description = "mac address";
|
||||
type = lib.types.str;
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
})
|
||||
|
||||
];
|
||||
|
|
Loading…
Reference in a new issue