feat(nix): extend wayland with sway setup

This commit is contained in:
steveej 2023-05-23 18:11:30 +02:00
parent 2da1181445
commit 6970b8c7d2
27 changed files with 867 additions and 516 deletions

View file

@ -1,5 +1,4 @@
{
inputs,
pkgs,
config,
# these come in via home-manager.extraSpecialArgs and are specific to each node
@ -18,13 +17,11 @@ in {
# ../profiles/gnome-desktop.nix
../profiles/sway-desktop.nix
../profiles/experimental-desktop.ni
# ../profiles/experimental-desktop.nix
../programs/redshift.nix
../programs/espanso.nix
../programs/gpg-agent.nix
../programs/radicale.nix
../programs/firefox.nix
../programs/chromium.nix
@ -33,6 +30,10 @@ in {
../programs/neovim.nix
../programs/pass.nix
../programs/vscode
# TODO: broken since nixos-23.05
# ../programs/radicale.nix
# ../programs/espanso.nix
];
home.sessionVariables.HM_CONFIG = "graphical-fullblown";
@ -47,7 +48,6 @@ in {
};
};
home.packages =
[]
++ (with pkgs; [
@ -79,7 +79,6 @@ in {
# Archive Managers
sshfs-fuse
xarchive
p7zip
zip
unzip
@ -92,16 +91,15 @@ in {
yubikey-manager-qt
yubikey-personalization
yubikey-personalization-gui
gnome.gnome-keyring
# gnome.seahorse
# gnome.gnome-keyring
gcr gnome.seahorse
# Language Support
hunspellDicts.en-us
hunspellDicts.de-de
# Messaging/Communication
signal-desktop
pkgsUnstable.session-desktop
# pidgin
hexchat
schildichat-desktop
@ -111,11 +109,13 @@ in {
# pkgsUnstable.jitsi-meet-electron
thunderbird
evolution # gnome4.glib_networking
kotatogram-desktop
zoom-us
# FIXME: depends on insecure openssl 1.1.1t
# kotatogram-desktop
thunderbird
gnome.cheese
pkgsMaster.discord
# gnome.cheese
pkgsUnstable.discord
# Virtualization
# virtmanager
@ -181,7 +181,8 @@ in {
# Document Processing and Management
mendeley
evince
(pkgsUnstable.logseq.override (_: {electron = pkgs.electron_20;}))
pkgsUnstable.logseq
# (pkgsUnstable.logseq.override (_: {electron = pkgs.electron_20;}))
# File Synchronzation
dropbox

View file

@ -12,17 +12,9 @@ in {
../profiles/wayland-desktop.nix
];
home.packages = with pkgs; [
home.packages = [
# experimental WMs
packages'.jay
packages'.magmawm
# swayidle
# swaylock
# # fonts
# noto-fonts
# font-awesome
# noto-fonts-emoji
];
}

View file

@ -13,6 +13,7 @@ in {
gnome-keyring.enable = false;
blueman-applet.enable = true;
flameshot.enable = true;
pasystray.enable = true;
};
# TODO: remove this comment once i'm sure everything works

View file

@ -2,38 +2,139 @@
pkgs,
config,
lib,
packages',
...
}: let
inherit (import ../lib.nix {}) mkSimpleTrayService;
lockCmd = "${pkgs.swaylock}/bin/swaylock -efF --color '#000000'";
displayOffCmd = "${pkgs.sway}/bin/swaymsg 'output * power off'";
displayOnCmd = "${pkgs.sway}/bin/swaymsg 'output * power on'";
swapOutputWorkspaces = ../../../scripts/sway-swapoutputworkspaces.sh;
in {
imports = [
../profiles/wayland-desktop.nix
../programs/waybar.nix
../programs/salut.nix
];
home.packages = with pkgs; [
swayidle
swaylock
services = {
blueman-applet.enable = true;
flameshot.enable = true;
};
home.packages = [
pkgs.swayidle
pkgs.swaylock
packages'.yofi
pkgs.fuzzel
# required by any bar that has a tray plugin
pkgs.libappindicator-gtk3
## themes
pkgs.gnome.adwaita-icon-theme
pkgs.hicolor-icon-theme
pkgs.gnome-icon-theme
## fonts
pkgs.dejavu_fonts # just a basic good fond
pkgs.font-awesome_5 # needed by i3status-rust
pkgs.nerdfonts
pkgs.font-awesome
pkgs.roboto
pkgs.ttf_bitstream_vera
# from the wiki
pkgs.noto-fonts
pkgs.noto-fonts-cjk
pkgs.noto-fonts-cjk-sans
pkgs.noto-fonts-cjk-serif
pkgs.noto-fonts-emoji
pkgs.noto-fonts-emoji-blob-bin
pkgs.noto-fonts-extra
pkgs.noto-fonts-lgc-plus
pkgs.liberation_ttf
pkgs.fira-code
pkgs.fira-code-symbols
pkgs.mplus-outline-fonts.githubRelease
pkgs.dina-font
pkgs.monoid
pkgs.hermit
# by colemickens
pkgs.gelasio # metric-compatible with Georgia
pkgs.powerline-symbols
pkgs.iosevka-comfy.comfy-fixed
# fonts
noto-fonts
font-awesome
noto-fonts-emoji
];
wayland.windowManager.sway = {
enable = true;
systemdIntegration = true;
xwayland = false;
config = let
modifier = "Mod4";
inherit (config.wayland.windowManager.sway.config) left right up down;
in {
inherit modifier;
bars = [];
input = {
"type:keyboard" = {
xkb_layout = "us";
xkb_variant = "altgr-intl";
xkb_options = "nodeadkeys";
};
"type:touchpad" = {
natural_scroll = "enabled";
};
};
keybindings = lib.mkOptionDefault {
"${modifier}+Ctrl+l" = "exec ${pkgs.swaylock}/bin/swaylock -fF";
"XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
# as of 2023-05-21 the `!!` arg parsing mode was broken for me on yofi
# "${modifier}+d" = "exec ${packages'.yofi}/bin/yofi binapps";
"${modifier}+d" = "exec ${pkgs.fuzzel}/bin/fuzzel";
# only 1-9 exist on the default config
"${modifier}+0" = "workspace number 0";
"${modifier}+Shift+0" = "move container to workspace number 0";
# move workspace to output
"${modifier}+Control+Shift+${left}" = "move workspace to output left";
"${modifier}+Control+Shift+${right}" = "move workspace to output right";
"${modifier}+Control+Shift+${up}" = "move workspace to output up";
"${modifier}+Control+Shift+${down}" = "move workspace to output down";
# move workspace to output with arrow keys
"${modifier}+Control+Shift+Left" = "move workspace to output left";
"${modifier}+Control+Shift+Right" = "move workspace to output right";
"${modifier}+Control+Shift+Up" = "move workspace to output up";
"${modifier}+Control+Shift+Down" = "move workspace to output down";
"${modifier}+Shift+e" = "exec swaymsg exit";
"${modifier}+q" = "kill";
"${modifier}+x" = "exec ${swapOutputWorkspaces}";
"${modifier}+Ctrl+l" = "exec ${lockCmd}";
"--locked XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous";
"XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next";
"XF86AudioRaiseVolume" = "exec ${pkgs.pulsemixer}/bin/pulsemixer --change-volume +5";
"XF86AudioLowerVolume" = "exec ${pkgs.pulsemixer}/bin/pulsemixer --change-volume -5";
"--locked XF86AudioMute" = "exec ${pkgs.pulsemixer}/bin/pulsemixer --toggle-mute";
# TODO: screenshot util, flameshot doesn't work in the packaged version
"Print" = "exec ${pkgs.flameshot}/bin/flameshot gui";
};
terminal = "alacritty";
@ -41,44 +142,33 @@ in {
# Launch Firefox on start
# {command = "firefox";}
# {command = "gnome-keyring --replace"}
{command = "systemctl --user restart waybar";}
];
fonts = {
names = [ "Noto Sans" "Font Awesome 5 Free" ];
style = "Heavy";
size = 10.0;
colors.focused = lib.mkOptionDefault {
childBorder = lib.mkForce "#ffa500";
};
#fonts = {
# names = [ "DejaVu Sans Mono" "FontAwesome5Free" ];
# style = "Bold Semi-Condensed";
# size = 11.0;
#};
colors.focused = {
childBorder = "#ffa500";
# border = "#ffa500";
# TODO: refer to the defaults for these
border = "#4c7899";
background = "#285577";
text = "#ffffff";
indicator = "#2e9ef4";
};
window = {
border = 4;
};
window.border = 4;
};
};
services.swayidle = {
enable = true;
timeouts = [
{ timeout = 60 * 5; command = "${pkgs.swaylock}/bin/swaylock -fF"; }
{ timeout = 10; command = "if ${pkgs.procps}/bin/pgrep -x swaylock; then ${displayOffCmd}; fi"; resumeCommand = displayOnCmd; }
{ timeout = 60 * 5; command = lockCmd; }
{ timeout = 60 * 6; command = displayOffCmd; resumeCommand = displayOnCmd; }
];
events = [
{ event = "before-sleep";
command = builtins.concatStringsSep "; " [
lockCmd
"${pkgs.playerctl}/bin/playerctl pause"
];
}
{ event = "after-resume"; command = displayOnCmd; }
{ event = "lock"; command = lockCmd; }
];
};
}

View file

@ -1,19 +1,34 @@
{
pkgs,
config,
lib,
repoFlake,
nodeFlake,
...
}: let
inherit (import ../lib.nix {}) mkSimpleTrayService;
nixpkgs-2211 = nodeFlake.inputs.nixpkgs-2211.legacyPackages.${pkgs.system};
nixpkgs-wayland' = repoFlake.inputs.nixpkgs-wayland.packages.${pkgs.system};
wayprompt = nixpkgs-wayland'.wayprompt;
in {
services.gpg-agent.pinentryFlavor = "gtk2";
fonts.fontconfig.enable = true;
# services.gpg-agent.pinentryFlavor = lib.mkForce null;
# services.gpg-agent.extraConfig = ''
# pinentry-program "${wayprompt}/bin/pinentry-wayprompt"
# '';
home.packages = with pkgs; [
wlr-randr
wayout
wl-clipboard
wmctrl
wayprompt
nixpkgs-wayland'.shotman
# identifies key input syms
wev
@ -25,6 +40,35 @@ in {
pasystray
qt5.qtwayland
qt6.qtwayland
# probably required by flameshot
# xdg-desktop-portal xdg-desktop-portal-wlr
# grim
(signal-desktop.overrideAttrs (old: {
preFixup = old.preFixup + ''
gappsWrapperArgs+=(
--add-flags "--enable-features=UseOzonePlatform"
--add-flags "--ozone-platform=wayland"
)
'';
}))
((pkgs.session-desktop.override (old: {
inherit (nixpkgs-2211) appimageTools;
}))
.overrideAttrs(old: {
nativeBuildInputs = old.nativeBuildInputs ++ [
pkgs.wrapGAppsHook
];
preFixup = (old.preFixup or "") + ''
gappsWrapperArgs+=(
--add-flags "--enable-features=UseOzonePlatform"
--add-flags "--ozone-platform=wayland"
)
'';
}))
];
home.sessionVariables = {

View file

@ -1,4 +1,8 @@
{lib, ...}: {
{lib, pkgs, ...}: {
home.packages = [
pkgs.gcr
];
programs.gpg.enable = true;
services.gpg-agent = {
enable = true;

View file

@ -14,6 +14,11 @@
inherit pname version;
hash = "sha256-Mukjzjumv9VL+A0maU0K/SliWrgeRjAeiEdN5a83G0I=";
};
propagatedBuildInputs = [
pkgs.libxcrypt-legacy
];
};
radicale-storage-decsync = pkgs.python3Packages.buildPythonPackage rec {
pname = "radicale_storage_decsync";
@ -24,7 +29,17 @@
hash = "sha256-X+0MT5o2PjsKxca5EDI+rYyQDmUtbRoELDr6e4YXKCg=";
};
buildInputs = [pkgs.radicale];
buildInputs = [
pkgs.radicale
pkgs.libxcrypt-legacy
pkgs.libxcrypt
];
nativeCheckInputs = [
pkgs.libxcrypt-legacy
pkgs.libxcrypt
];
propagatedBuildInputs = [libdecsync pkgs.python3Packages.setuptools];
};
radicale-decsync = pkgs.radicale.overrideAttrs (old: {

View file

@ -0,0 +1,17 @@
{
pkgs,
config,
lib,
packages',
...
}: {
home.packages = [
packages'.salut
];
home.file.".config/salut/config.ini" = {
enable = true;
text = ''
'';
};
}

View file

@ -1,196 +1,81 @@
{ pkgs, config, inputs, ... }:
{ pkgs, config, repoFlake, ... }:
let
rogScript = pkgs.writeShellScript "waybar-rog.sh" ''
set -euo pipefail
val="$(${pkgs.asusctl}/bin/asusctl profile -p)"
if [[ "''${val}" == *"Performance"* ]]; then
echo $'{"text": "rog prf"}';
elif [[ "''${val}" == *"Balanced"* ]]; then
echo $'{"text": "rog bal"}';
elif [[ "''${val}" == *"Quiet"* ]]; then
echo $'{"text": "rog qui"}';
fi
'';
pppScript = pkgs.writeShellScript "waybar-ppp.sh" ''
set -euo pipefail
val="$(${pkgs.power-profiles-daemon}/bin/powerprofilesctl get)"
if [[ "''${val}" == "performance" ]]; then
echo $'{"text": "ppp prf"}';
elif [[ "''${val}" == "balanced" ]]; then
echo $'{"text": "ppp bal"}';
elif [[ "''${val}" == "power-saver" ]]; then
echo $'{"text": "ppp pwr"}';
fi
'';
extraModules = if config.networking.hostName != "zeph" then { } else {
"custom/rog" = {
exec = "${rogScript}";
return-type = "json";
interval = 10;
};
"custom/ppp" = {
exec = "${pppScript}";
return-type = "json";
interval = 10;
};
};
# # jobpath = "/run/user/1000/srht/jobs";
# # jobs = {
# # "niche" = "niche";
# # "n-w" = "nixpkgs-wayland";
# # "f-f-n" = "flake-firefox-nightly";
# # };
# # suffix = pkgs.lib.mapAttrsToList (k: v: ''
# # status="$("${pkgs.jq}/bin/jq" -r '[.results[] | select(.tags=="${v}" and .status!="running" and .status!="cancelled")][0] | .status' "${jobpath}/data")"
# # echo "{\"text\":\"''${status}\", \"class\":\"srht-''${status}\"}" > "${jobpath}/${v}-json"
# # '') jobs;
# # jobsScript = pkgs.writeShellScriptBin "jobs.sh" (pkgs.lib.concatStrings (
# # [''
# # TOKEN=$(cat ${config.sops.secrets."srht-pat".path})
# # BUILD_HOST="https://builds.sr.ht"
# # "${pkgs.coreutils}/bin/mkdir" -p "${jobpath}"
# # "${pkgs.curl}/bin/curl" \
# # -H "Authorization:token ''${TOKEN}" \
# # -H "Content-Type: application/json" -X GET \
# # "''${BUILD_HOST}/api/jobs" > "${jobpath}/data"
# # ''] ++ suffix ));
# networktoggle = pkgs.writeShellScriptBin "networktoggle.sh" ''
# if ip link | grep wlan; then
# sudo ${pkgs.util-linux}/bin/rfkill toggle wlan
# sudo ${pkgs.systemd}/bin/networkctl reconfigure wlan0
# ${pkgs.libnotify}/bin/notify-send "toggled wlan0"
# else
# ${pkgs.libnotify}/bin/notify-send "no wlan to toggle"
# fi
# '';
in
{
config = {
# sops.secrets."srht-pat" = {
# owner = "cole";
# group = "cole";
# };
programs.waybar = {
enable = true;
package = repoFlake.inputs.nixpkgs-wayland.outputs.packages.${pkgs.stdenv.hostPlatform.system}.waybar;
# style = pkgs.lib.readFile ./waybar.css;
systemd.enable = true;
settings = {
mainBar = {
layer = "top";
position = "bottom";
height = 30;
output = ["*"];
# output = [
# "eDP-1"
# "DP-*"
# ];
home-manager.users.cole = { pkgs, ... }: {
# systemd.user.services."srht-jobs-status" = {
# Unit.Description = "check srht-jobs status";
# Service = {
# Type = "oneshot";
# ExecStart = "${jobsScript}/bin/jobs.sh";
# };
# };
# systemd.user.timers."srht-jobs-status" = {
# Unit.Description = "check srht jobs status";
# Timer = { OnBootSec = "1m"; OnUnitInactiveSec = "1m"; Unit = "srht-jobs-status.service"; };
# Install.WantedBy = [ "default.target" ];
# # {
# # wantedBy = [ "timers.target" ];
# # partOf = [ "srht-${repo}.service" ];
# # timerConfig.OnCalendar = "hourly";
# # }
# };
home.packages = [ pkgs.libappindicator-gtk3 ];
programs.waybar = {
enable = true;
package = inputs.nixpkgs-wayland.outputs.packages.${pkgs.stdenv.hostPlatform.system}.waybar;
style = pkgs.lib.readFile ./waybar.css;
systemd.enable = true;
settings = [{
# ipc = true;
layer = "top";
# position = "top";
modules-left = [
"sway/mode"
"sway/workspaces"
];
modules-center = [
"wlr/workspaces"
];
modules-right = [
# "keyboard-state"
# "idle_inhibitor"
"pulseaudio"
"backlight"
"tray"
]
++ (builtins.attrNames extraModules)
++ [
"cpu"
"memory"
"network"
"temperature"
"battery"
"clock"
"clock#date"
];
modules-left = [
"sway/workspaces"
"sway/mode"
# "wlr/taskbar"
];
modules = ({
"sway/workspaces" = {
all-outputs = true;
disable-scroll-wraparound = true;
#enable-bar-scroll = true;
};
"sway/mode" = { tooltip = false; };
"sway/workspaces" = {
disable-scroll = true;
all-outputs = false;
};
modules-center = [
"sway/window"
# "custom/hello-from-waybar"
];
# # TODO:
# keyboard-state = {
# "numlock" = true;
# "capslock" = true;
# "format" = "{name} {icon}";
# "format-icons" = {
# "locked" = "+";
# "unlocked" = "-";
# };
# };
"wlr/taskbar" = { };
temperature = {
format = "tmp {temperatureC}";
};
idle_inhibitor = {
format = "iil {icon}";
format-icons = {
activated = "[x]";
deactivated = "[ ]";
};
};
pulseaudio = {
format = "vol {volume}";
on-click-middle = "${pkgs.sway}/bin/swaymsg exec \"${pkgs.pavucontrol}/bin/pavucontrol\"";
};
network = {
format-wifi = "net {signalStrength}";
format-ethernet = "eth";
};
cpu.interval = 2;
cpu.format = "cpu {usage}";
memory.format = "mem {}";
backlight = {
format = "nit {percent}";
on-scroll-up = "${pkgs.brightnessctl}/bin/brightnessctl set 2%+";
on-scroll-down = "${pkgs.brightnessctl}/bin/brightnessctl set 2%-";
};
tray.spacing = 10;
# battery
clock = {
format = "{:%d %b %Y}";
};
"clock#date" = {
format = "{:%H:%M %p}";
};
battery = {
format = "bat {}";
states = {
warning = 25;
critical = 15;
};
};
} // extraModules);
}];
modules-right = [
"tray"
"cpu"
"memory"
"temperature"
"custom/fan"
"battery"
"pulseaudio"
"clock"
"clock#date"
];
tray.spacing = 10;
cpu.format = " {}%";
memory.format = " {}%";
"temperature" = {
hwmon-path = "/sys/class/hwmon/hwmon3/temp1_input";
format = " {temperatureC} °C";
};
"custom/fan" = {
format = " {} rpm ";
exec = "${pkgs.lm_sensors}/bin/sensors | ${pkgs.gawk}/bin/awk '/fan1:/ {print $2}'";
interval = 5;
};
battery.format = "🔋 {}%";
pulseaudio = {
format = "🔉 {volume}%";
# on-click-middle = ''${pkgs.sway}/bin/swaymsg exec "${pkgs.pavucontrol}/bin/pavucontrol"'';
};
"clock#date".format = "{:%d %b %Y}";
clock.format = "{:%H:%M %p}";
# "custom/hello-from-waybar" = {
# format = "hello {}";
# max-length = 40;
# interval = "once";
# exec = pkgs.writeShellScript "hello-from-waybar" ''
# echo "from within waybar"
# '';
# };
};
};
};

View file

@ -74,7 +74,7 @@ in {
# don't cd into directories when executed
unsetopt AUTO_CD
export NIX_PATH="${pkgs.path}"
export NIX_PATH="nixpkgs=${pkgs.path}"
# print lines without termination
setopt PROMPT_CR

View file

@ -23,7 +23,7 @@
pip
virtualenv
cffi
pyopenssl
# pyopenssl
urllib3
# mistune (insecure)
sympy

View file

@ -9,6 +9,6 @@ let
imports = lib.mapAttrsToList toImport (lib.filterAttrs filterCaches (builtins.readDir folder));
in {
inherit imports;
nix.binaryCaches = ["https://cache.nixos.org/"];
nix.settings.substituters = ["https://cache.nixos.org/"];
}

View file

@ -1,12 +1,12 @@
{
nix = {
binaryCaches = [
settings.substituters = [
"https://nixpkgs-wayland.cachix.org"
];
binaryCachePublicKeys = [
settings.trusted-public-keys = [
"nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
];
};
}

View file

@ -2,6 +2,7 @@
imports = [
../../profiles/common/configuration.nix
../../profiles/graphical/configuration.nix
../../profiles/graphical-gnome-xorg.nix
../../modules/opinionatedDisk.nix
./system.nix

View file

@ -2,6 +2,7 @@
imports = [
../../profiles/common/configuration.nix
../../profiles/graphical/configuration.nix
../../profiles/graphical-gnome-xorg.nix
./system.nix
./hw.nix

View file

@ -10,6 +10,5 @@
home-manager.users.steveej = import ../../../home-manager/configuration/graphical-fullblown.nix {
inherit pkgs;
};
services.teamviewer.enable = true;
system.stateVersion = "20.09";
}

View file

@ -3,6 +3,7 @@
../../profiles/common/configuration.nix
../../profiles/graphical/configuration.nix
../../modules/opinionatedDisk.nix
../../cachix.nix
./system.nix
./hw.nix

View file

@ -5,18 +5,25 @@
nodeFlake = repoFlake.inputs.get-flake ./.;
in {
meta.nodeSpecialArgs.${nodeName} = {
inherit nodeName nodeFlake;
inherit repoFlake nodeName nodeFlake;
packages' = repoFlake.packages.${system};
};
meta.nodeNixpkgs.${nodeName} = import nodeFlake.inputs.nixpkgs.outPath {
inherit system;
overlays = [
(final: prev: {
# FIXME: why are these not effective in for the configuration.nix below?
xdg-desktop-portal-wlr' = repoFlake.inputs.nixpkgs-wayland.packages.${system}.xdg-desktop-portal-wlr;
xdg-desktop-portal-wlr-gtk' = repoFlake.inputs.nixpkgs-wayland.packages.${system}.xdg-desktop-portal-wlr-gtk;
})
];
};
${nodeName} = {
deployment.targetHost = nodeName;
deployment.replaceUnknownProfiles = false;
# deployment.allowLocalDeployment = true;
deployment.allowLocalDeployment = true;
imports = [
(repoFlake + "/nix/os/devices/${nodeName}/configuration.nix")

View file

@ -37,13 +37,29 @@
"type": "github"
}
},
"nixpkgs-master": {
"nixpkgs-2211": {
"locked": {
"lastModified": 1684756366,
"narHash": "sha256-aua/NybNHOJdZ0whu2qRfFOFqgjVUZ65D4xg3i3nZS0=",
"lastModified": 1684580438,
"narHash": "sha256-LUPswmDn6fXP3lEBJFA2Id8PkcYDgzUilevWackYVvQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "e8d32cbe6678eb66f8def22cce43422c4b64957f",
"rev": "7dc71aef32e8faf065cb171700792cf8a65c152d",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-22.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-master": {
"locked": {
"lastModified": 1684758073,
"narHash": "sha256-LFm53sqiZoWRMNPjIDhqJvXgCcdsmMw7rbSZFhLRuJw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "f491fc656a0b48c40e0312d559380d4ad46c4447",
"type": "github"
},
"original": {
@ -73,6 +89,7 @@
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs",
"nixpkgs-2211": "nixpkgs-2211",
"nixpkgs-master": "nixpkgs-master",
"nixpkgs-unstable": "nixpkgs-unstable"
}

View file

@ -1,4 +1,5 @@
{
inputs.nixpkgs-2211.url = "github:nixos/nixpkgs/nixos-22.11";
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
inputs.nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable-small";
inputs.nixpkgs-master.url = "github:nixos/nixpkgs/master";

View file

@ -1,4 +1,4 @@
{pkgs, lib, ...}: {
{pkgs, lib, repoFlake, nodeFlake, ...}: {
home-manager.users.steveej = _: {
imports = [
../../../home-manager/configuration/graphical-fullblown.nix
@ -11,89 +11,122 @@
];
};
# TODO: delegate graphical session to home-manager config (mostly)
# FIXME: move this to home-manager entirely
# programs.sway.enable = true;
# programs.sway.package = null;
services.xserver = {
enable = lib.mkForce false;
desktopManager = {
gnome.enable = lib.mkForce false;
xterm.enable = lib.mkForce false;
# FIXME: gnome should be moved to user session
# gnome.enable = true;
# xterm.enable = true;
};
displayManager = {
# gdm.enable = lib.mkForce false;
# FIXME: does the home-manager session have an explicit name?
# defaultSession = "xterm";
# autoLogin = {
# enable = true;
# user = "steveej";
# };
# session = [
# {
# manage = "desktop";
# name = "xsession";
# start = "";
# }
# ];
};
};
services.greetd =
let
# exec "${pkgs.greetd.gtkgreet}/bin/gtkgreet -l; swaymsg exit"
swayConfig = pkgs.writeText "greetd-sway-config" ''
# `-l` activates layer-shell mode. Notice that `swaymsg exit` will run after gtkgreet.
exec "dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK; ${pkgs.greetd.regreet}/bin/regreet; swaymsg exit"
bindsym Mod4+shift+e exec swaynag \
-t warning \
-m 'What do you want to do?' \
-b 'Poweroff' 'systemctl poweroff' \
-b 'Reboot' 'systemctl reboot'
'';
in {
enable = true;
settings = {
vt = 1;
default_session = {
command = "${pkgs.sway}/bin/sway --config ${swayConfig}";
# TODO: fix the following errors with regreet
#
# Failed to create /var/empty/.cache for shader cache (Operation not permitted)---disabling.
# amdgpu: amdgpu_cs_ctx_create2 failed. (-13)
# Failed to create /var/empty/.cache for shader cache (Operation not permitted)---disabling.
# ERROR: Couldn't create log file '/var/log/regreet/log': Permission denied (os error 13)
# 2023-05-22T10:31:42.52900769+02:00 WARN regreet::tomlutils: Missing TOML file: /var/cache/regreet/cache.toml
# 2023-05-22T10:31:42.52902325+02:00 WARN regreet::tomlutils: Missing TOML file: /etc/greetd/regreet.toml
#
# (regreet:505614): Gtk-WARNING **: 10:31:42.532: Theme parser warning: <data>:6:17-18: Empty declaration
# Failed to create /var/empty/.cache for shader cache (Operation not permitted)---disabling.
services.greetd =
let
# exec "${pkgs.greetd.gtkgreet}/bin/gtkgreet -l; swaymsg exit"
swayConfig = pkgs.writeText "greetd-sway-config" ''
# `-l` activates layer-shell mode. Notice that `swaymsg exit` will run after gtkgreet.
exec "dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK; ${pkgs.greetd.regreet}/bin/regreet; swaymsg exit"
bindsym Mod4+shift+e exec swaynag \
-t warning \
-m 'What do you want to do?' \
-b 'Poweroff' 'systemctl poweroff' \
-b 'Reboot' 'systemctl reboot'
'';
in {
enable = false;
settings = {
vt = 1;
default_session = {
command = "${pkgs.sway}/bin/sway --config ${swayConfig}";
};
};
};
};
environment.etc."greetd/environments".text = ''
sway
jay
'';
# fonts = let
# prefs.font = rec {
# size = 13;
# default = sans;
# sans = { family = "Noto Sans"; package = pkgs.noto-fonts; };
# serif = { family = "Noto Serif"; package = pkgs.noto-fonts; };
# # monospace = { family = "Iosevka Fixed"; package = pkgs.iosevka-bin; };
# monospace = { family = "Iosevka Comfy Fixed"; package = pkgs.iosevka-comfy.comfy-fixed; };
# # monospace = { family = "Go Mono"; package = pkgs.go-font; };
# # monospace = { family = "Jetbrains Mono"; package = pkgs.jetbrains-mono; };
# fallback = { family = "Font Awesome 5 Free"; package = pkgs.font-awesome; };
# emoji = { family = "Noto Color Emoji"; package = pkgs.noto-fonts-emoji; };
#
# allPackages = (map (p: p.package)
# [
# default
# sans
# serif
# monospace
# fallback
# emoji
# ]) ++
# (with pkgs; [
# liberation_ttf # free corefonts-metric-compatible replacement
# ttf_bitstream_vera
# gelasio # metric-compatible with Georgia
# powerline-symbols
# ]);
# };
# in {
# # fonts = prefs.font.allPackages;
# # fontconfig = {
# # enable = true;
# # defaultFonts = {
# # serif = [ prefs.font.serif.family ];
# # sansSerif = [ prefs.font.sans.family ];
# # monospace = [ prefs.font.monospace.family ];
# # emoji = [ prefs.font.emoji.family ];
# # };
# # };
# };
security.pam.services.getty.enableGnomeKeyring = true;
services.gnome.gnome-keyring.enable = true;
# rtkit is optional but recommended
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# If you want to use JACK applications, uncomment this
#jack.enable = true;
};
# required by swaywm
security.polkit.enable = true;
security.pam.services.swaylock = { };
services.teamviewer.enable = false;
system.stateVersion = "20.09";
# test these on https://mozilla.github.io/webrtc-landing/gum_test.html
xdg.portal = {
enable = true;
# FIXME: `true` breaks xdg-open from alacritty:
# $ xdg-open "https://github.com/"
# Error: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.OpenURI” on object at path /org/freedesktop/portal/desktop
xdgOpenUsePortal = false;
extraPortals = [
pkgs.xdg-desktop-portal-wlr
pkgs.xdg-desktop-portal-gtk
# repoFlake.inputs.nixpkgs-wayland.packages.${pkgs.system}.xdg-desktop-portal-wlr
# (pkgs.xdg-desktop-portal-gtk.override (_: {
# buildPortalsInGnome = false;
# }))
];
};
# TODO: move this into home-manager
environment.systemPackages = with pkgs.gnomeExtensions; [
pop-shell
vitals
soft-brightness
# TODO: currently not compatible
# window-switcher-current-workspace-first
# mmod-panel
];
system.stateVersion = "23.05";
}

View file

@ -7,19 +7,19 @@
}: let
passwords = import ../../../variables/passwords.crypt.nix;
in {
nix = {
binaryCaches = [
nix.settings = {
substituters = [
"https://holochain-ci.cachix.org"
# "https://cache.holo.host/"
];
binaryCachePublicKeys = [
trusted-public-keys = [
"holochain-ci.cachix.org-1:5IUSkZc0aoRS53rfkvH9Kid40NpyjwCMCzwRTXy+QN8="
# "cache.holo.host-1:lNXIXtJgS9Iuw4Cu6X0HINLu9sTfcjEntnrgwMQIMcE="
# "cache.holo.host-2:ZJCkX3AUYZ8soxTLfTb60g+F3MkWD7hkH9y8CgqwhDQ="
];
settings.extra-experimental-features = ["impure-derivations"];
settings.system-features = ["recursive-nix"];
extra-experimental-features = ["impure-derivations"];
system-features = ["recursive-nix"];
};
networking.bridges."virbr1".interfaces = [];

View file

@ -1,7 +1,7 @@
{
flake,
pkgs,
# these come in via nodeSpecialArgs and are expected to be defined for every node
repoFlake,
nodeFlake,
packages',
...
@ -19,6 +19,7 @@
# hence, opt for passing the arguments selectively instead
home-manager.extraSpecialArgs = {
inherit
repoFlake
packages'
nodeFlake
;

View file

@ -0,0 +1,106 @@
{
pkgs,
lib,
...
}: {
services.xserver = {
enable = true;
libinput.enable = true;
libinput.touchpad.naturalScrolling = true;
videoDrivers = [
"qxl"
"modesetting"
"ati"
"cirrus"
"intel"
"vesa"
"vmware"
"modesetting"
];
layout = "us";
xkbVariant = "altgr-intl";
xkbOptions = "nodeadkeys";
desktopManager = {
# FIXME: gnome should be moved to user session
gnome.enable = true;
xterm.enable = true;
plasma5.enable = false;
};
displayManager = {
gdm.enable = true;
gdm.wayland = true;
};
};
# gnome, most of it is disabled and ideally it could live entirely in the user's home config
programs.gpaste.enable = false;
programs.gnome-terminal.enable = false;
# programs.gnome-documents.enable = false;
programs.gnome-disks.enable = false;
# TODO: fully delegate graphical session to home-manager config
services.gnome = {
gnome-online-miners.enable = lib.mkForce false;
games.enable = false;
gnome-remote-desktop.enable = false;
gnome-user-share.enable = false;
rygel.enable = false;
sushi.enable = false;
tracker.enable = false;
tracker-miners.enable = false;
gnome-browser-connector.enable = false;
gnome-initial-setup.enable = false;
# FIXME: gnome should be moved to home config
gnome-settings-daemon.enable = true;
core-os-services.enable = true;
at-spi2-core.enable = true;
evolution-data-server.enable = true;
gnome-online-accounts.enable = true;
gnome-keyring.enable = lib.mkForce false;
};
# FIXME: gnome should be moved to user session
services.gvfs.enable = true;
programs.seahorse.enable = true;
programs.dconf.enable = true;
environment.gnome.excludePackages =
(with pkgs; [
orca
gnome-photos
gnome-tour
])
++ (with pkgs.gnome; [
cheese # webcam tool
gnome-music
gnome-terminal
gedit # text editor
epiphany # web browser
geary # email reader
evince # document viewer
gnome-characters
totem # video player
tali # poker game
iagno # go game
hitori # sudoku game
atomix # puzzle game
]);
hardware.pulseaudio = {
enable = true;
package = pkgs.pulseaudioFull;
support32Bit = true;
};
services.dbus.packages = with pkgs; [dconf];
# More Services
environment.systemPackages = [pkgs.gnome.adwaita-icon-theme pkgs.gnomeExtensions.appindicator];
}

View file

@ -18,111 +18,16 @@
services.resolved.enable = true;
# hardware related services
services.illum.enable = true;
services.pcscd.enable = false;
hardware = {
bluetooth.enable = true;
pulseaudio = {
enable = true;
package = pkgs.pulseaudioFull;
support32Bit = true;
};
};
hardware.opengl.enable = true;
hardware.bluetooth.enable = true;
# required for running blueman-applet in user sessions
services.dbus.packages = with pkgs; [blueman dconf];
services.dbus.packages = with pkgs; [blueman];
services.blueman.enable = true;
services.xserver = {
enable = true;
libinput.enable = true;
libinput.touchpad.naturalScrolling = true;
videoDrivers = [
"qxl"
"modesetting"
"ati"
"cirrus"
"intel"
"vesa"
"vmware"
"modesetting"
];
layout = "us";
xkbVariant = "altgr-intl";
xkbOptions = "nodeadkeys";
desktopManager = {
# FIXME: gnome should be moved to user session
gnome.enable = true;
xterm.enable = true;
plasma5.enable = false;
};
displayManager = {
gdm.enable = true;
gdm.wayland = true;
};
};
# gnome, most of it is disabled and ideally it could live entirely in the user's home config
programs.gpaste.enable = false;
programs.gnome-terminal.enable = false;
# programs.gnome-documents.enable = false;
programs.gnome-disks.enable = false;
services.gnome = {
gnome-online-miners.enable = lib.mkForce false;
games.enable = false;
gnome-remote-desktop.enable = false;
gnome-user-share.enable = false;
rygel.enable = false;
sushi.enable = false;
tracker.enable = false;
tracker-miners.enable = false;
gnome-browser-connector.enable = false;
gnome-initial-setup.enable = false;
# FIXME: gnome should be moved to home config
gnome-settings-daemon.enable = true;
core-os-services.enable = true;
at-spi2-core.enable = true;
evolution-data-server.enable = true;
gnome-online-accounts.enable = true;
gnome-keyring.enable = lib.mkForce false;
};
# FIXME: gnome should be moved to user session
services.gvfs.enable = true;
programs.seahorse.enable = true;
programs.dconf.enable = true;
environment.gnome.excludePackages =
(with pkgs; [
orca
gnome-photos
gnome-tour
])
++ (with pkgs.gnome; [
cheese # webcam tool
gnome-music
gnome-terminal
gedit # text editor
epiphany # web browser
geary # email reader
evince # document viewer
gnome-characters
totem # video player
tali # poker game
iagno # go game
hitori # sudoku game
atomix # puzzle game
]);
# More Services
environment.systemPackages = [pkgs.gnome.adwaita-icon-theme pkgs.gnomeExtensions.appindicator];
services.udev.packages = [pkgs.libu2f-host pkgs.yubikey-personalization pkgs.android-udev-rules];
services.udev.extraRules = ''
# OnePlusOne