mireadesktop/flake.nix

153 lines
4.8 KiB
Nix
Raw Permalink Normal View History

{
description = "MIREA desktop";
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
outputs = { self, nixpkgs, ... }:
let
pkgs = import nixpkgs { system = "x86_64-linux"; };
2025-01-02 22:04:53 +03:00
wallpaper = builtins.readFile "${self}/wallpaper.svg";
folderIcon = builtins.readFile "${self}/folderIcon.svg";
2025-01-02 22:47:00 +03:00
pcmanfmConf = "${self}/pcmanfm.conf";
desktopItems0 = (pkgs.writeText "desktop-items-0.conf"
''
[*]
wallpaper_mode=center
wallpaper_common=1
wallpapers_configured=1
2025-01-24 22:11:46 +03:00
wallpaper=${self}/wallpaper.svg
desktop_bg=#77767b
desktop_fg=#ffffff
desktop_shadow=#000000
desktop_font=Sans 12
folder=/home/student
show_wm_menu=1
sort=mtime;ascending;
show_documents=0
show_trash=1
show_mounts=1
'');
2025-01-02 22:04:53 +03:00
tint2conf1 = builtins.readFile "${self}/tint2conf.1";
tint2conf2 = builtins.readFile "${self}/tint2conf.2";
tint2config = pkgs.writeText "tint2conf"
''
${tint2conf1}
#-------------------------------------
button = new
button_lclick_command = ${jgmenu_run_prepared}
2025-01-02 23:57:44 +03:00
button_icon = ${self}/wallpaper.svg
separator = new
separator_style = empty
separator_padding = 3 4
button = new
button_lclick_command = ${pkgs.chromium}/bin/chromium
button_icon = ${pkgs.chromium}/share/icons/hicolor/48x48/apps/chromium.png
button = new
button_lclick_command = ${pkgs.pcmanfm}/bin/pcmanfm
2025-01-02 23:57:44 +03:00
button_icon = ${self}/folderIcon.svg
separator = new
separator_style = empty
separator_padding = 3 4
#-------------------------------------
execp = new
execp_name = switch
execp_command = ${pkgs.xkb-switch}/bin/xkb-switch
execp_interval = 1
execp_font = mono 10
execp_font_color = #dddddd 100
execp_centered = 1
execp_has_icon = 0
execp_padding = 5 5
#-------------------------------------
execp = new
execp_name = mireaweek
2025-01-24 20:56:29 +03:00
execp_command = ${mireaweek}/bin/mireaweek
execp_interval = 0
execp_font = mono 10
execp_font_color = #dddddd 100
execp_centered = 1
execp_has_icon = 0
execp_padding = 5 5
${tint2conf2}
'';
jgmenu_run_prepared =
2025-01-24 20:56:29 +03:00
(pkgs.writeShellScript "jgmenu_run_prepared"
''${pkgs.jgmenu}/bin/jgmenu_run apps | ${prepare_jgmenu}/bin/prepare_jgmenu | ${pkgs.jgmenu}/bin/jgmenu --simple'');
powermenu = (pkgs.writeShellScript "powermenu"
''
if [ "$1" = "poweroff" ]; then
${pkgs.zenity}/bin/zenity --question --text "Уверены, что хотите выключить?" --default-cancel && poweroff
exit 0
fi
if [ "$1" = "reboot" ]; then
${pkgs.zenity}/bin/zenity --question --text "Уверены, что хотите перезагрузить?" --default-cancel && reboot
exit 0
fi
'');
mireaweek = pkgs.stdenv.mkDerivation rec {
2025-01-24 20:56:29 +03:00
pname = "mireaweek";
version = "0.1.0";
src = ./weekday.kt;
dontInstall = true;
dontUnpack = true;
2025-01-24 20:56:29 +03:00
nativeBuildInputs = [pkgs.kotlin];
buildPhase = ''
2025-01-24 20:56:29 +03:00
mkdir -p $out/{bin,lib}
2025-01-24 21:12:40 +03:00
kotlinc $src -include-runtime -d mireaweek.jar
2025-01-24 21:10:32 +03:00
mv mireaweek.jar $out/lib
2025-01-24 21:44:13 +03:00
printf "${pkgs.jre}/bin/java -jar $out/lib/mireaweek.jar" > $out/bin/mireaweek
2025-01-24 20:56:29 +03:00
chmod +x $out/bin/mireaweek
'';
2025-01-24 20:56:29 +03:00
};
prepare_jgmenu = pkgs.stdenv.mkDerivation rec {
pname = "prepare_jgmenu";
version = "0.1.0";
src = ./JgmenuCorrector.kt;
dontInstall = true;
dontUnpack = true;
nativeBuildInputs = [pkgs.kotlin];
buildPhase = ''
mkdir -p $out/{bin,lib}
2025-01-24 21:12:40 +03:00
kotlinc $src -include-runtime -d prepare.jar
2025-01-24 21:10:32 +03:00
mv prepare.jar $out/lib
2025-01-24 21:44:13 +03:00
printf "${pkgs.jre}/bin/java -jar $out/lib/prepare.jar" > $out/bin/prepare_jgmenu
2025-01-24 20:56:29 +03:00
chmod +x $out/bin/prepare_jgmenu
'';
};
2025-01-06 21:29:51 +03:00
myxinitrc = pkgs.writeText ".xinitrc" "${tint2custom} &\n${pcmanfmdesktop} &\nexec ${pkgs.metacity}/bin/metacity";
2025-01-25 18:14:49 +03:00
resethome = pkgs.writeShellScript "startmireadesktop"
''
2025-01-24 21:59:50 +03:00
rm -rf $HOME/{*,.*} 2> /dev/null # wipe student directory, yeah!
printf "[client]\nport=3306\nuser=root" > /home/student/.my.cnf
echo "\set user postgres" > /home/student/.psqlrc
mkdir -p "$HOME/.config/pcmanfm/default"
2025-01-24 22:17:42 +03:00
cp ${desktopItems0} "$HOME/.config/pcmanfm/default/desktop-items-0.conf"
cp ${pcmanfmConf} "$HOME/.config/pcmanfm/default/pcmanfm.conf"
2025-01-25 18:14:49 +03:00
chmod +w -R "$HOME/.config/pcmanfm/default/"
2025-01-24 21:59:50 +03:00
mkdir -p "$HOME/.config/gtk-3.0"
printf "[Settings]\ngtk-icon-theme-name = WhiteSur" > "$HOME/.config/gtk-3.0/settings.ini"
'';
2025-01-06 21:29:51 +03:00
tint2custom = pkgs.writeShellScript "tint2"
''
${pkgs.tint2}/bin/tint2 -c ${tint2config}
'';
pcmanfmdesktop = pkgs.writeShellScript "pcmanfm"
''
${pkgs.pcmanfm}/bin/pcmanfm --desktop
'';
in {
2025-01-24 20:56:29 +03:00
packages.x86_64-linux.powermenu = powermenu; # must be imported into configuration.nix!
2025-01-06 21:29:51 +03:00
packages.x86_64-linux.tint2 = tint2custom;
packages.x86_64-linux.pcmanfm = pcmanfmdesktop;
2025-01-25 18:14:49 +03:00
packages.x86_64-linux.resethome = resethome;
2025-01-25 18:16:10 +03:00
defaultPackage.x86_64-linux = resethome;
};
2025-01-02 21:48:00 +03:00
}