feat(Justfile): cachix recipe and apply locally without ssh

This commit is contained in:
steveej 2023-05-23 18:09:54 +02:00
parent 349057f1c3
commit 5b6ecd0a25
8 changed files with 414 additions and 1 deletions

View file

View file

@ -0,0 +1,146 @@
* {
/* all: unset;*/
border: none;
border-radius: 0;
/* `otf-font-awesome` is required to be installed for icons */
/* font matches sway-config.nix */
font-family: "Iosevka Comfy Fixed"; /* TODO: parameterize this? */
font-weight: bold;
font-size: 12px;
min-height: 0;
padding: 0px;
}
window#waybar {
background-color: #111111;
color: #666666;
border-bottom: 2px double #fff;
border-bottom: 2px double #33ccff;
}
/*
window#waybar.termite {
background-color: #3F3F3F;
}
window#waybar.chromium {
background-color: #000000;
border: none;
}
*/
#workspaces button {
padding: 0px;
margin: 4px;
margin-left: 2px;
margin-right: 2px;
color: #cccccc;
min-width: 25px;
border: 1px solid transparent;
}
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
/*
#workspaces button:hover {
background: rgba(0, 0, 0, 0.2);
box-shadow: inherit;
border-bottom: 3px solid #ffffff;
}
*/
#workspaces button.current_output {
border-color: #aaa;
border-style: dotted;
color: #ffffff;
}
#workspaces button.focused {
background-color: #aaa;
color: #000000;
border-color: #aaa;
border-style: solid;
}
#workspaces button.focused.current_output {
border-color: #ee00ff;
border-style: solid;
}
#workspaces button.urgent {
background-color: #eb4d4b;
}
#mode {
background-color: #64727D;
border-bottom: 1px solid #ffffff;
}
#tray {
background-color: #111111;
}
#clock,
#clock-time,
#battery,
#cpu,
#memory,
#temperature,
#network,
#custom-ppp,
#custom-rog,
#tray,
#mode,
#backlight,
#pulseaudio,
#idle_inhibitor,
#mpd {
/*padding: 2px;*/
padding: 0px;
padding-left: 4px;
padding-right: 4px;
margin: 4px;
margin-right: 6px;
color: #fff;
background-color: #333;
}
#battery {
}
#battery.charging {
color: #26A65B;
}
@keyframes blink {
to {
background-color: #f53c3c;
color: #ffffff;
}
}
#battery.Charging {
color: green;
}
#battery.Discharging {
color: blue;
}
#battery.Discharging.warning {
color: orange;
}
#battery.Discharging.critical {
background-color: #f53c3c;
color: #ffffff;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
/*
label:focus {
background-color: #000000;
}
*/

View file

@ -0,0 +1,197 @@
{ pkgs, config, inputs, ... }:
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";
# };
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 = ({
"sway/workspaces" = {
all-outputs = true;
disable-scroll-wraparound = true;
#enable-bar-scroll = true;
};
"sway/mode" = { tooltip = false; };
# # 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);
}];
};
};
};
}

14
nix/os/cachix.nix Normal file
View file

@ -0,0 +1,14 @@
# WARN: this file will get overwritten by $ cachix use <name>
{ pkgs, lib, ... }:
let
folder = ./cachix;
toImport = name: value: folder + ("/" + name);
filterCaches = key: value: value == "regular" && lib.hasSuffix ".nix" key;
imports = lib.mapAttrsToList toImport (lib.filterAttrs filterCaches (builtins.readDir folder));
in {
inherit imports;
nix.binaryCaches = ["https://cache.nixos.org/"];
}

View file

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

View file