Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,831 changes: 964 additions & 867 deletions Cargo.lock

Large diffs are not rendered by default.

36 changes: 13 additions & 23 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,40 +1,30 @@
[package]
name = "icicle"
version = "0.0.2"
edition = "2021"
edition = "2024"
default-run = "icicle"

[dependencies]
relm4 = { version = "0.11", features = ["libadwaita", "macros"] }
relm4 = { version = "0.11", features = ["libadwaita", "gnome_50", "macros"] }
relm4-components = { package = "relm4-components", version = "0.11"}
adw = { package = "libadwaita", version = "0.9", features = ["v1_2", "gtk_v4_6"] }
gtk = { package = "gtk4", version = "0.11", features = ["v4_6"] }
glib = { package = "glib", version = "0.22", features = ["v2_68"] }
vte = { package = "vte4", version = "0.10"}
gettext-rs = { version = "0.7.7", features = ["gettext-system"] }
gnome-desktop = { package = "gnome-desktop-xinux", version = "0.22" }
libgweather = "4.8.0"

anyhow = "1.0"
regex = "1.13"
reqwest = { version = "0.13", features = ["blocking"] }
tokio = { version = "1.32", features = ["full"] }
tracker = "0.2"
serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] }
serde_yaml = "0.9"

log = "0.4"
simplelog = "0.12"

anyhow = "1.0"

size = "0.5"
log = "0.4"
isolang = "2.3.0"
gnome-desktop = "0.4.2"
libgweather = "4.3"

size = "0.4"

vte4 = "0.10"

distinst-disks = { git = "https://github.com/pop-os/distinst/" }

reqwest = { version = "0.11", features = ["blocking"] }

gettext-rs = { version = "0.7", features = ["gettext-system"] }
regex = "1.9"
distinst-disks = { git = "https://git.oss.uzinfocom.uz/xinux/distinst" }

[workspace]
members = [".", "icicle-helper"]
Expand Down
29 changes: 26 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
Icicle
===



[![Built with Nix][builtwithnix badge]][builtwithnix]
[![License: GPLv3][GPLv3 badge]][GPLv3]
[![Chat on Matrix][matrix badge]][matrix]
Expand All @@ -15,12 +13,37 @@ Icicle

A graphical installer for NixOS based distributions.

## Development

This application has Linux-only dependencies.

```bash
# download dependencies
nix develop

# with meson
meson setup builddir --prefix=~/.local --reconfigure --buildtype=debug -Dprofile=development --reconfigure
meson install -C builddir

# Run
# Avoid pkexec must be root error on devShell
cd ..
~/.local/bin/icicle

# Or build with nix.
nix build --show--trace

# Optional. Generate translation words from /po/POTFILES.in if needed.
cd ./po
xgettext --directory=.. --files-from=POTFILES.in --from-code=UTF-8 -kgettext -o icicle.pot
```

<a href="https://hosted.weblate.org/engage/snowflakeos/">
<img src="https://hosted.weblate.org/widgets/snowflakeos/-/icicle/multi-auto.svg" alt="Translation status"/>
</a>

<img src="data/screenshots/installing-light.png#gh-light-mode-only"/>
<img src="data/screenshots/installing-dark.png#gh-dark-mode-only"/>
<img src="data/screenshots/installing-dark.png#gh-dark-mode-only"/>

</div>

Expand Down
12 changes: 6 additions & 6 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
inputs.snowfall-lib.mkFlake {
inherit inputs;
alias.packages.default = "icicle";
alias.shells.default = "icicle";
src = ./.;
outputs-builder = channels: { formatter = channels.nixpkgs.nixfmt-tree; };
};
Expand Down
12 changes: 6 additions & 6 deletions icicle-helper/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
[package]
name = "icicle-helper"
version = "0.1.0"
edition = "2021"
edition = "2024"

[dependencies]
clap = { version = "4.0", features = ["derive"] }
users = "0.11"
uzers = "0.12"
libparted = "0.1"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
anyhow = "1.0"
distinst-disks = { git = "https://github.com/pop-os/distinst/" }
distinst-disk-ops = { git = "https://github.com/pop-os/distinst/" }
disk-types = { git = "https://github.com/pop-os/distinst/" }
distinst-disks = { git = "https://git.oss.uzinfocom.uz/xinux/distinst" }
distinst-disk-ops = { git = "https://git.oss.uzinfocom.uz/xinux/distinst" }
disk-types = { git = "https://git.oss.uzinfocom.uz/xinux/distinst" }

[[bin]]
name = "icicle-helper"
path = "src/main.rs"
path = "src/main.rs"
2 changes: 1 addition & 1 deletion icicle-helper/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ fn main() {
.map_err(|err| err.exit())
.unwrap();

if users::get_effective_uid() != 0 {
if uzers::get_effective_uid() != 0 {
eprintln!("icicle-helper must be run as root");
std::process::exit(1);
}
Expand Down
6 changes: 3 additions & 3 deletions meson.build
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
project(
'icicle',
'rust',
version: '0.0.1',
meson_version: '>= 0.59',
version: '0.0.2',
meson_version: '>= 1.9',
license: 'GPL-3.0',
)

Expand Down Expand Up @@ -30,7 +30,7 @@ prefix = get_option('prefix')
bindir = prefix / get_option('bindir')
libexecdir = prefix / get_option('libexecdir')
localedir = prefix / get_option('localedir')
sysconfdir = '/' / get_option('sysconfdir')
sysconfdir = prefix / get_option('sysconfdir')
pkgconfdir = prefix / get_option('sysconfdir')

datadir = prefix / get_option('datadir')
Expand Down
8 changes: 3 additions & 5 deletions packages/icicle/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,9 @@ stdenv.mkDerivation {

src = [ ../.. ];

cargoDeps = rustPlatform.importCargoLock {
lockFile = ../../Cargo.lock;
outputHashes = {
"disk-types-0.1.5" = "sha256-9QImftXVnuTbtXp0SFDxIvrmE3UxVbXMVAhQfiF/z30=";
};
cargoDeps = rustPlatform.fetchCargoVendor {
src = ../..;
hash = "sha256-XQqPilnZGHWd9d2U4/ctrIb6p3g6uZyTkifcKUjLAdQ=";
};

nativeBuildInputs = [
Expand Down
11 changes: 11 additions & 0 deletions rust-toolchain.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[toolchain]
channel = "stable"
components = [
"rust-src",
"llvm-tools-preview",
"rustfmt",
"rust-analyzer",
"rust-std",
"clippy",
"miri",
]
5 changes: 5 additions & 0 deletions shells/icicle/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
rustPlatform,
vte-gtk4,
wrapGAppsHook4,
pkgs,
...
}:

Expand Down Expand Up @@ -56,4 +57,8 @@ mkShell {
vte-gtk4
wrapGAppsHook4
];

# Set Environment Variables
RUST_BACKTRACE = "full";
RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}";
}
2 changes: 1 addition & 1 deletion src/ui/pages/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ impl SimpleComponent for ErrorModel {

fn init(
_parent_window: Self::Init,
root: &Self::Root,
root: Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let model = ErrorModel {
Expand Down
2 changes: 1 addition & 1 deletion src/ui/pages/install.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ impl SimpleComponent for InstallModel {

fn init(
branding: Self::Init,
root: &Self::Root,
root: Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let mut model = InstallModel {
Expand Down
2 changes: 1 addition & 1 deletion src/ui/pages/keyboard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ impl SimpleComponent for KeyboardModel {

fn init(
_parent_window: Self::Init,
root: &Self::Root,
root: Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
println!("Keyboard init");
Expand Down
2 changes: 1 addition & 1 deletion src/ui/pages/list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ impl SimpleComponent for ListModel {

fn init(
init: Self::Init,
root: &Self::Root,
root: Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let mut choices = vec![];
Expand Down
6 changes: 3 additions & 3 deletions src/ui/pages/partitions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ impl SimpleComponent for PartitionModel {

fn init(
_parent_window: Self::Init,
root: &Self::Root,
root: Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let model = PartitionModel {
Expand Down Expand Up @@ -675,7 +675,7 @@ impl FactoryComponent for Partition {
fn init_widgets(
&mut self,
_index: &DynamicIndex,
root: &Self::Root,
root: Self::Root,
_returned_widget: &<Self::ParentWidget as FactoryView>::ReturnedWidget,
sender: FactorySender<Self>,
) -> Self::Widgets {
Expand Down Expand Up @@ -734,7 +734,7 @@ impl FactoryComponent for PartitionGroup {
fn init_widgets(
&mut self,
_index: &DynamicIndex,
root: &Self::Root,
root: Self::Root,
_returned_widget: &<Self::ParentWidget as FactoryView>::ReturnedWidget,
_sender: FactorySender<Self>,
) -> Self::Widgets {
Expand Down
2 changes: 1 addition & 1 deletion src/ui/pages/summary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ impl SimpleComponent for SummaryModel {

fn init(
_parent_window: Self::Init,
root: &Self::Root,
root: Self::Root,
_sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let model = SummaryModel {
Expand Down
6 changes: 3 additions & 3 deletions src/ui/pages/timezone.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use crate::ui::window::AppMsg;
use adw::prelude::*;
use gettextrs::gettext;
use glib::TimeZone;
use gnome_desktop::{self, WallClockExt};
use log::{trace, debug};
use relm4::*;
use std::{collections::HashMap, process::Command};
use relm4::{gtk::{self, glib::{self, TimeZone}}};

#[tracker::track]
#[derive(Debug)]
Expand Down Expand Up @@ -88,7 +88,7 @@ impl SimpleComponent for TimeZoneModel {

fn init(
_parent_window: Self::Init,
root: &Self::Root,
root: Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let mut locvec: Vec<libgweather::Location> = vec![];
Expand Down Expand Up @@ -126,7 +126,7 @@ impl SimpleComponent for TimeZoneModel {
selected = Some("America/New_York".to_string());
}
debug!("Selected timezone: {:?}", selected);

for tz in y.get(2..).unwrap() {
if let (Some(country), Some(region)) = (
tz.identifier().split('/').next(),
Expand Down
4 changes: 3 additions & 1 deletion src/ui/pages/user.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ use adw::prelude::*;
use gettextrs::gettext;
use log::{debug, trace};
use relm4::*;
use relm4::{gtk::{self, glib}};


#[tracker::track]
pub struct UserModel {
Expand Down Expand Up @@ -191,7 +193,7 @@ impl SimpleComponent for UserModel {

fn init(
_parent_window: Self::Init,
root: &Self::Root,
root: Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let model = UserModel {
Expand Down
2 changes: 1 addition & 1 deletion src/ui/pages/welcome.rs
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ impl SimpleComponent for WelcomeModel {

fn init(
_parent_window: Self::Init,
root: &Self::Root,
root: Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let mut model = WelcomeModel {
Expand Down
3 changes: 2 additions & 1 deletion src/ui/quitdialog.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use super::window::AppMsg;
use adw::prelude::*;
use gettextrs::gettext;
use relm4::*;
use relm4::{gtk::{self, glib}};

#[tracker::track]
pub struct QuitDialogModel {
Expand Down Expand Up @@ -49,7 +50,7 @@ impl SimpleComponent for QuitDialogModel {

fn init(
init: Self::Init,
root: &Self::Root,
root: Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let model = QuitDialogModel {
Expand Down
Loading