mirror of
https://github.com/moons-14/dotfiles.git
synced 2026-10-06 07:48:12 +09:00
systemd
This commit is contained in:
@@ -1,6 +1,44 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
osConfig,
|
||||
...
|
||||
}:
|
||||
let
|
||||
mkSessionService = target: {
|
||||
Unit = {
|
||||
Description = "Fcitx 5 input method";
|
||||
Documentation = [ "https://fcitx-im.org/" ];
|
||||
PartOf = [ target ];
|
||||
After = [ target ];
|
||||
};
|
||||
|
||||
Service = {
|
||||
ExecStart = "${osConfig.i18n.inputMethod.package}/bin/fcitx5 --replace";
|
||||
Restart = "on-failure";
|
||||
};
|
||||
|
||||
Install.WantedBy = [ target ];
|
||||
};
|
||||
in
|
||||
{
|
||||
home.file.".config/fcitx5/config" = {
|
||||
recursive = true;
|
||||
source = ./config;
|
||||
};
|
||||
|
||||
# niri starts XDG autostart entries through systemd. The explicit service
|
||||
# below is shared with labwc, so suppress the package-provided entry.
|
||||
xdg.configFile."autostart/org.fcitx.Fcitx5.desktop".text = ''
|
||||
[Desktop Entry]
|
||||
Hidden=true
|
||||
'';
|
||||
|
||||
systemd.user.services =
|
||||
lib.optionalAttrs config.my.applications.niri.enable {
|
||||
fcitx5-niri = mkSessionService "niri.service";
|
||||
}
|
||||
// lib.optionalAttrs config.my.applications.labwc.enable {
|
||||
fcitx5-labwc = mkSessionService "labwc-session.target";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,24 +1,157 @@
|
||||
{ lib, pkgs, ... }:
|
||||
let
|
||||
action = key: name: {
|
||||
"@key" = key;
|
||||
action = {
|
||||
"@name" = name;
|
||||
};
|
||||
};
|
||||
|
||||
execute = key: command: {
|
||||
"@key" = key;
|
||||
action = {
|
||||
"@name" = "Execute";
|
||||
"@command" = command;
|
||||
};
|
||||
};
|
||||
|
||||
desktopKeybinds = lib.concatMap (
|
||||
desktop:
|
||||
let
|
||||
number = toString desktop;
|
||||
in
|
||||
[
|
||||
{
|
||||
"@key" = "W-${number}";
|
||||
action = {
|
||||
"@name" = "GoToDesktop";
|
||||
"@to" = number;
|
||||
};
|
||||
}
|
||||
{
|
||||
"@key" = "W-C-${number}";
|
||||
action = {
|
||||
"@name" = "SendToDesktop";
|
||||
"@to" = number;
|
||||
};
|
||||
}
|
||||
]
|
||||
) (lib.range 1 9);
|
||||
in
|
||||
{
|
||||
xdg.configFile = {
|
||||
"labwc/rc.xml".source = ./rc.xml;
|
||||
wayland.windowManager.labwc = {
|
||||
enable = true;
|
||||
# NixOS owns the package so Home Manager only generates the user config.
|
||||
package = null;
|
||||
|
||||
"labwc/environment".text = ''
|
||||
XKB_DEFAULT_LAYOUT=jp
|
||||
XKB_DEFAULT_OPTIONS=ctrl:nocaps
|
||||
'';
|
||||
rc = {
|
||||
core = {
|
||||
decoration = "client";
|
||||
gap = 10;
|
||||
autoEnableOutputs = "yes";
|
||||
reuseOutputMode = "yes";
|
||||
};
|
||||
|
||||
"labwc/autostart".text = ''
|
||||
# Pull in graphical-session.target so Home Manager services such as
|
||||
# portals, Vicinae, and the idle manager follow the labwc session.
|
||||
${lib.getExe' pkgs.systemd "systemctl"} --user --no-block start labwc-session.target
|
||||
theme = {
|
||||
name = "Dracula";
|
||||
cornerRadius = 8;
|
||||
dropShadows = "yes";
|
||||
dropShadowsOnTiled = "yes";
|
||||
};
|
||||
|
||||
# labwc does not run XDG autostart entries itself. Start the input method
|
||||
# explicitly so both native Wayland and XWayland applications can use it.
|
||||
fcitx5 -d --replace >/dev/null 2>&1 &
|
||||
windowSwitcher = {
|
||||
"@preview" = "yes";
|
||||
"@outlines" = "yes";
|
||||
osd = {
|
||||
"@style" = "thumbnail";
|
||||
};
|
||||
};
|
||||
|
||||
NOCTALIA_CONFIG_HOME="$HOME/.config/noctalia-labwc" noctalia >/dev/null 2>&1 &
|
||||
${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1 >/dev/null 2>&1 &
|
||||
'';
|
||||
focus = {
|
||||
followMouse = "yes";
|
||||
followMouseRequiresMovement = "yes";
|
||||
raiseOnFocus = "no";
|
||||
};
|
||||
|
||||
desktops = {
|
||||
"@number" = 9;
|
||||
"@popupTime" = 500;
|
||||
"@prefix" = "Workspace";
|
||||
};
|
||||
|
||||
keyboard = {
|
||||
default = true;
|
||||
numlock = "on";
|
||||
keybind = [
|
||||
(action "W-q" "Close")
|
||||
(action "W-f" "ToggleMaximize")
|
||||
(action "W-Tab" "NextWindow")
|
||||
(action "W-S-Tab" "PreviousWindow")
|
||||
(action "W-j" "NextWindow")
|
||||
(action "W-k" "PreviousWindow")
|
||||
{
|
||||
"@key" = "W-a";
|
||||
action = {
|
||||
"@name" = "ShowMenu";
|
||||
"@menu" = "client-list-combined-menu";
|
||||
};
|
||||
position = {
|
||||
x = "center";
|
||||
y = "center";
|
||||
};
|
||||
}
|
||||
(execute "W-t" "ghostty")
|
||||
(execute "W-d" "vicinae toggle")
|
||||
(execute "W-e" "nautilus --new-window")
|
||||
(execute "W-l" "loginctl lock-session")
|
||||
(execute "W-v" "vicinae vicinae://launch/clipboard/history?toggle=true")
|
||||
(execute "W-space" "ghostty +toggle-quick-terminal")
|
||||
(execute "W-p" "wdisplays")
|
||||
(execute "W-s" "noctalia msg panel-toggle control-center")
|
||||
(execute "W-comma" "noctalia msg settings-toggle")
|
||||
(action "W-S-e" "Exit")
|
||||
]
|
||||
++ desktopKeybinds
|
||||
++ [
|
||||
(execute "XF86AudioRaiseVolume" "noctalia msg volume-up")
|
||||
(execute "XF86AudioLowerVolume" "noctalia msg volume-down")
|
||||
(execute "XF86AudioMute" "noctalia msg volume-mute")
|
||||
(execute "XF86AudioMicMute" "noctalia msg mic-mute")
|
||||
(execute "XF86MonBrightnessUp" "noctalia msg brightness-up")
|
||||
(execute "XF86MonBrightnessDown" "noctalia msg brightness-down")
|
||||
];
|
||||
};
|
||||
|
||||
mouse.default = true;
|
||||
|
||||
libinput.device = [
|
||||
{
|
||||
"@category" = "touchpad";
|
||||
naturalScroll = "yes";
|
||||
tap = "yes";
|
||||
tapAndDrag = "yes";
|
||||
dragLock = "yes";
|
||||
clickMethod = "clickfinger";
|
||||
scrollMethod = "twoFinger";
|
||||
scrollFactor = "4.0";
|
||||
}
|
||||
{
|
||||
"@category" = "non-touch";
|
||||
pointerSpeed = "-0.1";
|
||||
accelProfile = "flat";
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
environment = [
|
||||
"XKB_DEFAULT_LAYOUT=jp"
|
||||
"XKB_DEFAULT_OPTIONS=ctrl:nocaps"
|
||||
];
|
||||
|
||||
# Pull in graphical-session.target so Home Manager services such as
|
||||
# portals, Vicinae, and the idle manager follow the labwc session.
|
||||
systemd.extraCommands = [
|
||||
"${lib.getExe' pkgs.systemd "systemctl"} --user --no-block start labwc-session.target"
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,147 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<labwc_config>
|
||||
<core>
|
||||
<decoration>server</decoration>
|
||||
<gap>10</gap>
|
||||
<autoEnableOutputs>yes</autoEnableOutputs>
|
||||
<reuseOutputMode>yes</reuseOutputMode>
|
||||
</core>
|
||||
|
||||
<theme>
|
||||
<name>Dracula</name>
|
||||
<cornerRadius>8</cornerRadius>
|
||||
<dropShadows>yes</dropShadows>
|
||||
<dropShadowsOnTiled>yes</dropShadowsOnTiled>
|
||||
</theme>
|
||||
|
||||
<windowSwitcher preview="yes" outlines="yes">
|
||||
<osd style="thumbnail" />
|
||||
</windowSwitcher>
|
||||
|
||||
<focus>
|
||||
<followMouse>yes</followMouse>
|
||||
<followMouseRequiresMovement>yes</followMouseRequiresMovement>
|
||||
<raiseOnFocus>no</raiseOnFocus>
|
||||
</focus>
|
||||
|
||||
<desktops number="9" popupTime="500" prefix="Workspace" />
|
||||
|
||||
<keyboard>
|
||||
<default />
|
||||
|
||||
<keybind key="W-q">
|
||||
<action name="Close" />
|
||||
</keybind>
|
||||
<keybind key="W-f">
|
||||
<action name="ToggleMaximize" />
|
||||
</keybind>
|
||||
<keybind key="W-Tab">
|
||||
<action name="NextWindow" />
|
||||
</keybind>
|
||||
<keybind key="W-S-Tab">
|
||||
<action name="PreviousWindow" />
|
||||
</keybind>
|
||||
<keybind key="W-j">
|
||||
<action name="NextWindow" />
|
||||
</keybind>
|
||||
<keybind key="W-k">
|
||||
<action name="PreviousWindow" />
|
||||
</keybind>
|
||||
<keybind key="W-a">
|
||||
<action name="ShowMenu" menu="client-list-combined-menu" />
|
||||
<position>
|
||||
<x>center</x>
|
||||
<y>center</y>
|
||||
</position>
|
||||
</keybind>
|
||||
<keybind key="W-t">
|
||||
<action name="Execute" command="ghostty" />
|
||||
</keybind>
|
||||
<keybind key="W-d">
|
||||
<action name="Execute" command="vicinae toggle" />
|
||||
</keybind>
|
||||
<keybind key="W-e">
|
||||
<action name="Execute" command="nautilus --new-window" />
|
||||
</keybind>
|
||||
<keybind key="W-l">
|
||||
<action name="Execute" command="loginctl lock-session" />
|
||||
</keybind>
|
||||
<keybind key="W-v">
|
||||
<action name="Execute" command="vicinae vicinae://launch/clipboard/history?toggle=true" />
|
||||
</keybind>
|
||||
<keybind key="W-space">
|
||||
<action name="Execute" command="ghostty +toggle-quick-terminal" />
|
||||
</keybind>
|
||||
<keybind key="W-p">
|
||||
<action name="Execute" command="wdisplays" />
|
||||
</keybind>
|
||||
<keybind key="W-s">
|
||||
<action name="Execute" command="noctalia msg panel-toggle control-center" />
|
||||
</keybind>
|
||||
<keybind key="W-comma">
|
||||
<action name="Execute" command="noctalia msg settings-toggle" />
|
||||
</keybind>
|
||||
<keybind key="W-S-e">
|
||||
<action name="Exit" />
|
||||
</keybind>
|
||||
|
||||
<keybind key="W-1"><action name="GoToDesktop" to="1" /></keybind>
|
||||
<keybind key="W-2"><action name="GoToDesktop" to="2" /></keybind>
|
||||
<keybind key="W-3"><action name="GoToDesktop" to="3" /></keybind>
|
||||
<keybind key="W-4"><action name="GoToDesktop" to="4" /></keybind>
|
||||
<keybind key="W-5"><action name="GoToDesktop" to="5" /></keybind>
|
||||
<keybind key="W-6"><action name="GoToDesktop" to="6" /></keybind>
|
||||
<keybind key="W-7"><action name="GoToDesktop" to="7" /></keybind>
|
||||
<keybind key="W-8"><action name="GoToDesktop" to="8" /></keybind>
|
||||
<keybind key="W-9"><action name="GoToDesktop" to="9" /></keybind>
|
||||
|
||||
<keybind key="W-C-1"><action name="SendToDesktop" to="1" /></keybind>
|
||||
<keybind key="W-C-2"><action name="SendToDesktop" to="2" /></keybind>
|
||||
<keybind key="W-C-3"><action name="SendToDesktop" to="3" /></keybind>
|
||||
<keybind key="W-C-4"><action name="SendToDesktop" to="4" /></keybind>
|
||||
<keybind key="W-C-5"><action name="SendToDesktop" to="5" /></keybind>
|
||||
<keybind key="W-C-6"><action name="SendToDesktop" to="6" /></keybind>
|
||||
<keybind key="W-C-7"><action name="SendToDesktop" to="7" /></keybind>
|
||||
<keybind key="W-C-8"><action name="SendToDesktop" to="8" /></keybind>
|
||||
<keybind key="W-C-9"><action name="SendToDesktop" to="9" /></keybind>
|
||||
|
||||
<keybind key="XF86AudioRaiseVolume">
|
||||
<action name="Execute" command="noctalia msg volume-up" />
|
||||
</keybind>
|
||||
<keybind key="XF86AudioLowerVolume">
|
||||
<action name="Execute" command="noctalia msg volume-down" />
|
||||
</keybind>
|
||||
<keybind key="XF86AudioMute">
|
||||
<action name="Execute" command="noctalia msg volume-mute" />
|
||||
</keybind>
|
||||
<keybind key="XF86AudioMicMute">
|
||||
<action name="Execute" command="noctalia msg mic-mute" />
|
||||
</keybind>
|
||||
<keybind key="XF86MonBrightnessUp">
|
||||
<action name="Execute" command="noctalia msg brightness-up" />
|
||||
</keybind>
|
||||
<keybind key="XF86MonBrightnessDown">
|
||||
<action name="Execute" command="noctalia msg brightness-down" />
|
||||
</keybind>
|
||||
</keyboard>
|
||||
|
||||
<mouse>
|
||||
<default />
|
||||
</mouse>
|
||||
|
||||
<libinput>
|
||||
<device category="touchpad">
|
||||
<naturalScroll>yes</naturalScroll>
|
||||
<tap>yes</tap>
|
||||
<tapAndDrag>yes</tapAndDrag>
|
||||
<dragLock>yes</dragLock>
|
||||
<clickMethod>clickfinger</clickMethod>
|
||||
<scrollMethod>twoFinger</scrollMethod>
|
||||
<scrollFactor>4.0</scrollFactor>
|
||||
</device>
|
||||
<device category="non-touch">
|
||||
<pointerSpeed>-0.1</pointerSpeed>
|
||||
<accelProfile>flat</accelProfile>
|
||||
</device>
|
||||
</libinput>
|
||||
</labwc_config>
|
||||
@@ -31,15 +31,6 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
spawn-at-startup = [
|
||||
{ command = [ "noctalia" ]; }
|
||||
{
|
||||
command = [
|
||||
"${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"
|
||||
];
|
||||
}
|
||||
];
|
||||
|
||||
cursor.size = 16;
|
||||
|
||||
layout = {
|
||||
|
||||
@@ -39,6 +39,25 @@ let
|
||||
${lib.getExe config.programs.noctalia.package} config validate ${labwcRawConfig}
|
||||
cp ${labwcRawConfig} $out
|
||||
'';
|
||||
|
||||
mkSessionService = target: environment: {
|
||||
Unit = {
|
||||
Description = "Noctalia Wayland desktop shell";
|
||||
Documentation = [ "https://docs.noctalia.dev/" ];
|
||||
PartOf = [ target ];
|
||||
After = [ target ];
|
||||
};
|
||||
|
||||
Service = {
|
||||
ExecStart = lib.getExe config.programs.noctalia.package;
|
||||
Restart = "on-failure";
|
||||
}
|
||||
// lib.optionalAttrs (environment != [ ]) {
|
||||
Environment = environment;
|
||||
};
|
||||
|
||||
Install.WantedBy = [ target ];
|
||||
};
|
||||
in
|
||||
{
|
||||
home.packages = [ pkgs.networkmanagerapplet ];
|
||||
@@ -54,8 +73,7 @@ in
|
||||
programs.noctalia = {
|
||||
enable = true;
|
||||
|
||||
# Both compositors start Noctalia themselves so labwc can select its own
|
||||
# config home without racing the generic graphical-session service.
|
||||
# Session-specific services below let labwc select its own config home.
|
||||
systemd.enable = false;
|
||||
|
||||
settings = {
|
||||
@@ -74,6 +92,11 @@ in
|
||||
fingerprint = false;
|
||||
};
|
||||
|
||||
osd.kinds = {
|
||||
keyboard_layout = false;
|
||||
media = false;
|
||||
};
|
||||
|
||||
bar.main = {
|
||||
margin_ends = 15;
|
||||
position = "top";
|
||||
@@ -214,5 +237,15 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user.services =
|
||||
lib.optionalAttrs config.my.applications.niri.enable {
|
||||
noctalia-niri = mkSessionService "niri.service" [ ];
|
||||
}
|
||||
// lib.optionalAttrs config.my.applications.labwc.enable {
|
||||
noctalia-labwc = mkSessionService "labwc-session.target" [
|
||||
"NOCTALIA_CONFIG_HOME=%h/.config/noctalia-labwc"
|
||||
];
|
||||
};
|
||||
|
||||
xdg.configFile."noctalia-labwc/noctalia/config.toml".source = labwcConfig;
|
||||
}
|
||||
|
||||
@@ -50,8 +50,10 @@ when removing it from any supported host would make that host invalid.
|
||||
Select independent concerns independently in `hosts/default.nix`. For example,
|
||||
a NixOS desktop can combine `interface.labwc` and `interface.niri` to provide
|
||||
both sessions while sharing `interface.linux-desktop` and `interface.gui`.
|
||||
The shared Linux desktop profile provides the common desktop applications; both
|
||||
session profiles select ly. A daily-use macOS development machine can combine `interface.macos`,
|
||||
The shared Linux desktop profile provides the common desktop applications and
|
||||
session-independent services; both session profiles select ly. The laptop
|
||||
platform selects niri as Ly's default session, while the desktop platform
|
||||
selects labwc. A daily-use macOS development machine can combine `interface.macos`,
|
||||
`workload.development`, and `workload.personal`. Hardware support does not
|
||||
implicitly select an interface or workload.
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
"applications.gtk"
|
||||
"applications.nautilus"
|
||||
"hardwares.graphics"
|
||||
"services.polkit-gnome"
|
||||
"systems.audio"
|
||||
"systems.fonts"
|
||||
];
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
mkSessionService = target: {
|
||||
Unit = {
|
||||
Description = "GNOME PolicyKit authentication agent";
|
||||
Documentation = [ "man:polkit(8)" ];
|
||||
PartOf = [ target ];
|
||||
After = [ target ];
|
||||
};
|
||||
|
||||
Service = {
|
||||
ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
|
||||
Restart = "on-failure";
|
||||
};
|
||||
|
||||
Install.WantedBy = [ target ];
|
||||
};
|
||||
in
|
||||
{
|
||||
systemd.user.services =
|
||||
lib.optionalAttrs config.my.applications.niri.enable {
|
||||
polkit-gnome-niri = mkSessionService "niri.service";
|
||||
}
|
||||
// lib.optionalAttrs config.my.applications.labwc.enable {
|
||||
polkit-gnome-labwc = mkSessionService "labwc-session.target";
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
security.polkit.enable = true;
|
||||
}
|
||||
Reference in New Issue
Block a user