Improve hotkey
This commit is contained in:
parent
5c0758fe5a
commit
30d784e20c
|
@ -134,7 +134,7 @@ in [
|
||||||
"MPD Whisky" = "ncmpcpp -h whisky.w17.io";
|
"MPD Whisky" = "ncmpcpp -h whisky.w17.io";
|
||||||
"MPD Burbon" = "ncmpcpp -h burbon.w17.io";
|
"MPD Burbon" = "ncmpcpp -h burbon.w17.io";
|
||||||
"MPD Kitchen" = "ncmpcpp -h kitchen.w17.io";
|
"MPD Kitchen" = "ncmpcpp -h kitchen.w17.io";
|
||||||
Strichliste = "firefox https://strichliste.w17.io";
|
Strichliste = "firefox https://strichliste.w17.io/#!/user/56";
|
||||||
Hub = "firefox https://hub.w17.io";
|
Hub = "firefox https://hub.w17.io";
|
||||||
Summer = "ssh door@burbon.w17.io buzzer";
|
Summer = "ssh door@burbon.w17.io buzzer";
|
||||||
Open = "ssh door@burbon.w17.io open";
|
Open = "ssh door@burbon.w17.io open";
|
||||||
|
|
|
@ -1,22 +1,111 @@
|
||||||
final: _: {
|
final: _: let
|
||||||
updateSystem = final.writeShellScriptBin "update-system" ''
|
inherit (final) pkgs lib;
|
||||||
set -e
|
homeDir = "/home/maralorn";
|
||||||
remote_host=$1
|
modeFile = "${homeDir}/.volatile/mode";
|
||||||
host=''${remote_host:-$(hostname)}
|
modeDir = "${homeDir}/.volatile/modes";
|
||||||
echo "Building configuration for $host …"
|
configPath = "${homeDir}/git/config";
|
||||||
output=$(nom build --builders @$(builders-configurator) /home/maralorn/git/config#nixosConfigurations.$host.config.system.build.toplevel --no-link --print-out-paths)
|
configGit = "${lib.getExe pkgs.git} -C ${configPath}";
|
||||||
if [[ -z "$remote_host" ]]; then
|
get_mode = ''
|
||||||
on_target() {
|
mode <- decodeUtf8 @Text <$> (cat "${modeFile}" |> captureTrim)
|
||||||
/run/wrappers/bin/sudo $@
|
|
||||||
}
|
|
||||||
else
|
|
||||||
on_target() {
|
|
||||||
${final.lib.getExe final.openssh} root@$host $@
|
|
||||||
}
|
|
||||||
echo "Uploading configuration to $host …"
|
|
||||||
${final.lib.getExe final.nix} copy $output --to ssh://$host
|
|
||||||
fi
|
|
||||||
on_target ${final.nix}/bin/nix-env -p /nix/var/nix/profiles/system --set $output
|
|
||||||
on_target $output/bin/switch-to-configuration switch
|
|
||||||
'';
|
'';
|
||||||
}
|
get_available_modes = ''
|
||||||
|
available_modes <- Directory.listDirectory "${modeDir}"
|
||||||
|
'';
|
||||||
|
get_hostname = ''
|
||||||
|
hostname <- BSC.strip <$> readFileBS "/etc/hostname"
|
||||||
|
'';
|
||||||
|
get_builders = ''
|
||||||
|
builders <- builders_configurator |> captureTrim
|
||||||
|
'';
|
||||||
|
mode-scripts = {
|
||||||
|
maintenance = pkgs.writeShellScriptBin "maintenance" ''
|
||||||
|
set -e
|
||||||
|
${configGit} pull --ff-only
|
||||||
|
echo "Running update-modes …"
|
||||||
|
${lib.getExe pkgs.updateModes}
|
||||||
|
echo "Updating system …"
|
||||||
|
${lib.getExe pkgs.updateSystem}
|
||||||
|
echo "Maintenance finished."
|
||||||
|
'';
|
||||||
|
activateMode = pkgs.writeHaskellScript {name = "activate-mode";} ''
|
||||||
|
wallpaperCmd = "random-wallpaper"
|
||||||
|
|
||||||
|
main = do
|
||||||
|
${get_mode}
|
||||||
|
say [i|Switching to mode #{mode}...|]
|
||||||
|
exe ([i|${modeDir}/#{mode}/activate|] :: String)
|
||||||
|
whenM (elem wallpaperCmd <$> pathBins) $ exe wallpaperCmd
|
||||||
|
'';
|
||||||
|
selectMode =
|
||||||
|
pkgs.writeHaskellScript
|
||||||
|
{
|
||||||
|
name = "select-mode";
|
||||||
|
bins = [
|
||||||
|
pkgs.activateMode
|
||||||
|
pkgs.psmisc
|
||||||
|
];
|
||||||
|
imports = ["System.Directory qualified as Directory"];
|
||||||
|
} ''
|
||||||
|
main = do
|
||||||
|
[mode] <- getArgs
|
||||||
|
${get_available_modes}
|
||||||
|
unless (mode `elem` available_modes) do say [i|"#{mode}" is not a known mode|]; exitFailure
|
||||||
|
writeFile "${modeFile}" mode
|
||||||
|
activate_mode
|
||||||
|
ignoreFailure $ killall ["GeckoMain", "firefox", ".firefox-wrapped"]
|
||||||
|
'';
|
||||||
|
updateModes =
|
||||||
|
pkgs.writeHaskellScript
|
||||||
|
{
|
||||||
|
name = "update-modes";
|
||||||
|
bins = [pkgs.activateMode pkgs.git pkgs.nix-output-monitor pkgs.builders-configurator];
|
||||||
|
} ''
|
||||||
|
main = do
|
||||||
|
${get_hostname}
|
||||||
|
say [i|Building ~/.modes for #{hostname}|]
|
||||||
|
${get_builders}
|
||||||
|
nom ["build", "--builders", [i|@#{builders}|], [i|${configPath}\#homeModes.#{hostname}|], "-o", "${modeDir}"]
|
||||||
|
activate_mode
|
||||||
|
'';
|
||||||
|
quickUpdateMode =
|
||||||
|
pkgs.writeHaskellScript
|
||||||
|
{
|
||||||
|
name = "quick-update-mode";
|
||||||
|
bins = [pkgs.updateModes pkgs.git pkgs.home-manager pkgs.nix-output-monitor pkgs.builders-configurator];
|
||||||
|
} ''
|
||||||
|
|
||||||
|
main = do
|
||||||
|
${get_hostname}
|
||||||
|
${get_mode}
|
||||||
|
${get_builders}
|
||||||
|
say [i|Quick switching to mode #{mode} ...|]
|
||||||
|
path <- decodeUtf8 @Text <$> (nom ["build", "--builders", [i|@#{builders}|], "--print-out-paths", "--no-link", [i|${configPath}\#homeConfigurations.#{hostname}-#{mode}.activationPackage|]] |> captureTrim)
|
||||||
|
exe ([i|#{path}/activate|] :: String)
|
||||||
|
update_modes
|
||||||
|
'';
|
||||||
|
updateSystem = pkgs.writeShellScriptBin "update-system" ''
|
||||||
|
set -e
|
||||||
|
remote_host=$1
|
||||||
|
host=''${remote_host:-$(hostname)}
|
||||||
|
echo "Building configuration for $host …"
|
||||||
|
output=$(nom build --builders @$(builders-configurator) /home/maralorn/git/config#nixosConfigurations.$host.config.system.build.toplevel --no-link --print-out-paths)
|
||||||
|
if [[ -z "$remote_host" ]]; then
|
||||||
|
on_target() {
|
||||||
|
/run/wrappers/bin/sudo $@
|
||||||
|
}
|
||||||
|
else
|
||||||
|
on_target() {
|
||||||
|
${pkgs.lib.getExe pkgs.openssh} root@$host $@
|
||||||
|
}
|
||||||
|
echo "Uploading configuration to $host …"
|
||||||
|
${final.lib.getExe pkgs.nix} copy $output --to ssh://$host
|
||||||
|
fi
|
||||||
|
on_target ${pkgs.nix}/bin/nix-env -p /nix/var/nix/profiles/system --set $output
|
||||||
|
on_target $output/bin/switch-to-configuration switch
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
mode-scripts
|
||||||
|
// {
|
||||||
|
inherit mode-scripts;
|
||||||
|
}
|
||||||
|
|
|
@ -71,13 +71,16 @@ in {
|
||||||
{-# LANGUAGE PartialTypeSignatures #-}
|
{-# LANGUAGE PartialTypeSignatures #-}
|
||||||
{-# LANGUAGE BlockArguments #-}
|
{-# LANGUAGE BlockArguments #-}
|
||||||
{-# LANGUAGE ImportQualifiedPost #-}
|
{-# LANGUAGE ImportQualifiedPost #-}
|
||||||
|
{-# LANGUAGE TypeApplications #-}
|
||||||
|
|
||||||
import Shh
|
import Shh
|
||||||
import Relude
|
import Relude
|
||||||
import Say
|
import Say
|
||||||
import qualified Relude.Unsafe as Unsafe
|
import qualified Relude.Unsafe as Unsafe
|
||||||
import qualified Data.ByteString.Lazy as LBS
|
import qualified Data.ByteString.Lazy as LBS
|
||||||
|
import qualified Data.ByteString.Lazy.Char8 as LBSC
|
||||||
import qualified Data.ByteString as BS
|
import qualified Data.ByteString as BS
|
||||||
|
import qualified Data.ByteString.Char8 as BSC
|
||||||
import qualified Data.Text as Text
|
import qualified Data.Text as Text
|
||||||
import System.Environment (setEnv)
|
import System.Environment (setEnv)
|
||||||
import Control.Exception (bracket, try)
|
import Control.Exception (bracket, try)
|
||||||
|
|
Loading…
Reference in a new issue