forked from pub-solar/os
Merge branch 'main' into feature/ci-runner-onecommit
This commit is contained in:
commit
9c5bcc6a2f
|
@ -3,4 +3,4 @@ authors = ["Timothy DeHerrera"]
|
|||
language = "en"
|
||||
multilingual = false
|
||||
src = "."
|
||||
title = "devos docs"
|
||||
title = "PubSolarOS documentation"
|
||||
|
|
|
@ -9,30 +9,34 @@ in
|
|||
default = false;
|
||||
description = "Feature flag for iso builds";
|
||||
};
|
||||
|
||||
options.pub-solar.core.disk-encryption-active = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Whether it should be assumed that there is a cryptroot device";
|
||||
};
|
||||
|
||||
config = {
|
||||
boot = {
|
||||
# Enable plymouth for better experience of booting
|
||||
boot.plymouth.enable = true;
|
||||
plymouth.enable = true;
|
||||
|
||||
# Mount / luks device in initrd
|
||||
# Allow fstrim to work on it.
|
||||
# The ! makes this enabled by default
|
||||
boot.initrd = mkIf (!cfg.iso-options.enable && cfg.disk-encryption-active) {
|
||||
initrd = mkIf (!cfg.iso-options.enable && cfg.disk-encryption-active) {
|
||||
luks.devices."cryptroot" = {
|
||||
allowDiscards = true;
|
||||
};
|
||||
};
|
||||
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
loader.systemd-boot.enable = true;
|
||||
|
||||
# Use latest LTS linux kernel by default
|
||||
boot.kernelPackages = pkgs.linuxPackages_5_15;
|
||||
kernelPackages = pkgs.linuxPackages_5_15;
|
||||
|
||||
# Support ntfs drives
|
||||
boot.supportedFilesystems = [ "ntfs" ];
|
||||
supportedFilesystems = [ "ntfs" ];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ in
|
|||
{
|
||||
imports = [
|
||||
./boot.nix
|
||||
./hibernation.nix
|
||||
./fonts.nix
|
||||
./i18n.nix
|
||||
./networking.nix
|
||||
|
|
38
modules/core/hibernation.nix
Normal file
38
modules/core/hibernation.nix
Normal file
|
@ -0,0 +1,38 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.pub-solar.core.hibernation;
|
||||
in
|
||||
{
|
||||
options.pub-solar.core.hibernation = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Whether the device can hibernate. This creates a swapfile at /swapfile.";
|
||||
};
|
||||
|
||||
resumeDevice = mkOption {
|
||||
type = types.str;
|
||||
default = "/swapfile";
|
||||
description = "The location of the hibernation resume swap file.";
|
||||
};
|
||||
|
||||
resumeOffset = mkOption {
|
||||
type = types.nullOr types.int;
|
||||
default = null;
|
||||
description = "The swap file offset. Can be found by running `filefrag -v $swap_file_location`. See https://wiki.archlinux.org/title/Power_management/Suspend_and_hibernate#Hibernation_into_swap_file";
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
boot = mkIf cfg.enable {
|
||||
resumeDevice = cfg.resumeDevice;
|
||||
kernelParams = [
|
||||
"resume=${cfg.resumeDevice}"
|
||||
] ++ (
|
||||
if (cfg.resumeOffset == null && cfg.enable) then builtins.abort "config.pub-solar.resumeOffset has to be set if config.pub-solar.enable is true."
|
||||
else [ "resume_offset=${cfg.resumeOffset}" ]
|
||||
);
|
||||
};
|
||||
};
|
||||
}
|
|
@ -34,20 +34,26 @@ in
|
|||
|
||||
# These entries get added to /etc/hosts
|
||||
networking.hosts = {
|
||||
"127.0.0.1" = [ "cups.local" ];
|
||||
"127.0.0.1" = [ "cups.local" "help.local" "caddy.local" ];
|
||||
};
|
||||
|
||||
# Caddy reverse proxy for local services like cups
|
||||
services.caddy = {
|
||||
enable = true;
|
||||
globalConfig = ''
|
||||
default_bind 127.0.0.1
|
||||
auto_https off
|
||||
'';
|
||||
extraConfig = ''
|
||||
cups.local:80
|
||||
bind 127.0.0.1
|
||||
cups.local:80 {
|
||||
request_header Host localhost:631
|
||||
reverse_proxy unix//run/cups/cups.sock
|
||||
}
|
||||
|
||||
help.local:80 {
|
||||
root * ${pkgs.psos-docs}/lib/html
|
||||
file_server
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
|
24
modules/paranoia/default.nix
Normal file
24
modules/paranoia/default.nix
Normal file
|
@ -0,0 +1,24 @@
|
|||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
psCfg = config.pub-solar;
|
||||
cfg = config.pub-solar.paranoia;
|
||||
in
|
||||
{
|
||||
options.pub-solar.paranoia = {
|
||||
enable = mkOption {
|
||||
description = ''
|
||||
Only offer hibernation instead of screen locking and sleeping. This only makes sense
|
||||
if your hard drive is encrypted, and ensures that the contents of your drive are
|
||||
encrypted if you are not actively using the device.
|
||||
'';
|
||||
default = false;
|
||||
type = types.bool;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
pub-solar.core.hibernation.enable = true;
|
||||
};
|
||||
}
|
|
@ -14,8 +14,9 @@ assign [app_id="telegramdesktop"] $ws4
|
|||
# Launcher
|
||||
for_window [app_id="launcher" title="Alacritty"] floating enable, border pixel 10, sticky enable
|
||||
|
||||
for_window [app_id="pavucontrol"] floating enable, border pixel 10, sticky enable
|
||||
|
||||
# Floating menus
|
||||
for_window [app_id="pavucontrol"] floating enable
|
||||
for_window [app_id="blueman-manager"] floating enable
|
||||
|
||||
# Open specific applications in floating mode
|
||||
|
@ -60,10 +61,14 @@ for_window [window_type="dialog"] floating enable
|
|||
for_window [window_type="menu"] floating enable
|
||||
for_window [title="About Mozilla Firefox"] floating enable
|
||||
for_window [title="Password Required - Mozilla Firefox"] floating enable
|
||||
for_window [title="Firefox — Sharing Indicator"] move to workspace $ws7, floating enable
|
||||
no_focus [title="Firefox — Sharing Indicator"]
|
||||
for_window [title="Extension: (Open in Browser)*"] floating enable
|
||||
|
||||
# Technical media stuff happens on ws7
|
||||
for_window [app_id="screen-recorder" title="Alacritty"] move to workspace $ws7, floating disable
|
||||
no_focus [app_id="screen-recorder"]
|
||||
for_window [title="Firefox — Sharing Indicator"] move to workspace $ws7, floating disable
|
||||
no_focus [title="Firefox — Sharing Indicator"]
|
||||
|
||||
# qMasterPassword floating menu
|
||||
for_window [title="qMasterPassword"] focus
|
||||
for_window [title="qMasterPassword"] floating enable
|
||||
|
|
|
@ -13,37 +13,26 @@ bindsym $mod+Ctrl+m exec pavucontrol
|
|||
################################################################################################
|
||||
|
||||
# Quickstart application shortcuts
|
||||
bindsym $mod+F1 exec qMasterPassword
|
||||
bindsym $mod+F1 exec psos help
|
||||
bindsym $mod+Shift+h exec psos help
|
||||
|
||||
bindsym $mod+F2 exec firefox
|
||||
|
||||
bindsym $mod+F3 exec $term -e vifm
|
||||
bindsym $mod+Shift+F3 exec gksu $term -e vifm
|
||||
|
||||
bindsym $mod+F4 exec nautilus -w
|
||||
bindsym $mod+Shift+F4 exec signal-desktop --use-tray-icon
|
||||
bindsym $mod+F5 exec $term -e 'mocp -C $XDG_CONFIG_DIR/mocp/config'
|
||||
bindsym $mod+Shift+m exec mu
|
||||
bindsym $mod+Shift+h exec xdg-open /usr/share/doc/manjaro/i3_help.pdf
|
||||
|
||||
# Screenshofts
|
||||
bindsym $mod+Shift+m exec qMasterPassword
|
||||
|
||||
# Screenshots and screen recordings
|
||||
bindsym $mod+Ctrl+p exec grim -g "$(slurp -d -b \#ffffff11)" ~/Pictures/Screenshots/$(date +%Y%m%d_%Hh%Mm%Ss)_grim.png
|
||||
bindsym $mod+Shift+p exec grim ~/Pictures/Screenshots/$(date +%Y%m%d_%Hh%Mm%Ss)_grim.png
|
||||
bindsym $mod+Ctrl+f exec "( pkill flameshot || true && flameshot & ) && ( sleep 0.5s && flameshot gui )"
|
||||
|
||||
bindsym $mod+Ctrl+r exec record-screen
|
||||
|
||||
# Launcher
|
||||
set $menu exec alacritty --class launcher -e env TERMINAL_COMMAND="alacritty -e" sway-launcher
|
||||
bindsym $mod+Space exec $menu
|
||||
|
||||
# Set shut down, restart and locking features
|
||||
set $mode_system (l)ock, (e)xit, (s)uspend, (h)ibernate, (r)eboot, (Shift+s)hutdown
|
||||
bindsym $mod+0 mode "$mode_system"
|
||||
mode "$mode_system" {
|
||||
bindsym l exec swaylock-bg, mode "default"
|
||||
bindsym e exec systemctl --user stop graphical-session.target, mode "default"
|
||||
bindsym s exec systemctl suspend, mode "default"
|
||||
bindsym h exec systemctl hibernate, mode "default"
|
||||
bindsym r exec systemctl reboot, mode "default"
|
||||
bindsym Shift+s exec systemctl poweroff, mode "default"
|
||||
|
||||
# exit system mode: "Enter" or "Escape"
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
}
|
||||
|
|
21
modules/sway/config/config.d/mode_system.conf.nix
Normal file
21
modules/sway/config/config.d/mode_system.conf.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{ psCfg, ... }: ''
|
||||
# Set shut down, restart and locking features
|
||||
set $mode_system (e)xit, (h)ibernate, (r)eboot, (Shift+s)hutdown
|
||||
bindsym $mod+0 mode "$mode_system"
|
||||
mode "$mode_system" {
|
||||
bindsym e exec swaymsg exit, mode "default"
|
||||
'' + (if !psCfg.core.hibernation.enable then ''
|
||||
bindsym h exec systemctl hibernate, mode "default"
|
||||
'' else "")
|
||||
+ (if !psCfg.paranoia.enable then ''
|
||||
bindsym l exec swaylock-bg, mode "default"
|
||||
bindsym s exec systemctl suspend, mode "default"
|
||||
'' else "") + ''
|
||||
bindsym r exec systemctl reboot, mode "default"
|
||||
bindsym Shift+s exec systemctl poweroff, mode "default"
|
||||
|
||||
# exit system mode: "Enter" or "Escape"
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
}
|
||||
''
|
|
@ -50,7 +50,7 @@
|
|||
floating_modifier $mod normal
|
||||
|
||||
# Reload the configuration file
|
||||
bindsym $mod+Ctrl+r reload
|
||||
bindsym $mod+F5 reload
|
||||
|
||||
#
|
||||
# Moving around:
|
||||
|
|
|
@ -2,25 +2,26 @@
|
|||
with lib;
|
||||
let
|
||||
psCfg = config.pub-solar;
|
||||
cfg = config.pub-solar.sway;
|
||||
in
|
||||
{
|
||||
options.pub-solar.sway = {
|
||||
enable = mkEnableOption "Life in boxes";
|
||||
};
|
||||
options.pub-solar.sway.terminal = mkOption {
|
||||
|
||||
terminal = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "alacritty";
|
||||
description = "Choose sway's default terminal";
|
||||
};
|
||||
options.pub-solar.sway.v4l2loopback.enable = mkOption {
|
||||
|
||||
v4l2loopback.enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "WebCam streaming tool";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable (mkMerge [
|
||||
(mkIf (cfg.v4l2loopback.enable) {
|
||||
config = mkIf psCfg.sway.enable (mkMerge [
|
||||
(mkIf (psCfg.sway.v4l2loopback.enable) {
|
||||
boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ];
|
||||
boot.kernelModules = [ "v4l2loopback" ];
|
||||
boot.extraModprobeConfig = ''
|
||||
|
@ -75,8 +76,8 @@ in
|
|||
xsettingsd
|
||||
ydotool
|
||||
|
||||
swaylock-bg
|
||||
sway-launcher
|
||||
record-screen
|
||||
import-gtk-settings
|
||||
s
|
||||
wcwd
|
||||
|
@ -85,18 +86,19 @@ in
|
|||
programs.waybar.enable = true;
|
||||
#programs.waybar.systemd.enable = true;
|
||||
|
||||
systemd.user.services.mako = import ./mako.service.nix pkgs;
|
||||
systemd.user.services.sway = import ./sway.service.nix pkgs;
|
||||
systemd.user.services.swayidle = import ./swayidle.service.nix pkgs;
|
||||
systemd.user.services.xsettingsd = import ./xsettingsd.service.nix pkgs;
|
||||
systemd.user.services.waybar = import ./waybar.service.nix pkgs;
|
||||
systemd.user.targets.sway-session = import ./sway-session.target.nix pkgs;
|
||||
systemd.user.services.mako = import ./mako.service.nix { inherit pkgs psCfg; };
|
||||
systemd.user.services.sway = import ./sway.service.nix { inherit pkgs psCfg; };
|
||||
systemd.user.services.swayidle = import ./swayidle.service.nix { inherit pkgs psCfg; };
|
||||
systemd.user.services.xsettingsd = import ./xsettingsd.service.nix { inherit pkgs psCfg; };
|
||||
systemd.user.services.waybar = import ./waybar.service.nix { inherit pkgs psCfg; };
|
||||
systemd.user.targets.sway-session = import ./sway-session.target.nix { inherit pkgs psCfg; };
|
||||
|
||||
xdg.configFile."sway/config".text = import ./config/config.nix { inherit config pkgs; };
|
||||
xdg.configFile."sway/config.d/colorscheme.conf".source = ./config/config.d/colorscheme.conf;
|
||||
xdg.configFile."sway/config.d/theme.conf".source = ./config/config.d/theme.conf;
|
||||
xdg.configFile."sway/config.d/gaps.conf".source = ./config/config.d/gaps.conf;
|
||||
xdg.configFile."sway/config.d/custom-keybindings.conf".source = ./config/config.d/custom-keybindings.conf;
|
||||
xdg.configFile."sway/config.d/mode_system.conf".text = import ./config/config.d/mode_system.conf.nix { inherit psCfg; };
|
||||
xdg.configFile."sway/config.d/applications.conf".source = ./config/config.d/applications.conf;
|
||||
xdg.configFile."sway/config.d/systemd.conf".source = ./config/config.d/systemd.conf;
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
pkgs:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
Unit = {
|
||||
Description = "set color temperature of display according to time of day";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
pkgs:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
Unit = {
|
||||
Description = "Actions gestures on your touchpad using libinput";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
pkgs:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
Unit = {
|
||||
Description = "Lightweight Wayland notification daemon";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
pkgs:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
Unit = {
|
||||
Description = "sway compositor session";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
pkgs:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
Unit = {
|
||||
Description = "sway - SirCmpwn's Wayland window manager";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
pkgs:
|
||||
{ pkgs, psCfg, ... }:
|
||||
{
|
||||
Unit = {
|
||||
Description = "Idle manager for Wayland";
|
||||
|
@ -9,8 +9,13 @@ pkgs:
|
|||
};
|
||||
Service = {
|
||||
Type = "simple";
|
||||
Environment = "PATH=/run/current-system/sw/bin:${pkgs.sway}/bin:${pkgs.swaylock}/bin:${pkgs.swaylock-bg}/bin";
|
||||
ExecStart = ''${pkgs.swayidle}/bin/swayidle -w \
|
||||
Environment = "PATH=/run/current-system/sw/bin:${pkgs.sway}/bin";
|
||||
ExecStart = if psCfg.paranoia.enable then ''
|
||||
${pkgs.swayidle}/bin/swayidle -w \
|
||||
timeout 120 'swaymsg "output * dpms off"' \
|
||||
timeout 150 'systemctl hibernate' \
|
||||
'' else ''
|
||||
${pkgs.swayidle}/bin/swayidle -w \
|
||||
timeout 600 'swaylock-bg' \
|
||||
timeout 900 'swaymsg "output * dpms off"' \
|
||||
resume 'swaymsg "output * dpms on"' \
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
pkgs:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
Unit = {
|
||||
Description = "Highly customizable Wayland bar for Sway and Wlroots based compositors.";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
pkgs:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
Unit = {
|
||||
Description = "X Settings Daemon";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
pkgs:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
Unit = {
|
||||
Description = "ydotool - Generic command-line automation tool (no X!)";
|
||||
|
|
|
@ -9,14 +9,16 @@ with final; {
|
|||
mopidy-jellyfin = import ./mopidy-jellyfin.nix final;
|
||||
mu = writeShellScriptBin "mu" (import ./mu.nix final);
|
||||
psos = writeShellScriptBin "psos" (import ./psos.nix final);
|
||||
psos-docs = import ./psos-docs.nix final;
|
||||
s = writeShellScriptBin "s" (import ./s.nix final);
|
||||
sway-launcher = writeScriptBin "sway-launcher" (import ./sway-launcher.nix final);
|
||||
sway-service = writeShellScriptBin "sway-service" (import ./sway-service.nix final);
|
||||
swaylock-bg = writeScriptBin "swaylock-bg" (import ./swaylock-bg.nix final);
|
||||
swaylock-bg = writeShellScriptBin "swaylock-bg" (import ./swaylock-bg.nix final);
|
||||
toggle-kbd-layout = writeShellScriptBin "toggle-kbd-layout" (import ./toggle-kbd-layout.nix final);
|
||||
uhk-agent = import ./uhk-agent.nix final;
|
||||
wcwd = writeShellScriptBin "wcwd" (import ./wcwd.nix final);
|
||||
drone-docker-runner = writeShellScriptBin "drone-docker-runner" (import ./drone-docker-runner.nix final);
|
||||
record-screen = writeShellScriptBin "record-screen" (import ./record-screen.nix final);
|
||||
|
||||
# ps-fixes
|
||||
}
|
||||
|
|
26
pkgs/psos-docs.nix
Normal file
26
pkgs/psos-docs.nix
Normal file
|
@ -0,0 +1,26 @@
|
|||
self: with self;
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "psos-docs";
|
||||
version = "0.0.1";
|
||||
buildInputs = [
|
||||
mdbook
|
||||
mdbook-pdf
|
||||
];
|
||||
|
||||
src = ../docs/..; # wut
|
||||
|
||||
phases = [ "buildPhase" "installPhase" ];
|
||||
|
||||
buildPhase = ''
|
||||
cp -r $src/doc ./doc
|
||||
cp $src/README.md ./README.md
|
||||
chmod ug+w -R .
|
||||
ls -la .
|
||||
mdbook build doc
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/lib/
|
||||
cp -r doc/book $out/lib/html
|
||||
'';
|
||||
}
|
|
@ -14,6 +14,10 @@ self: with self; ''
|
|||
shift;
|
||||
exec nixos-option -I nixpkgs=/etc/nixos/lib/compat $@
|
||||
;;
|
||||
help)
|
||||
shift;
|
||||
exec xdg-open http://help.local/
|
||||
;;
|
||||
*)
|
||||
if [[ "$@" != "" ]]; then
|
||||
echo "Unknown command: psos $@"
|
||||
|
|
10
pkgs/record-screen.nix
Normal file
10
pkgs/record-screen.nix
Normal file
|
@ -0,0 +1,10 @@
|
|||
self: with self; ''
|
||||
mkdir -p "$HOME/Videos/Screenrecordings"
|
||||
GEOMETRY="$(slurp -d -b \#ffffff11)"
|
||||
RESOLUTION="$(echo $GEOMETRY | awk '{print $2}')"
|
||||
FILE_LOCATION="$HOME/Videos/Screenrecordings/$(${coreutils}/bin/date +%Y%m%d_%Hh%Mm%Ss)_$RESOLUTION.mp4"
|
||||
echo "Recording $GEOMETRY into $FILE_LOCATION"
|
||||
${alacritty}/bin/alacritty \
|
||||
--class screen-recorder \
|
||||
-e ${wf-recorder}/bin/wf-recorder -g "$GEOMETRY" -f "$FILE_LOCATION"
|
||||
''
|
Loading…
Reference in a new issue